From 35c6c6de8f979989aa7454eb1973b82ef8892a0f Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Tue, 8 Sep 2026 06:40:39 +0000 Subject: [PATCH 1/9] docs: prototype unified API reference experience --- API-DOCUMENTATION-ARCHITECTURE.md | 613 + API-DOCUMENTATION-INVENTORY.md | 392 + API-DOCUMENTATION-PROTOTYPE.md | 220 + API-DOCUMENTATION-TOOLING.md | 321 + Dockerfile | 26 + docker-bake.hcl | 8 +- hack/api-docs/README.md | 96 + hack/api-docs/browser-checks.mjs | 124 + hack/api-docs/flatten-preview.mjs | 32 + hack/api-docs/go.mod | 18 + hack/api-docs/go.sum | 30 + hack/api-docs/main.go | 757 + hack/api-docs/main_test.go | 208 + hack/api-docs/migrate.mjs | 551 + hack/api-docs/model.go | 295 + hack/api-docs/package-lock.json | 447 + hack/api-docs/package.json | 9 + hack/api-docs/pagefind.Dockerfile | 7 + hack/api-docs/report.mjs | 178 + hack/api-docs/run.sh | 79 + hack/api-docs/testdata/duplicate-key.yaml | 102 + hack/api-docs/testdata/invalid-example.yaml | 101 + hack/api-docs/testdata/invalid-info.yaml | 100 + hack/api-docs/testdata/invalid-item-type.yaml | 101 + .../api-docs/testdata/invalid-stream-ref.yaml | 101 + .../api-docs/testdata/profile-missing-id.yaml | 100 + hack/api-docs/testdata/schemas/event.yaml | 9 + hack/api-docs/testdata/valid.yaml | 101 + hack/api-docs/vacuum.yaml | 24 + hack/api-docs/verify-output.mjs | 127 + layouts/_partials/content-default.html | 3 + prototypes/api-docs/.gitattributes | 5 + prototypes/api-docs/DESIGN.md | 56 + prototypes/api-docs/catalog.json | 82 + prototypes/api-docs/converted/dvp.yaml | 709 + .../api-docs/converted/engine-1.55.yaml | 15399 +++++ .../api-docs/converted/engine-1.56.yaml | 15424 +++++ prototypes/api-docs/converted/governance.yaml | 1004 + prototypes/api-docs/converted/hub.yaml | 4515 ++ prototypes/api-docs/converted/registry.yaml | 1295 + prototypes/api-docs/dialects/lock.json | 20 + prototypes/api-docs/dialects/oas-dialect.json | 25 + .../api-docs/dialects/oas-document.json | 1666 + .../api-docs/dialects/oas-vocabulary.json | 87 + prototypes/api-docs/evidence/browser.json | 40 + prototypes/api-docs/evidence/catalog.png | Bin 0 -> 79269 bytes prototypes/api-docs/evidence/coverage.json | 1715 + .../api-docs/evidence/operation-dark.png | Bin 0 -> 135838 bytes .../api-docs/evidence/operation-mobile.png | Bin 0 -> 50026 bytes prototypes/api-docs/evidence/operation.png | Bin 0 -> 135466 bytes prototypes/api-docs/evidence/output.json | 5 + .../api-docs/evidence/presentation.json | 22 + prototypes/api-docs/evidence/schema.png | Bin 0 -> 150274 bytes .../api-docs/evidence/validation-status.json | 10 + prototypes/api-docs/exceptions.json | 4912 ++ prototypes/api-docs/hugo.yaml | 31 + prototypes/api-docs/migrations/dvp.json | 389 + prototypes/api-docs/migrations/dvp.patch | 692 + .../migrations/engine-1.55.intermediate.json | 18830 ++++++ .../api-docs/migrations/engine-1.55.json | 52560 +++++++++++++++ .../api-docs/migrations/engine-1.55.patch | 27641 ++++++++ .../migrations/engine-1.56.intermediate.json | 18836 ++++++ .../api-docs/migrations/engine-1.56.json | 52588 ++++++++++++++++ .../api-docs/migrations/engine-1.56.patch | 27688 ++++++++ .../api-docs/migrations/governance.json | 103 + .../api-docs/migrations/governance.patch | 929 + prototypes/api-docs/migrations/hub.json | 2950 + prototypes/api-docs/migrations/hub.patch | 2056 + prototypes/api-docs/migrations/registry.json | 247 + prototypes/api-docs/migrations/registry.patch | 606 + prototypes/api-docs/operation-ids.json | 42 + prototypes/api-docs/original/dvp.yaml | 696 + prototypes/api-docs/original/engine-1.55.yaml | 14038 +++++ prototypes/api-docs/original/engine-1.56.yaml | 14062 +++++ prototypes/api-docs/original/governance.yaml | 972 + prototypes/api-docs/original/hub.yaml | 4464 ++ prototypes/api-docs/original/registry.yaml | 1353 + .../assets/api-prototype/prototype.css | 595 + .../content/api-prototype/_content.gotmpl | 12 + .../_partials/api-prototype/description.html | 13 + .../_partials/api-prototype/manual-link.html | 15 + .../_partials/api-prototype/navigation.html | 29 + .../layouts/_partials/api-prototype/path.html | 4 + .../_partials/api-prototype/schema.html | 85 + .../preview/layouts/api-prototype.html | 359 + .../preview/layouts/api-prototype.markdown.md | 150 + .../preview/static/api-prototype/prototype.js | 49 + prototypes/api-docs/source-lock.json | 100 + 88 files changed, 295454 insertions(+), 1 deletion(-) create mode 100644 API-DOCUMENTATION-ARCHITECTURE.md create mode 100644 API-DOCUMENTATION-INVENTORY.md create mode 100644 API-DOCUMENTATION-PROTOTYPE.md create mode 100644 API-DOCUMENTATION-TOOLING.md create mode 100644 hack/api-docs/README.md create mode 100644 hack/api-docs/browser-checks.mjs create mode 100644 hack/api-docs/flatten-preview.mjs create mode 100644 hack/api-docs/go.mod create mode 100644 hack/api-docs/go.sum create mode 100644 hack/api-docs/main.go create mode 100644 hack/api-docs/main_test.go create mode 100644 hack/api-docs/migrate.mjs create mode 100644 hack/api-docs/model.go create mode 100644 hack/api-docs/package-lock.json create mode 100644 hack/api-docs/package.json create mode 100644 hack/api-docs/pagefind.Dockerfile create mode 100644 hack/api-docs/report.mjs create mode 100755 hack/api-docs/run.sh create mode 100644 hack/api-docs/testdata/duplicate-key.yaml create mode 100644 hack/api-docs/testdata/invalid-example.yaml create mode 100644 hack/api-docs/testdata/invalid-info.yaml create mode 100644 hack/api-docs/testdata/invalid-item-type.yaml create mode 100644 hack/api-docs/testdata/invalid-stream-ref.yaml create mode 100644 hack/api-docs/testdata/profile-missing-id.yaml create mode 100644 hack/api-docs/testdata/schemas/event.yaml create mode 100644 hack/api-docs/testdata/valid.yaml create mode 100644 hack/api-docs/vacuum.yaml create mode 100644 hack/api-docs/verify-output.mjs create mode 100644 prototypes/api-docs/.gitattributes create mode 100644 prototypes/api-docs/DESIGN.md create mode 100644 prototypes/api-docs/catalog.json create mode 100644 prototypes/api-docs/converted/dvp.yaml create mode 100644 prototypes/api-docs/converted/engine-1.55.yaml create mode 100644 prototypes/api-docs/converted/engine-1.56.yaml create mode 100644 prototypes/api-docs/converted/governance.yaml create mode 100644 prototypes/api-docs/converted/hub.yaml create mode 100644 prototypes/api-docs/converted/registry.yaml create mode 100644 prototypes/api-docs/dialects/lock.json create mode 100644 prototypes/api-docs/dialects/oas-dialect.json create mode 100644 prototypes/api-docs/dialects/oas-document.json create mode 100644 prototypes/api-docs/dialects/oas-vocabulary.json create mode 100644 prototypes/api-docs/evidence/browser.json create mode 100644 prototypes/api-docs/evidence/catalog.png create mode 100644 prototypes/api-docs/evidence/coverage.json create mode 100644 prototypes/api-docs/evidence/operation-dark.png create mode 100644 prototypes/api-docs/evidence/operation-mobile.png create mode 100644 prototypes/api-docs/evidence/operation.png create mode 100644 prototypes/api-docs/evidence/output.json create mode 100644 prototypes/api-docs/evidence/presentation.json create mode 100644 prototypes/api-docs/evidence/schema.png create mode 100644 prototypes/api-docs/evidence/validation-status.json create mode 100644 prototypes/api-docs/exceptions.json create mode 100644 prototypes/api-docs/hugo.yaml create mode 100644 prototypes/api-docs/migrations/dvp.json create mode 100644 prototypes/api-docs/migrations/dvp.patch create mode 100644 prototypes/api-docs/migrations/engine-1.55.intermediate.json create mode 100644 prototypes/api-docs/migrations/engine-1.55.json create mode 100644 prototypes/api-docs/migrations/engine-1.55.patch create mode 100644 prototypes/api-docs/migrations/engine-1.56.intermediate.json create mode 100644 prototypes/api-docs/migrations/engine-1.56.json create mode 100644 prototypes/api-docs/migrations/engine-1.56.patch create mode 100644 prototypes/api-docs/migrations/governance.json create mode 100644 prototypes/api-docs/migrations/governance.patch create mode 100644 prototypes/api-docs/migrations/hub.json create mode 100644 prototypes/api-docs/migrations/hub.patch create mode 100644 prototypes/api-docs/migrations/registry.json create mode 100644 prototypes/api-docs/migrations/registry.patch create mode 100644 prototypes/api-docs/operation-ids.json create mode 100644 prototypes/api-docs/original/dvp.yaml create mode 100644 prototypes/api-docs/original/engine-1.55.yaml create mode 100644 prototypes/api-docs/original/engine-1.56.yaml create mode 100644 prototypes/api-docs/original/governance.yaml create mode 100644 prototypes/api-docs/original/hub.yaml create mode 100644 prototypes/api-docs/original/registry.yaml create mode 100644 prototypes/api-docs/preview/assets/api-prototype/prototype.css create mode 100644 prototypes/api-docs/preview/content/api-prototype/_content.gotmpl create mode 100644 prototypes/api-docs/preview/layouts/_partials/api-prototype/description.html create mode 100644 prototypes/api-docs/preview/layouts/_partials/api-prototype/manual-link.html create mode 100644 prototypes/api-docs/preview/layouts/_partials/api-prototype/navigation.html create mode 100644 prototypes/api-docs/preview/layouts/_partials/api-prototype/path.html create mode 100644 prototypes/api-docs/preview/layouts/_partials/api-prototype/schema.html create mode 100644 prototypes/api-docs/preview/layouts/api-prototype.html create mode 100644 prototypes/api-docs/preview/layouts/api-prototype.markdown.md create mode 100644 prototypes/api-docs/preview/static/api-prototype/prototype.js create mode 100644 prototypes/api-docs/source-lock.json diff --git a/API-DOCUMENTATION-ARCHITECTURE.md b/API-DOCUMENTATION-ARCHITECTURE.md new file mode 100644 index 000000000000..8ee20ad720a0 --- /dev/null +++ b/API-DOCUMENTATION-ARCHITECTURE.md @@ -0,0 +1,613 @@ +# Unified API documentation architecture + +This proposal defines a tailored presentation system and an enforceable source +contract for Docker's HTTP API documentation. It builds on the +[repository inventory](API-DOCUMENTATION-INVENTORY.md), with additional +research into OpenAPI, Hugo, and the migration of the Engine specification. +The [tooling review](API-DOCUMENTATION-TOOLING.md) records the broader component +evaluation behind the revised pipeline recommendation. +The [prototype findings](API-DOCUMENTATION-PROTOTYPE.md) record the implemented +dry-run, source migration ledgers, verified capabilities, and remaining work. + +Status: draft recommendation, September 7, 2026. Repository evidence is based +on commit `371255294cf8db2ee20206bf5cc9c165a3a1ea16`. Experiments used temporary +directories and did not modify product specifications or site implementation. +No authenticated API behavior was tested. + +## Conclusions + +| Decision | Recommendation | +| --- | --- | +| Presentation | Build a tailored reference system within the Docker docs experience. Use Hugo for page creation, templates, and publication, with a separate API preprocessing step. | +| Source contract | Require OpenAPI 3.2.0 and a versioned Docker documentation profile for APIs entering the unified system. Validate the locked source package used for publication. A single-file bundle is an optional, separately checked derivative. | +| Semantic processing | Resolve specification behavior before rendering. HTML, Markdown, navigation, and request examples must consume the same prepared reference data. | +| Ownership | Make source conformance part of product maintenance. Engine's migration includes its upstream code-generation pipeline. Historical conversion is an explicit exception with an owner and fidelity checks. | +| Delivery | Publish complete static HTML, substantive Markdown, searchable operation content, stable links, and downloadable specifications. Add focused browser interactions where they improve reading. | + +The shared format is necessary, but it does not make the APIs behave alike. +Uniform source requirements should enforce accurate descriptions of each +API's authentication, transport, errors, and data formats. They should not +require a product to change its protocol to accommodate the templates. + +There is enough information to design the system. Before onboarding an API, +its owner must confirm the contract, resolve material contradictions, and +accept responsibility for keeping the source compliant. These are adoption +gates, rather than reasons to postpone the architecture work. + +## Constraints supplied by the user + +- Build a tailored system. Comparing off-the-shelf renderers with custom + rendering is outside the requested research. +- Provide a shared API catalog and direct navigation between product manuals + and API references, leading to the same canonical reference. +- Coordinate with the separate site information architecture effort. This + proposal does not select final URLs or execute navigation restructuring. +- Focus on HTTP APIs. Detailed SDK and GraphQL documentation remain follow-up + work. + +Reusing a validation tool or specification-processing library is compatible with +this direction. Selecting that infrastructure does not commit the site to +the vendor's reference UI. + +## Findings that determine the design + +### Hugo is suitable for presentation + +The [repository Dockerfile][repo-dockerfile] pins Hugo 0.163.0. Hugo's +[content adapters][hugo-adapters] can create ordinary pages and resources +from data. Its [output formats][hugo-outputs] support separate HTML and +Markdown templates for the same page. The repository already enables those +outputs for pages and sections. + +Generated API pages can therefore participate in the existing page +collections, sidebar, metadata, sitemap, and Markdown discovery. Content +adapters run before the complete page collection exists; their inputs should +come from the API build artifacts, rather than from a scan of `site.Pages`. + +Hugo's [OpenAPI parser implementation][hugo-parser] uses +[`kin-openapi` v0.139.0][hugo-modules]. It loads typed objects and resolves +references, but does not invoke specification validation. Tests against +Hugo 0.163.0 produced the following results: + +| Isolated fixture | Observed result | +| --- | --- | +| OpenAPI 3.1.2 schema with `type: [string, "null"]`, `const`, and `examples` | Parsed and retained these fields. | +| Schema `$ref` with sibling description and `required` | Resolved value retained the siblings, but serializing the reference object through `jsonify` omitted them. | +| Valid OpenAPI 3.1 response with `schema: true` | Parsing failed. | +| OpenAPI 3.2 `query` operation | Parsing succeeded, but the typed operation collection reported zero operations. | +| Specification missing required `info.version` | Parsing succeeded. | + +These results establish incomplete support for the proposed contract in +Hugo's pinned parser. The tooling review also tested `kin-openapi` 0.149.0: +it recognizes `QUERY` and boolean schemas, but rejects valid 3.2 tag metadata +and loses a reference-sibling description when serializing a schema reference. +Parser capability must be assessed against a specific version and function. + +Use Hugo's general data facilities for prepared reference data. Do not make +`openapi3.Unmarshal` the sole validation or semantic processing boundary. + +### OpenAPI 3.2 fits the API portfolio + +[OpenAPI 3.2.0][oas32] and [3.1.2][oas31] were published on September 19, +2025. Version 3.2 includes [streaming media support][oas-streams] through +`itemSchema`, including server-sent events. It also adds tag hierarchy and +display metadata, named servers, and support for additional HTTP methods. +The [release notes][oas32-release] describe these additions. + +The streaming additions are relevant to Model Runner and Docker Agent. +Engine also needs explicit stream documentation, although its multiplexed +and upgraded connections cannot be fully described by an item schema. + +An isolated test with [Redocly CLI][redocly] 2.51.2 successfully validated and +bundled an OpenAPI 3.2 document containing an external `itemSchema` reference, +a type union accepting `null`, and tag `summary`/`kind`. Bundling preserved +the streaming field and resolved the external reference into components. +The broader [component review](API-DOCUMENTATION-TOOLING.md) subsequently found +that its structural linter rejects valid boolean Schema Objects. The earlier +probe supports a narrow bundling role, not selection as the source validation +gate. OpenAPI 3.2 support requires separate checks of parsing, structure, +schema compilation, examples, and transformation fidelity. + +The proposed source header is: + +```yaml +openapi: 3.2.0 +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +``` + +The `3.1` segment in that dialect URI is intentional: OpenAPI 3.2 retains +that [default schema dialect][oas-schema], based on JSON Schema 2020-12. +The Docker profile should require this dialect and disallow overrides until +the system explicitly supports them. OAI also publishes 3.2 dialect resources; +the pipeline must register the selected dialect explicitly, rather than +substituting a library default. Exact dialect/annotation integration remains +a required implementation test. Later patch-version adoption should be a +coordinated tooling/profile update. + +### Format conversion needs semantic review + +The [Engine source][engine-spec] is also an input to production Go type +generation. Its upstream [generation script][engine-generation] invokes +`swagger generate model` with custom templates. Migrating the authoritative +format therefore affects more than the documentation build. + +An isolated conversion of Engine v1.56 with `swagger2openapi` 7.0.8 exited +successfully and preserved 98 paths, 108 operations, and 160 named schemas. +Nevertheless: + +- The default conversion removed 13 `x-nullable` declarations beside `$ref` + nodes, their associated descriptions, and two `x-omitempty` declarations. +- The archive download's successful response had no `content`, while its + error schema was associated with `application/x-tar`. +- Attach error responses inherited stream media types, while the introductory + error contract describes JSON errors. +- Setting `--targetVersion 3.1.0` changed the version declaration without + converting the remaining OpenAPI 3.0 `nullable` semantics. + +The `--refSiblings allOf` option preserved the affected reference siblings, +but left the declarations about `null` as extensions. That does not complete +a modern schema migration. Some output defects also expose limitations or +ambiguities in the source rather than converter failures. + +The [converter's documentation][swagger-converter] targets OpenAPI 3.0.x. +Its version flag is not evidence of semantic conversion to 3.1 or 3.2. This +experiment is evidence about migration risk, not a production dependency +selection. + +### Source conformance has measurable gaps + +Additional parsing of the five reference specifications found: + +| Source | Relevant conformance work | +| --- | --- | +| Hub | 40 of 54 operations lack `operationId`. The spec contains 31 `nullable` keys and a broken `team_repo` reference. Descriptions include renderer-specific authentication badges. | +| Engine | Operations use `Distribution` and `Session` tags that are not declared at the root. The source contains six `collectionFormat` keys and 224 `x-nullable` declarations, alongside Go generation extensions. | +| DVP | Two path-level server overrides must be retained. Authentication is duplicated from Hub; the security scheme uses invalid `type: https`, and `security` is placed on path items. | +| Registry | `info.version` and machine-readable security requirements are absent. Eleven operations carry `x-codeSamples`. | +| Governance | The source is OpenAPI 3.1 and passes the structural check recorded in the inventory, but its token request prose contradicts Hub's request schema. | + +These counts describe the source files, not server behavior. In particular, +Engine's `x-nullable` and omission extensions interact with Go code +generation. Their presence is not sufficient evidence that an API property +accepts JSON `null`; requiredness, omission, pointer representation, and zero +values must be reviewed separately. [Go-swagger's schema documentation][go-swagger-schemas] +explains these interactions. + +## Presentation architecture + +```mermaid +flowchart TD + S[Product-owned OpenAPI 3.2 source] --> V[Validation and Docker source profile] + L[Historical specification] -. Reviewed migration exception .-> V + V --> P[Validated locked source package] + P --> C[Go API compiler] + M[Product and connection metadata] --> C + C --> R[Reference data and schema graph] + R --> H[Hugo adapters and shared templates] + G[Authored API guidance] --> H + H --> O[HTML, Markdown, navigation, and search] + P --> D[Source tree and archive download] + P -. Optional checked transformation .-> B[Single-file bundle download] +``` + +The historical path includes an explicit conversion step before the source +profile gate. The renderer receives one contract and does not contain +Swagger-versus-OpenAPI branches. + +### Prepare reference data before templating + +Implement a build step that consumes the validated source package and API metadata. +Its output should be a versioned JSON model with the information required +for presentation, plus the original schema graph and source pointers. Use +typed operation views for navigation and effective settings, while retaining +raw Schema Objects, resource identities, and reference edges as authority. +Do not reconstruct the contract through a convenience model's serialization method. + +The preparation step must compute: + +- Operations, stable identifiers, navigation groups, source locations, and + version availability +- Effective servers and security, including inheritance and explicit + overrides +- Effective parameters, resolving path/operation overrides by name and + location, with their serialization rules +- Request and response variants, headers, media types, examples, and schema + references +- Links among operations, schemas, guides, and published versions, with + diagnostics for missing targets or unsupported constructs + +Preserve the schema graph instead of expanding every reference recursively. +Schema alternatives, cycles, and `$ref` siblings must retain their meaning. +The model is a presentation index over the contract, not a replacement +schema language. Changes to its shape require a model-version update and +compatible templates. + +### Give every operation a consistent anatomy + +| Part of the reference | Presentation requirement | +| --- | --- | +| Context | API/product identity, selected API version, release/support context, and connections to the product manuals | +| Operation | Purpose, method, path, stable link, deprecation status, and related workflow guidance | +| Connection and access | Effective server or connection profile, applicable authentication flow, and API-specific permission requirements | +| Request | Parameters by location, requiredness, constraints, serialization, selectable body media types, and examples | +| Responses | All documented status codes, response headers, media types, schemas, body absence, and streaming/protocol notes | +| Schema exploration | Linked named schemas, nested fields, alternatives, constraints, and request/response context | + +Make operations individually addressable in the data model. A version +overview, operation view, and schema view should be reusable presentation +units. Final page grouping and URL placement should be settled with the IA +effort, without coupling the compiler to a particular sidebar arrangement. + +Readers should be able to select a version, filter operations within it, +follow schema references, switch media types and examples, and copy a request. +These controls must support keyboard navigation and expose their selected +state. Use progressive enhancement so substantive reference content remains +available in static HTML and Markdown. + +Preserve `allOf` as intersecting constraints and `oneOf` as exactly one +matching alternative. Show whether a property must be present separately +from whether its value can be `null`. Do not present an example, a default, +or a discriminator hint as an additional validation rule. + +### Make request examples dependable + +Generate common HTTP examples from effective operation data. Use reviewed +authored examples for protocol sequences and cases that exceed the initial +generator's capabilities. Examples must preserve parameter serialization, +shell quoting, required fields, meaningful `false`/`0`/empty values, and the +chosen connection profile. + +This is a concrete reason to move logic out of the existing templates. +The [cURL helper][repo-curl] uses the first root server, adds bearer +authentication when any bearer scheme is declared, and emits a +single-quoted header containing literal `$TOKEN`. Those choices do not +follow operation-level server/security behavior or produce the intended +shell expansion. Separate HTML and Markdown generators must not make their +own competing decisions about these details. + +For Engine, connection metadata supplies socket or configured remote +examples. `X-Registry-Auth` remains registry delegation credentials and +does not become daemon authentication. For Hub, the token exchange is a +documented flow. For Registry, the challenge and token service are a +different flow. A shared authentication component should display those +facts accurately. + +An embedded request console is optional follow-up work. It is not a +requirement for reading the reference or using its examples. + +### Reuse Hugo publication facilities + +Use content adapters to create pages/resources from the prepared model. +Use shared templates for operation and schema views, with separate HTML +and Markdown output templates backed by the same input. Authored guides +can remain ordinary Markdown with references to stable API/operation IDs. + +The presentation must integrate with existing discovery mechanisms: + +- [Metadata output][repo-metadata] needs titles, descriptions, keywords, + product identity, and version context for generated pages. +- [Markdown discovery][repo-llms] needs usable Markdown URLs. A link to a + specification is not equivalent to the operation's reference text. +- [Pagefind config][repo-pagefind] excludes all HTML tables. API parameter + and schema names need an explicit indexing strategy, or they will vanish + from search when presented in tables. +- The [sidebar][repo-sidebar] needs the intended version and product context, + while retaining existing hidden-page behavior. +- Existing ReDoc page URLs, specification downloads, and fragment links + need a migration map. Server redirects cannot inspect URL fragments; + preserving fragment links requires compatible anchors or a client-side + mapping on the old destination page. + +Test operation search using a path, method, parameter name, schema property, +and response code. Check whether results identify the API version. Determine +default historical-version visibility with the IA effort; keep versioned +references stable even when the default version changes. + +## Source requirements + +The following is the proposed Docker documentation profile, version 1. +These requirements are additional policy where OpenAPI permits more choice. +They are not claims that every otherwise-valid OpenAPI document must follow +the same conventions. + +Apply the rules to each product's maintained source in CI. A source can +consist of multiple files. Repeat the checks on the exact locked source +package that the docs system receives. Check any converted or bundled +derivative separately; successful transformation does not waive source +requirements or establish preserved semantics. + +| ID | Required contract | Enforcement | +| --- | --- | --- | +| S1 | OpenAPI 3.2.0 and the specified OAS schema dialect. No Swagger fields or legacy `nullable` keywords standing in for JSON Schema semantics. | Format/dialect validation and custom rules scoped to specification/schema keywords, without banning properties merely named `nullable` in an application model. | +| S2 | Nonempty `info.title`, `info.description`, and `info.version`; a declared owner in authored metadata; immutable source revision and digest stamped into publication metadata by the build. | Source profile plus metadata schema and build provenance. Keep API contract version, OAS version, and product release distinct. | +| S3 | No duplicate mapping keys, unresolved references, or unpinned remote dependencies. Package the entry specification and dependencies with their resource identities and reference semantics intact. | Strict parsing, dependency lock/digests, and offline reference resolution. Allow multi-file authoring. Validate the downloadable layout and any optional transformation separately. | +| S4 | Every operation has a stable, unique `operationId`, summary, and useful description. | Profile checks and comparison with the prior version. Uniqueness is within an API version; the same operation retains its ID across versions. Preserve existing IDs instead of renaming them for cosmetic consistency. | +| S5 | All operation tags are declared, with descriptive navigation metadata. Each operation has exactly one primary navigation group; additional labels are allowed. | Profile uses OAS 3.2 tag metadata, including `kind: nav`, to identify navigation tags. Group names and display text are separate. | +| S6 | Every operation has an accurate effective server or a declared local connection profile. Server variables and overrides are documented. | Resolve root/path/operation server precedence, validate variables, and check connection metadata. Never turn a placeholder or relative Engine server into a claim that Docker hosts the API. | +| S7 | An explicit root security policy or complete operation policies, declared schemes, and intentional unauthenticated exceptions. Credential acquisition and authorization requirements are documented. | Resolve root/operation inheritance and check scheme references. Path-level `security` is invalid. Confirm product-specific flows with the owner. | +| S8 | Parameters specify location, requiredness, a `schema` or `content` definition, descriptions, constraints, and applicable serialization. Required path parameters match the path template. | Structural/profile validation, example checks, and serialization fixtures. Preserve content-based parameters, including JSON-encoded values and admitted `querystring` parameters. Operation parameters override path parameters with the same name and location. | +| S9 | Schemas accurately express presence, `null`, types, composition, constraints, and request/response annotations. | Dialect-aware validation and feature-coverage checks. Do not replace difficult constraints with unconstrained objects or erase alternatives. | +| S10 | Document actual responses, status codes, important headers, body absence, and all supported media types for the operation. | Profile completeness checks plus owner review. A success body, a JSON error, and an archive must not inherit an inaccurate common format. | +| S11 | Supply meaningful request and response examples for supported variants. Binary bodies can use a fixture or documented transfer example rather than inline JSON. | Validate examples in their request/response and media context. Explicitly track exceptions; do not fabricate responses merely to satisfy an example rule. | +| S12 | Descriptions use portable CommonMark. No HTML/CSS badges, Hugo shortcodes, embedded renderer components, or layout-dependent links. | Markdown/profile checks and link validation. Product setup and multi-operation workflows belong in authored guides. | +| S13 | Preserve deprecation status, replacement guidance, compatibility limits, and the relation to supported product releases. | Source/profile checks, version comparison, and a version manifest. Do not change historical contract behavior while updating presentation. | +| S14 | Every meaningful specification feature has an implemented presentation or an explicit capability error. Extensions have a documented purpose and handling policy. | Feature inventory and compiler diagnostics. Preserve declared generation extensions that the presentation does not use; do not silently ignore unsupported standard semantics. | + +### Authentication must retain its actual semantics + +Use standard security schemes where they describe the product correctly. +For example, `mutualTLS` is available for certificate-based authentication. +Unix socket permissions and SSH transport still require connection guidance. +Do not describe Hub's custom token exchange as OAuth merely to reuse OAuth UI. + +The [Security Requirement Object][oas-security] defines alternatives as OR +across array entries and combined requirements as AND inside one entry. +`security: []` removes inherited requirements. An empty requirement object +can permit anonymous access as one alternative. A declaration of a bearer +scheme alone establishes neither its applicability nor how to acquire a token. + +The profile must preserve those distinctions. It must also distinguish +authentication from permissions, entitlements, and resource visibility. +An operation without HTTP authentication is not necessarily publicly +reachable: a local socket can impose a separate access boundary. + +Share approved token-flow documentation and component definitions through +pinned source dependencies where appropriate. Keep each API's accepted +credentials and authorization constraints explicit. Resolve the inventory's +Hub, Governance, DVP, and OAT contradictions before presenting one shared +flow as authoritative. + +### Define supported schema capabilities + +A common dialect still has a large vocabulary. The first implementation +should support the following presentation levels: + +| Level | Features | Required behavior | +| --- | --- | --- | +| Structured exploration | Scalars, arrays, objects, boolean schemas, required properties, type unions, enums, constants, defaults, examples, references, cycles, composition, discriminators, additional properties, and read/write annotations | Render meaningful schema views with links, alternatives, and constraints. Preserve request/response context. | +| Explicit constraint view | Less-common assertions such as `not`, conditional schemas, dependent requirements, pattern properties, tuple items, and unevaluated properties | Validate with the same dialect, preserve the assertion, and display a labeled constraint block with explanatory links. This is a supported presentation, not silent omission. | +| Capability addition required | Custom dialects/vocabularies, unsupported reference behavior, or features without a faithful presentation | Block onboarding with the exact source location and missing capability. Add support before publishing that contract; do not ask the owner to weaken it. | + +Tests must cover `$ref` siblings, cycles, scope/base-URI behavior, and any +dynamic reference features admitted by the profile. Reference resolution +must not be implemented as an unqualified dictionary lookup or unlimited +tree expansion. + +For example validation, choose an explicit policy for `format`, content +annotations, and read/write annotations. Use the JSON Schema 2020-12 +implementation of the selected validation tool. Disable coercion, default +insertion, and removal of properties so validation does not alter the +example to make it pass. A schema-valid example is still not proof of actual +server behavior. + +### Represent streams and binary data accurately + +Require the actual media type and explain whether the body is a single +document, sequential values, an event stream, an archive, or another binary +format. Use OpenAPI 3.2 `itemSchema` where its sequential-media semantics +apply. Describe framing, termination, errors after the stream starts, and +reconnection where supported. + +Engine's HTTP upgrade and TTY-dependent multiplexing need protocol guidance +in addition to the HTTP handshake. A `101` response does not describe the +subsequent bidirectional conversation. Do not relabel every Engine stream +as server-sent events. + +Binary bodies need accurate content metadata even when they have no JSON +schema. The profile must accept that distinction. It must not equate an +absent schema with an absent response body. + +### Keep companion metadata small + +Maintain a schema-validated API manifest alongside the specification. It +should identify the API/product, owner, source repository/path, +specification entry file, supported versions, lifecycle, connection +profiles, and linked authored guidance. Store the Docker profile version +and any migration exception there as well. The build/import step stamps the +exact source revision, dependency digests, and source-package digest into +publication metadata. Include a bundle digest if that derivative is produced; +the authored source does not need to contain its own commit hash. + +The manifest supplies facts that OAS does not adequately express, such as +socket setup and the relationship between API versions and Engine releases. +Do not duplicate operation signatures, response schemas, or security +requirements in it. OAS remains authoritative for those facts. + +Use standard OAS 3.2 tag display/hierarchy fields in place of renderer-specific +grouping markup. Preserve needed upstream Go generation extensions as +metadata the presentation does not use. Any specification extension that affects +presentation must have a schema, an owner, and defined behavior in both +HTML and Markdown. + +## Implementation and verification + +### Recommended build components + +Use a Go preprocessing tool before Hugo. The [repository build][repo-dockerfile] +already has a Go environment for Hugo. The [tooling review](API-DOCUMENTATION-TOOLING.md) +compares the examined releases and documents the tests supporting this choice. + +| Role | Recommended component | +| --- | --- | +| Source parsing and indexing | `libopenapi` for source nodes, references, typed operation views, and source locations | +| Structural and Docker policy checks | `vacuum` with an explicit, versioned Docker ruleset and required rule severities | +| Schema and example validation | `santhosh-tekuri/jsonschema/v6`, explicitly compiling every admitted schema position and evaluating examples under the selected dialect and media policy | +| Reference preparation | Docker-owned Go code over the source graph, producing the shared presentation model | +| Change review | `oasdiff` full reports plus Docker checks for effective authentication, coverage, and stable identities | +| Publication | Hugo content adapters, shared templates, and focused browser interactions | + +Share loaded resources across the preprocessing stages. Preserve original +schema nodes: tested Go serialization/bundling paths changed `schema: false` +into `{}`. Publish the validated source package as the canonical contract; +an optional single-file derivative must pass its own fidelity checks. +`@redocly/cli` bundling remains a candidate for that limited role. + +Document validation does not replace explicit schema compilation. The tests +found malformed streaming schemas that otherwise passed validation. Compile +every schema even when it has no example, then evaluate examples without +changing their values. Register the exact dialect and locked resources. + +Do not adopt an unrelated API design style wholesale: requirements for a +particular error envelope, path convention, or authentication mechanism could +describe an existing API inaccurately. Contract comparison also needs Docker +policy: the tested `oasdiff` report classified adding bearer authentication to +an unauthenticated operation as informational. + +Pin compatible library, rule, and runtime versions together. Acquire source +revisions and dependencies in a controlled step so docs processing uses local, +locked inputs. Validate the assembled pipeline with the source-profile fixtures +before production adoption. The opt-in prototype implements these dependencies +in a separate module; the production publication pipeline remains unchanged. + +### Enforce gates at both repositories + +| Gate | Checks | Responsible owner | +| --- | --- | --- | +| Source validity | Strict parse, OAS/dialect validity, references, identity, and Docker source rules | API source repository | +| Contract fidelity | Authentication, actual media/status behavior, schema examples, compatibility, and available implementation tests | Product owner, with docs review | +| Publication input | Locked source package, provenance, reference resolution, supported feature set, and approved migration exceptions; fidelity of optional derivatives | Docs import pipeline | +| Prepared reference | Operation coverage, effective settings, parameter overrides, complete response/media variants, schema graph, and links | API compiler | +| Reader experience | HTML/Markdown parity, search, keyboard use, version context, examples, stable links, and performance | Docs presentation system | + +If the source changes, source CI should run the profile. The docs import +should run it again against the exact pinned artifact. Publish a diagnostic +with the API, revision, source file/pointer, rule ID, and suggested resolution. +An import that fails the gate should retain the prior published reference +until resolved. It must not publish partial output as the updated contract. + +Keep a regression corpus containing real operations and focused fixtures. +At minimum, cover all admitted HTTP methods, false/zero examples, parameter +encoding, security alternatives, server overrides, schema composition, +reference cycles, binary bodies, streams, and operation links. Compare +source and output coverage by method/path/ID, status, header, media type, +and schema reference. Counts alone are inadequate, as the Engine conversion +experiment demonstrated. + +### Repository integration points + +| Area | Proposed work | +| --- | --- | +| API build tooling | Add a versioned source profile, manifest schema, preprocessing tool, and fixtures. Names and locations can follow repository implementation conventions. | +| `Dockerfile` and `docker-bake.hcl` | Add preprocessing and scoped validation stages before Hugo; pin the required build tools. | +| `hugo.yaml` and content adapters | Mount prepared data/resources and create generated pages without colliding with authored pages. Retain HTML and Markdown outputs. | +| `layouts/api-reference.html`, its Markdown template, and `layouts/_partials/api-ref/` | Rework the existing presentation components to consume prepared data; replace raw-spec interpretation and request generation. | +| `layouts/baseof.html` and sidebar/metadata templates | Integrate product/version context and generated pages into the shared experience. Coordinate final navigation with IA work. | +| `pagefind.yml` and Markdown processing | Ensure operation, parameter, schema, and response content remains searchable and present in Markdown. Verify generated links through the existing flattening step. | +| `layouts/api.html` and existing reference wrappers | Migrate references after their source passes the profile; preserve downloads and map legacy fragment links. | + +Existing site layout and styling are useful starting material. Their raw-spec +traversal is not the contract implementation to preserve. + +## Source migration and adoption + +### Keep authoring and historical imports distinct + +For a maintained API, the target is a product-owned OpenAPI 3.2 source that +passes the Docker profile. Establish the requirement in that repository's +CI. The docs pipeline consumes an immutable revision and produces a +traceable source package. A permanent hand-edited docs copy would recreate the +contradictions the revamp is meant to resolve. + +For a historical release that cannot change its authoring format, allow a +declared conversion exception with an owner, source digest, pinned converter +and patches, semantic comparison, and recorded review. Preserve the +original downloadable source and clearly identify a converted artifact. +Keep the API version unchanged unless the product contract changes. + +Every exception needs a reason and review policy. Set an expiry/adoption +milestone for maintained sources; historical snapshots can have a permanent +archival exception. Both paths must produce the same profile-compliant +input before entering the renderer. Historical conversion does not mean the +original source is compliant. + +### Plan adoption by source owner + +| API | Required preparation | +| --- | --- | +| Engine | Agree the source/toolchain migration with Moby maintainers. Review nullability/omission semantics, response-specific media types, serialization, streams, and generated Go types. Include upstream generation/validation checks. Handle historical specs through audited import exceptions. | +| Hub | Assign the missing operation IDs, fix the broken reference and authentication contradictions, migrate schema semantics, replace renderer-specific markup, and establish source ownership/update responsibility. | +| DVP | Reconcile Hub authentication, correct structural defects, and retain authentication server overrides and analytics formats. | +| Registry | Supply version identity and accurate security requirements, preserve media types/headers, and review how the authored transfer examples enter the shared presentation. | +| Governance | Correct the token request description in private `docker/governor-services`, adopt the target/profile upstream, and use the existing synchronization process. Do not edit the copied YAML by hand. | +| Model Runner and Agent | Obtain or create authoritative specifications with product owners. Inspect the Agent chat runtime specification. Document compatibility differences and streaming formats before admitting them as generated references. | + +Prose-only HTTP surfaces can share the product context and authored-guidance +presentation while their specs are prepared. They should not be described +as having passed the generated-reference source contract. Metrics, plugin +protocols, webhooks, and MCP/A2A need explicit scope decisions if included; +being carried over HTTP does not make them identical reference types. + +### Suggested implementation sequence + +1. Agree the source profile and product ownership. Make the rule set and + compiler interfaces concrete, and add fixtures for the known difficult + cases. Resolve adoption constraints with Engine's maintainers early. +2. Build a complete vertical slice with Governance: compliant source, + prepared data, authored access guidance, HTML, Markdown, search, and links. + Include Engine/Registry fixtures from the beginning so this small API + does not define the system's capability limits. +3. Onboard Hub, Registry, and DVP as their source requirements pass. Verify + actual auth, media, serialization, and navigation cases in published output. +4. Complete Engine's owner-reviewed migration and versioned presentation, + using the separate archival path for historical versions as necessary. +5. Extend to the remaining HTTP references when their sources are ready, + then address the deferred SDK/GraphQL work separately. + +The order can change with product readiness. Completion for an API means +source conformance, owner-reviewed fidelity, full presentation coverage, +and preserved entry/deep links. A page that looks consistent has not met +that definition by appearance alone. + +## Evidence and research limits + +Primary research covered official OAS/Hugo documentation, pinned parser and +Engine source code, tooling documentation, and the repository's templates, +specifications, build, and discovery configuration. + +The isolated experiments are reproducible with the stated tool versions: + +- Hugo 0.163.0 fixtures: basic 3.1 schema support, reference-sibling + serialization, boolean schemas, 3.2 `query`, and missing `info.version` +- [Redocly CLI][redocly] 2.51.2: `lint` using `spec` rules and `bundle` on a 3.2 document + with an external streaming item schema, type union, and tag metadata +- `swagger2openapi` 7.0.8: Engine v1.56 conversion using `--fatal`, followed + by separate `--refSiblings allOf` and `--targetVersion 3.1.0` probes + +These experiments establish specific capabilities and failure modes, not +complete tool conformance or API behavior. Product-level fidelity still +requires implementation evidence and owner review. Private Governance source +was not fetched, and no product source or specification was modified. + +The [follow-up tooling review](API-DOCUMENTATION-TOOLING.md) adds broader +positive and negative fixtures across Go, JavaScript, Python, and comparison +tools. Its results replace the initial Redocly/TypeScript recommendation and +the requirement for a single-file publication input. Exact dialect handling, +advanced references, and full presentation coverage remain integration gates. + +The subsequent prototype adds evidence about timestamp normalization, schema +name case collisions in adapter paths, and Markdown output processing inside +fenced JSON. Its report records the corrective processing boundaries and the +limits of the assembled system. The prototype's successful draft build does +not replace source-owner approval or strict conformance checks. + +[repo-dockerfile]: Dockerfile +[repo-curl]: layouts/_partials/api-ref/curl.html +[repo-metadata]: layouts/home.metadata.json +[repo-llms]: layouts/home.llmsfull.txt +[repo-pagefind]: pagefind.yml +[repo-sidebar]: layouts/_partials/sidebar/sections.html +[engine-spec]: _vendor/github.com/moby/moby/api/docs/v1.56.yaml +[hugo-adapters]: https://gohugo.io/content-management/content-adapters/ +[hugo-outputs]: https://gohugo.io/configuration/output-formats/ +[hugo-parser]: https://github.com/gohugoio/hugo/blob/v0.163.0/tpl/openapi/openapi3/openapi3.go +[hugo-modules]: https://github.com/gohugoio/hugo/blob/v0.163.0/go.mod +[oas32]: https://spec.openapis.org/oas/v3.2.0.html +[oas31]: https://spec.openapis.org/oas/v3.1.2.html +[oas32-release]: https://github.com/OAI/OpenAPI-Specification/releases/tag/3.2.0 +[oas-streams]: https://spec.openapis.org/oas/v3.2.0.html#streaming-sequential-media-types +[oas-schema]: https://spec.openapis.org/oas/v3.2.0.html#schema-object +[oas-security]: https://spec.openapis.org/oas/v3.2.0.html#security-requirement-object +[redocly]: https://redocly.com/docs/cli +[swagger-converter]: https://github.com/Mermade/oas-kit/tree/main/packages/swagger2openapi +[engine-generation]: https://raw.githubusercontent.com/moby/moby/api/v1.56.0/api/scripts/generate-swagger-api.sh +[go-swagger-schemas]: https://raw.githubusercontent.com/go-swagger/go-swagger/master/docs/reference/models/schemas.md diff --git a/API-DOCUMENTATION-INVENTORY.md b/API-DOCUMENTATION-INVENTORY.md new file mode 100644 index 000000000000..79e8e511b0d0 --- /dev/null +++ b/API-DOCUMENTATION-INVENTORY.md @@ -0,0 +1,392 @@ +# API documentation inventory + +This document records the API documentation in the Docker docs repository and +the facts that a unified documentation experience must preserve. It provides +a baseline for discussing the revamp, with HTTP APIs first and SDK +documentation reserved for follow-up. + +Snapshot: September 7, 2026, at commit +`371255294cf8db2ee20206bf5cc9c165a3a1ea16`. + +This is a repository audit. Statements about authentication, endpoints, and +compatibility describe the checked-in documentation and specifications. +Authenticated service behavior, private upstream sources, and the deployed +site were not tested. An absent specification means none was found in this +checkout or linked from the reviewed API guide; it does not establish that +the service has no specification. + +## Most important findings + +1. Discovery is incomplete. Five HTTP API families have specifications under + Reference: Engine, Hub, Docker Verified Publisher analytics, Registry, and + AI Governance. The [Reference landing page][reference-home] lists only the + first four. Model Runner, Docker Agent's two HTTP servers, and Scout + metrics have documentation in Manuals, including content mounted from + upstream repositories. +2. Shared credentials do not imply a shared authentication procedure. Hub, + AI Governance, and DHI document an exchange for a short-lived bearer token. + Registry uses a challenge and a scoped registry token. Scout metrics + documents a PAT used directly as a bearer token. SCIM has a separate + provisioning token. Several descriptions of these flows contradict each + other; see the [issue register](#contradictions-and-open-questions). +3. Engine belongs in a unified experience, with explicit connection and + version selection. Its daemon access, local sockets, optional remote + transport, version negotiation, and streaming operations need their own + guidance. Model Runner and Docker Agent also run as user-operated + services, so this distinction applies beyond Engine. +4. There are three presentation approaches: ReDoc, the Hugo renderer used + by AI Governance, and handwritten Markdown. The specifications span + Swagger 2.0, OpenAPI 3.0, and OpenAPI 3.1. The Hugo renderer has useful + integration with the docs site, but needs broader format and operation + support before it could serve all five specifications. +5. Content ownership is part of the design problem. Engine specifications, + plugin protocols, and Docker Agent docs are imported from upstream. AI Governance is a + verbatim copy from a private repository. Hub, DVP, and Registry specs live + directly in this repository, without an upstream synchronization process + found in the reviewed scripts and workflows. + +## HTTP API inventory + +These rows identify documentation surfaces, rather than distinct backend +services. Hub and AI Governance share a host; Docker Agent exposes two +different HTTP interfaces. Related protocols appear in the next table. + +Published paths below are derived from Hugo configuration. Source links point +to files in this checkout. The `/manuals` prefix is removed from published +URLs but retained in Hugo source cross-references. + +| ID | API and purpose | Deployment and documented address | Documentation and specification | +| --- | --- | --- | --- | +| H1 | Docker Engine: containers, images, networks, volumes, plugins, and Swarm resources | User-operated `dockerd`; HTTP over a local socket or a configured remote connection. Version prefix such as `/v1.56`. | [Overview][engine-home] at `/reference/api/engine/`; [version wrapper][engine-version] at `/reference/api/engine/version/v1.56/`; [vendored Swagger spec][engine-spec]. Connection guidance is in [daemon security][daemon-security] and [remote access][daemon-remote]. | +| H2 | Docker Hub: repositories, tags, organizations, groups, invitations, tokens, audit logs, and provisioning | Hosted at `https://hub.docker.com`; paths primarily under `/v2`. | [Reference wrapper][hub-page] at `/reference/api/hub/latest/`; [OpenAPI spec][hub-spec]; [changelog][hub-changelog] and [deprecations][hub-deprecated]. SCIM is a distinct protocol within this spec. | +| H3 | Docker Verified Publisher (DVP) Data API: discovery and export of image pull analytics | Hosted at `https://hub.docker.com/api/publisher/analytics/v1`. Authentication paths override the server to `https://hub.docker.com`. | [Reference wrapper][dvp-page] at `/reference/api/dvp/latest/`; [OpenAPI spec][dvp-spec]; [analytics guide][dvp-guide], [changelog][dvp-changelog], and [deprecations][dvp-deprecated]. | +| H4 | Supported Registry API for Docker Hub: manifests and blobs | Hosted at `https://registry-1.docker.io`, with repository paths under `/v2/{name}`. | [Reference wrapper][registry-page] at `/reference/api/registry/latest/`; [OpenAPI spec][registry-spec]; [authentication protocol][registry-auth]. The spec explicitly covers a Hub-supported subset of Registry HTTP API V2, not the complete OCI Distribution Specification. | +| H5 | Docker AI Governance: organization policy and rule management | Hosted at `https://hub.docker.com/v2`; resources under `/orgs/{org_name}/governance/policies`. | [Reference page][governance-page] at `/reference/api/ai-governance/`; [OpenAPI spec][governance-spec]. The [manuals navigation entry][governance-manual] points to this reference and does not render a second API page. | +| H6 | Docker Model Runner (DMR): inference and model management | User-operated service. Host TCP examples use `http://localhost:12434`; container addresses depend on Desktop or Engine. A Desktop Unix socket route is also documented. | [Handwritten reference][dmr-api] at `/ai/model-runner/api-reference/`. Covers OpenAI, Anthropic, and Ollama compatibility, Diffusers image generation, and native model management. No DMR OpenAPI file found in the checkout. | +| H7 | Docker Agent API server: sessions, agent execution, tool confirmation, and events | User-operated `docker agent serve api`; default `127.0.0.1:8080`, routes under `/api`. The guide also documents the control interface attached to `docker agent run --listen`. | [Vendored guide][agent-api] at `/ai/docker-agent/features/api-server/`. Endpoint tables, request examples, and server-sent events. No native API specification found in the checkout or linked from this guide. | +| H8 | Docker Agent chat server: OpenAI-compatible access to agents | User-operated `docker agent serve chat`; default `127.0.0.1:8083`, `/v1/models` and `/v1/chat/completions`. | [Vendored guide][agent-chat] at `/ai/docker-agent/features/chat-server/`. The guide documents an unauthenticated `/openapi.json` endpoint on the running server. That specification is not included in this checkout and was not fetched. | +| H9 | Docker Scout metrics exporter: organization vulnerability and policy metrics | Hosted at `https://api.scout.docker.com/v1/exporter/org/{org}/metrics`. | [Metrics guide][scout-metrics] at `/scout/explore/metrics-exporter/`. Documents Prometheus and Datadog integration, metric names, labels, and authentication. HTTP metrics exposition, with no OpenAPI file found. | + +### Specification size and versions + +Counts come from parsing the five specifications, counting each HTTP method +under `paths` once. They describe documented operations, not verified service +coverage. Historical Engine versions are not counted as separate APIs. + +| API | Specification format | Declared `info.version` | Paths | Operations | +| --- | --- | --- | ---: | ---: | +| Engine v1.56 | Swagger 2.0 | `1.56` | 98 | 108 | +| Hub | OpenAPI 3.0.3 | `2-beta` | 35 | 54 | +| DVP | OpenAPI 3.0.0 | `1.0.0` | 12 | 12 | +| Registry | OpenAPI 3.0.3 | Missing | 4 | 11 | +| AI Governance | OpenAPI 3.1.0 | `1` | 4 | 8 | + +Hub's total includes nine SCIM operations. DVP's total includes two Hub +authentication operations and 10 analytics/discovery operations. The +Governance routes are in a separate specification, not duplicated in the Hub +specification at this snapshot. None of these five specs uses external +`$ref` references to share schema definitions. + +Engine has 17 local Markdown version wrappers, v1.40 through v1.56. The +imported API module also contains Swagger files for v1.25 through v1.56 and +older Markdown documents. [Hugo mounts][hugo-config] the YAML files and +changelog into the reference tree; a file in `_vendor` alone does not imply +a rendered reference page. The `/reference/api/engine/latest/` URL is an +alias on the v1.56 wrapper. [Hugo parameters][hugo-config] identify Engine +29.8.0 and API 1.56 for this snapshot. + +### Related HTTP surfaces and protocols + +| Surface | Evidence and role | Treatment for this exercise | +| --- | --- | --- | +| SCIM provisioning | Nine operations under `/v2/scim/2.0` in the [Hub spec][hub-spec], plus [provisioning setup][scim-guide]. Service metadata, schema discovery, and user operations use SCIM formats and a provisioning bearer token. | Include within H2, with a distinct protocol/authentication entry. Avoid counting it as an additional standalone spec. | +| Registry token service | [Registry authentication][registry-auth] documents `GET https://auth.docker.io/token`, a `WWW-Authenticate` challenge, and `service`/`scope` parameters. | Include as supporting authentication reference for H4. This is a different exchange from Hub's `/v2/auth/token`. | +| Engine plugin protocols | [Plugin API][plugin-api] specifies RPC-style JSON over HTTP, with `dockerd` calling plugin-provided endpoints using `POST`. [Volume][plugin-volume], [authorization][plugin-auth], and [logging][plugin-logging] pages describe protocols; the [network page][plugin-network] links to the upstream network protocol. | Include as an extension protocol family. Distinguish these daemon-to-plugin calls from the Engine API's plugin management endpoints. The specs are prose and examples, with upstream ownership in `docker/cli`. | +| Engine metrics | [Prometheus guide][engine-metrics] documents a separate metrics listener, using `127.0.0.1:9323` in the example. It warns that metric names may change. | Record alongside H9 as HTTP observability documentation, with its own format and stability expectations. | +| Hub webhooks | [Webhook guide][hub-webhooks] documents outbound HTTP POST delivery to a user-selected URL and an example JSON payload. It marks `callback_url` as unsupported. | Include as an event integration, distinct from request/response API operations. No standalone webhook schema found. | +| Docker Agent A2A | [Vendored A2A guide][agent-a2a] documents an HTTP server, agent-card discovery, JSON-RPC invocation, and configurable bearer authentication. | Record as HTTP protocol documentation adjacent to REST. A2A transport and protocol semantics need explicit treatment. | +| Docker Agent MCP over HTTP | [MCP mode guide][agent-mcp] documents `docker agent serve mcp --http`, default `127.0.0.1:8081`, and configurable `--auth-token` authentication. | Record as an HTTP protocol integration adjacent to REST. The same command also supports stdio, which is outside the HTTP inventory. | +| DHI GraphQL | [DHI API page][dhi-api] and [VEX query guide][dhi-vex] document `POST https://api.dso.docker.com/v1/graphql`, organization context, and `imagePackagesForImageCoords`. | Defer detailed GraphQL work as requested. No GraphQL schema, introspection JSON, or schema download link found in this checkout or these pages. Preserve the documented shared Hub token exchange in the authentication analysis. | + +Searches also found service hostnames in [Desktop's allowlist][desktop-allowlist] +and integration prerequisites. Hostname mentions for services such as Offload +do not establish a documented public API contract. No separate endpoint +reference or spec was found for Build Cloud, Offload, or a general Scout REST +API beyond the surfaces above. Guides that build sample REST applications, +third-party API integrations, CLI references, and OpenAPI-import tools are +not additional Docker HTTP APIs. + +The [MCP Gateway guide][mcp-gateway] also describes a user-operated Docker +protocol proxy and links to its upstream repository for complete configuration +documentation. It does not provide a standalone REST endpoint reference. + +## SDK follow-up inventory + +| SDK or library | Documentation location | Relationship to the HTTP inventory | +| --- | --- | --- | +| Engine Go and Python SDKs | [SDK overview][engine-sdk] and [examples][engine-examples]; full language references are linked externally. | Clients of H1. The SDK section also contains direct `curl` examples; preserve those in the HTTP-first work. | +| Docker Extensions SDK | [Interface reference][extensions-reference] under `/reference/api/extensions-sdk/`, plus [manuals][extensions-manual]. | TypeScript/JavaScript interfaces for Desktop, host, extension services, and Docker operations. `HttpService` is an SDK interface, not a hosted Docker REST API. | +| Compose Go SDK | [Compose SDK guide][compose-sdk] at `/compose/compose-sdk/`. | Embeds Compose operations and calls the Engine API. No separate Compose HTTP service is documented here. | +| Docker Agent Go SDK | [Vendored SDK guide][agent-sdk] at `/ai/docker-agent/guides/go-sdk/`. | Embeds the agent runtime; separate from H7 and H8's HTTP contracts. | +| Testcontainers libraries | [Testcontainers landing page][testcontainers] and language-specific guides, with external library references. | Container orchestration libraries using a Docker-compatible runtime. A follow-up should distinguish Docker-sponsored and community implementations. | + +Model Runner and Docker Agent chat also show use of third-party OpenAI SDKs. +These are client compatibility examples for H6/H8, not additional +Docker-owned SDKs. Docker Agent's stdio ACP and MCP modes are protocol +integrations outside the HTTP inventory. + +## Authentication comparison + +Personal access tokens (PATs) and organization access tokens (OATs) are +credential types. A bearer header describes how a token is sent; it does +not identify its issuer, audience, permissions, or exchange requirements. + +| Surface | Documented authentication | Boundary to preserve | +| --- | --- | --- | +| Hub | `POST /v2/auth/token` accepts `identifier` and `secret`, returning `access_token`; send that token as `Authorization: Bearer ...`. The identifier is a username for a PAT/password or an organization name for an OAT. | Token type, resource permissions, subscription, SSO, and endpoint support are separate concerns. See C2 for conflicting OAT prose. | +| AI Governance | Its spec points to the same Hub token exchange and prohibits using a PAT/OAT directly as the bearer token. | C1 records an inconsistent request field name. Its responses separately describe organization permissions, entitlement, and policy/rule limits. | +| DVP | The spec declares Hub JWT bearer authentication and duplicates `/v2/users/login` plus `/v2/users/2fa-login`. | A candidate for shared Hub guidance, but the token exchange and accepted credentials need reconciliation; see C3. Publisher access remains API-specific. | +| DHI GraphQL | The guide explicitly exchanges a PAT/OAT using Hub's `identifier` and `secret` fields. | Also requires `ctx.organization` in GraphQL variables. Shared authentication does not remove GraphQL authorization and error semantics. | +| Hub SCIM | The setup guide instructs administrators to copy a SCIM base URL and API token from Docker Home. The Hub spec declares `bearerSCIMAuth` separately. | Do not replace SCIM provisioning credentials with a generic PAT/OAT recipe. | +| Registry | Request receives a bearer challenge; acquire a token for the indicated service and repository scope, then retry. Anonymous token acquisition is documented for public pulls. | Registry tokens are scoped for registry access. The docs do not establish interchangeability with Hub API JWTs. | +| Scout metrics | Organization owner's PAT sent directly in the bearer header. The guide says no specific PAT permissions are required. | Direct PAT use is explicitly documented for this endpoint. Do not apply the Hub token exchange universally. | +| Engine | Local socket access is controlled by host permissions; remote protection includes SSH or mutual TLS. | `X-Registry-Auth` passes registry credentials to Engine for registry operations. It does not authenticate the caller to `dockerd`. | +| Model Runner | The OpenAI compatibility table says an API key is unnecessary and the `Authorization` header is ignored. | Address selection and listener configuration matter. Avoid generalizing this statement to every compatibility route without implementation verification. | +| Docker Agent | API server supports a configured `--auth-token`; chat server supports `--api-key`/`--api-key-env`. A2A also documents configured bearer authentication. | These are operator-configured credentials, not documented Hub token exchanges. The API guide says an attached `run --listen` control interface has no built-in bearer authentication. | + +Sources: the API specifications and guides linked in the inventory, plus +[daemon security][daemon-security], [SCIM provisioning][scim-guide], and +[OAT documentation][oat-guide]. Authentication shared across products should +be organized by verified flow, with API-specific permission requirements. + +## Other shared concepts and differences + +| Concept | Shared opportunity | Differences evidenced in the repository | +| --- | --- | --- | +| Resource identity | Explain organizations, namespaces, repositories, tags, and digests once where definitions match. | Hub has namespace and organization routes; DVP scopes analytics to namespaces; Governance uses organizations and policy/rule IDs; DHI adds query context. Engine's local objects have their own identifiers. | +| Versions and compatibility | Give every API a place to describe version selection, support, and changes. | Engine versions depend on daemon/client compatibility. Hosted specs use different path versions and `info.version` values. DMR and Agent advertise compatibility with other API formats. An OpenAPI version is not an API product version. | +| Pagination and response envelopes | Use consistent headings and precise parameter explanations. | Hub commonly uses `page`/`page_size` with linked pages, while SCIM uses `startIndex`/`count`. Governance's list response wraps summaries in `data` without documented pagination parameters. DVP provides period-based discovery and links to downloadable analytics files. | +| Errors, limits, and retries | Offer an API-specific account of errors and retry behavior in a consistent location. | Engine describes a JSON `message`; Governance uses `error.code` and `error.message`; DHI can return field errors alongside `data`. Hub documents request rate-limit headers separately from pull limits. Scout documents a 60-minute metrics cache, which is a freshness concern. | +| Streaming and binary data | Ensure the reference can explain more than JSON request/response pairs. | Engine includes attach/log/event streams and archive transfers. Registry transfers manifests and blobs with media types and upload state. DMR and Docker Agent stream inference or runtime events. DVP analytics downloads use CSV. | + +## Delivery and source ownership + +| Content group | How documentation is produced | Change ownership | +| --- | --- | --- | +| Engine, Hub, DVP, Registry references | [`layout: api`][redoc-layout] renders a standalone ReDoc page using a YAML URL derived from the Markdown filename. The template loads ReDoc from a CDN `latest` URL. | Templates and local wrappers belong to `docker/docs`. Hub, DVP, and Registry YAML files live here. Engine specs are mounted from `github.com/moby/moby/api`, pinned to v1.56.0 in [go.mod][go-mod]. | +| AI Governance reference | [`layout: api-reference`][native-layout] reads an adjacent YAML page resource and renders it through Hugo templates and [partials][native-resolver]. | Template changes belong here. Spec changes belong in private `docker/governor-services`, at `governor-service-api/openapi.yaml`, then are copied using [the synchronization script][governance-sync]. Do not edit the local spec by hand. | +| Handwritten API guides | Ordinary docs Markdown, tables, examples, and links. | DMR, Scout, DHI, SCIM setup, and Hub webhooks live here. DMR's CLI reference is imported separately; its handwritten REST API page is maintained locally. | +| Docker Agent guides | [Hugo module mounts][hugo-config] expose upstream Markdown under Manuals. | `docker/docker-agent`, pinned to v1.126.0. [The sync workflow][agent-sync] updates the module and vendor snapshot. | +| Engine plugin protocols | Docker CLI documentation is mounted into `content/manuals/engine/extend/`. | `docker/cli`; the network protocol page also links to implementation documentation in `moby/moby`. Do not modify `_vendor` copies. | + +The Markdown experiences differ substantially. The [ReDoc Markdown +template][redoc-markdown] provides the page title, wrapper content, and a +specification link, without the operation descriptions. The [Governance +Markdown template][native-markdown] expands authentication, operations, +parameters, responses, and schemas. Handwritten API pages use ordinary +Markdown output. This difference affects readers and tools consuming the +Markdown representation of an API reference. + +ReDoc uses fragments such as `#operation/...` and `#tag/.../operation/...`. +The Hugo renderer uses `#operation-`. A renderer migration +therefore needs a strategy for existing deep links as well as page URLs. + +## Contradictions and open questions + +These are findings to resolve before writing shared guidance or migrating +renderers. A documentation contradiction does not by itself establish which +behavior the service implements. + +| ID | Finding and evidence | Required follow-up | +| --- | --- | --- | +| C1 | [Governance authentication][governance-spec], `components.securitySchemes.bearerAuth.description`, names a `password` field for `/v2/auth/token`. [Hub's operation][hub-spec] defines `identifier` and `secret`; [DHI][dhi-api] uses those fields. | Verify the request contract against the service owner and correct the Governance source upstream. Use the Hub operation as the reference contract when reconciling the docs. | +| C2 | [OAT's Hub API section][oat-guide] says to pass the token as a bearer token with an organization name as the username. [Hub authentication][hub-spec] says to exchange credentials first; [repository export][hub-export] demonstrates that exchange. The OAT wording leaves the raw credential versus exchanged token ambiguous. | Confirm direct-token support, if any, per endpoint. Name the credential and resulting token explicitly in shared instructions. | +| C3 | [DVP][dvp-spec] duplicates `/v2/users/login` without a deprecation marker. [Hub][hub-spec] marks that operation deprecated and directs readers to `/v2/auth/token`. | Confirm DVP's supported token flow and credential types, then replace duplicated guidance with an authoritative shared source. Retain any verified compatibility requirements. | +| C4 | [The Hugo renderer][native-layout], [its navigation][native-nav], and [Markdown template][native-markdown] enumerate only `get`, `post`, `put`, `patch`, and `delete`. Hub has three `HEAD` operations, Registry two, and Engine two. The renderer reads OpenAPI 3 `components`/`servers`, while Engine uses Swagger 2 `definitions`/`basePath`. | Treat the renderer as a candidate requiring expansion. Verify method coverage, schema handling, per-path server overrides, tag handling, and deep links before migration. DVP's authentication server overrides are a concrete case. | +| C5 | Structural checks found a missing [Hub][hub-spec] reference at `#/components/responses/team_repo`; [DVP][dvp-spec] declares security scheme `type: https`, path-level `security`, and a non-extension `features.openapi` field; [Registry][registry-spec] lacks required `info.version`. Registry authentication is described in prose but has no OpenAPI security scheme or requirements. | Resolve spec validity and machine-readable authentication coverage before relying on generated clients or a replacement renderer. These three specs are local; establish product reviewers and upstream authority. | +| C6 | The first row of [Engine's API version matrix][engine-home] labels the maximum version `1.55` for Engine 29.8 but links to v1.56. [Hugo parameters][hugo-config] and [the version spec][engine-spec] identify 1.56. | Reconcile the display label with the version source. Keep daemon release, supported minimum/maximum, latest alias, and specification selection coordinated. | +| C7 | [DMR's Anthropic table][dmr-api] lists `/anthropic/v1/messages`, while its examples call `/v1/messages`. Its OpenAI table uses `/engines/v1/...`. | Verify route aliases and document canonical paths plus supported alternatives. The differing examples alone do not establish broken endpoints. | +| C8 | No DMR/native Agent OpenAPI file or DHI GraphQL schema was found. Agent chat documents a runtime spec endpoint. No Hub/DVP/Registry spec synchronization workflow was found in the reviewed scripts. | Locate authoritative specs and maintainers before estimating conversion work. Fetch and inspect the chat server spec in a follow-up; keep DHI schema research deferred. | + +Structural checks used `openapi-spec-validator` 0.9.0 after parsing YAML and +converting mapping keys to their JSON string representation. Governance had +no validation errors in that check. Hub reference resolution stopped at the +missing reference. Engine v1.56 also raised null/array example-validation +errors; these were not investigated further and belong upstream if confirmed. +The findings above are selected blockers, not a complete specification +conformance audit or evidence of runtime failures. + +## Agreed direction and external dependencies + +The following context was supplied after the initial inventory: + +- API documentation should have two entry points: a common API catalog in + the revamped Reference experience, and direct navigation between each + product's manuals and its API reference. +- A separate information architecture effort is defining the site structure. + That work will affect the API revamp, but URL and navigation restructuring + are outside this exercise. +- The presentation will use a tailored system. Comparing established + renderers against custom rendering is outside this work. Unification must + also establish requirements for the source OpenAPI specifications. + +These are user-supplied constraints. The presentation approach below is a +proposal for discussion, not an agreed implementation decision. + +## Proposed presentation approach + +This initial sketch is superseded by the research and recommendations in +[Unified API documentation architecture](API-DOCUMENTATION-ARCHITECTURE.md). +That proposal covers the tailored presentation pipeline, a common source +profile, and adoption by API owners. The [tooling review](API-DOCUMENTATION-TOOLING.md) +records the component comparison and tests behind the refined pipeline. +The [prototype findings](API-DOCUMENTATION-PROTOTYPE.md) record the subsequent +dry-run against copied sources. The inventory remains a record of the original +documentation; prototype corrections are not upstream resolutions of its issues. + +Use a common documentation experience with explicit support for each API's +capabilities. The two entry points should lead to one canonical reference +for a given API version, with connections back to its product documentation. +The separate IA effort will determine the navigation and URL details. + +Separate the presentation into three responsibilities: + +| Responsibility | Shared behavior | API-specific content | +| --- | --- | --- | +| Documentation frame | Product identity, navigation, search, stable operation links, version context, and access to source specifications | Product relationships, available versions, and deployment type | +| Authored guidance | A consistent place for connection setup, authentication, a first request, workflows, and troubleshooting | Daemon sockets, credential exchanges, registry upload sequences, streaming protocols, and compatibility limitations | +| Generated reference | Operation signatures, parameters, request bodies, responses, schemas, and examples derived from the authoritative specification | Supported methods, media types, security requirements, schema dialect, and operation-specific server addresses | + +Keep explanatory guidance adjacent to the specification, with explicit links +to operations. Reuse verified authentication guidance by flow while retaining +each API's authorization requirements. Avoid copying endpoint definitions +into a second manually maintained reference. + +Prefer existing standards-aware parsing, validation, and reference resolution +over implementing those semantics in templates. Evaluate renderer components +against the site's delivery requirements before selecting a tool. Parsing in +Hugo or another build step does not establish complete rendering support. +If Swagger conversion is necessary, preserve the upstream source and validate +the conversion against representative operations. Do not assume converting +the format preserves every relevant detail. + +The reference should produce meaningful HTML and Markdown from the same +source. JavaScript can enhance schema exploration and examples. Browser-based +request execution should be an optional capability: Engine sockets, remote +TLS, browser cross-origin restrictions, and streaming behavior make a +universal request console unsuitable as the core reading experience. + +Use the repository's actual specifications as the evaluation corpus: + +- Engine tests version selection, Swagger 2, large schema sets, streams, + archives, and connection guidance +- Hub and Registry test authentication distinctions, `HEAD`, response headers, + media types, pagination, and existing operation links +- DVP tests server overrides for authentication and downloadable analytics +- Governance tests OpenAPI 3.1 and integration with the existing docs layout +- Model Runner and Docker Agent guides test how references without a checked-in + specification participate in the same experience + +Evaluation must detect omitted operations, unresolved references, lost +security requirements, and missing request/response variants. Schema +composition, required properties, acceptance of `null`, and recursive references +need explicit checks. Preserve access to the source spec and expose +unsupported constructs during development instead of silently dropping them. + +Use these cases to verify the tailored implementation and its source +profile. Assess semantic coverage, readable HTML and Markdown, accessible +schema navigation, search integration, stable links, performance, and +maintenance cost. Adopt the system incrementally across APIs. Detailed +GraphQL and SDK presentation remain follow-up work. + +## Implications for the next discussion + +A unified experience can use a common API catalog, navigation, reference +structure, source-download access, and Markdown delivery. Each API still +needs an explicit deployment type, connection procedure, authentication +flow, permission model, and version policy. + +For Engine, that structure should make daemon selection, socket or remote +connection, API compatibility, and a first HTTP request visible before +endpoint browsing. Its direct HTTP examples should be discoverable without +requiring readers to enter the SDK section. Model Runner and Docker Agent +can use the same structure for user-operated services while retaining their +different addresses, credentials, and compatibility formats. + +Use this inventory with the architecture proposal to assign specification +owners, reconcile the authentication contradictions, and plan adoption. +Final URL and navigation decisions remain with the separate information +architecture effort. + +## Maintaining this record + +Keep the H and C identifiers stable. When resolving a question, record the +verified behavior, evidence, and date in its row. Distinguish a source-doc +correction from runtime verification. Refresh the snapshot commit and +specification counts when the underlying content changes. + +The inventory was built by searching `content`, `layouts`, Hugo module +mounts, `_vendor`, scripts, and workflows for API references, HTTP endpoints, +OpenAPI/Swagger declarations, GraphQL, and SDK documentation. Candidate pages +were read to distinguish Docker interfaces from sample applications and +third-party integrations. Specifications were parsed to inspect methods, +servers, security schemes, versions, and references. + +[reference-home]: content/reference/_index.md +[engine-home]: content/reference/api/engine/_index.md +[engine-version]: content/reference/api/engine/version/v1.56.md +[engine-spec]: _vendor/github.com/moby/moby/api/docs/v1.56.yaml +[engine-sdk]: content/reference/api/engine/sdk/_index.md +[engine-examples]: content/reference/api/engine/sdk/examples.md +[daemon-security]: content/manuals/engine/security/protect-access.md +[daemon-remote]: content/manuals/engine/daemon/remote-access.md +[hub-page]: content/reference/api/hub/latest.md +[hub-spec]: content/reference/api/hub/latest.yaml +[hub-changelog]: content/reference/api/hub/changelog.md +[hub-deprecated]: content/reference/api/hub/deprecated.md +[hub-export]: content/manuals/docker-hub/repos/manage/export.md +[dvp-page]: content/reference/api/dvp/latest.md +[dvp-spec]: content/reference/api/dvp/latest.yaml +[dvp-guide]: content/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md +[dvp-changelog]: content/reference/api/dvp/changelog.md +[dvp-deprecated]: content/reference/api/dvp/deprecated.md +[registry-page]: content/reference/api/registry/latest.md +[registry-spec]: content/reference/api/registry/latest.yaml +[registry-auth]: content/reference/api/registry/auth.md +[governance-page]: content/reference/api/ai-governance/index.md +[governance-spec]: content/reference/api/ai-governance/api.yaml +[governance-manual]: content/manuals/ai/sandboxes/governance/reference/api.md +[governance-sync]: hack/sync-governance-api.sh +[dmr-api]: content/manuals/ai/model-runner/api-reference.md +[agent-api]: _vendor/github.com/docker/docker-agent/docs/features/api-server/index.md +[agent-chat]: _vendor/github.com/docker/docker-agent/docs/features/chat-server/index.md +[agent-a2a]: _vendor/github.com/docker/docker-agent/docs/features/a2a/index.md +[agent-mcp]: _vendor/github.com/docker/docker-agent/docs/features/mcp-mode/index.md +[mcp-gateway]: content/manuals/ai/mcp-catalog-and-toolkit/mcp-gateway.md +[agent-sdk]: _vendor/github.com/docker/docker-agent/docs/guides/go-sdk/index.md +[agent-sync]: .github/workflows/sync-docker-agent-docs.yml +[scout-metrics]: content/manuals/scout/explore/metrics-exporter.md +[scim-guide]: content/manuals/security/provisioning/scim/provision-scim.md +[oat-guide]: content/manuals/security/access-tokens/organization-access-tokens.md +[dhi-api]: content/manuals/dhi/tools/api.md +[dhi-vex]: content/manuals/dhi/how-to/vex-api.md +[plugin-api]: _vendor/github.com/docker/cli/docs/extend/plugin_api.md +[plugin-volume]: _vendor/github.com/docker/cli/docs/extend/plugins_volume.md +[plugin-auth]: _vendor/github.com/docker/cli/docs/extend/plugins_authorization.md +[plugin-logging]: _vendor/github.com/docker/cli/docs/extend/plugins_logging.md +[plugin-network]: _vendor/github.com/docker/cli/docs/extend/plugins_network.md +[engine-metrics]: content/manuals/engine/daemon/prometheus.md +[hub-webhooks]: content/manuals/docker-hub/repos/manage/webhooks.md +[extensions-reference]: content/reference/api/extensions-sdk/_index.md +[extensions-manual]: content/manuals/extensions/extensions-sdk/_index.md +[compose-sdk]: content/manuals/compose/compose-sdk.md +[testcontainers]: content/manuals/testcontainers.md +[desktop-allowlist]: content/manuals/desktop/setup/allow-list.md +[hugo-config]: hugo.yaml +[go-mod]: go.mod +[redoc-layout]: layouts/api.html +[redoc-markdown]: layouts/api.markdown.md +[native-layout]: layouts/api-reference.html +[native-markdown]: layouts/api-reference.markdown.md +[native-resolver]: layouts/_partials/api-ref/resolve.html +[native-nav]: layouts/_partials/api-ref/nav.html diff --git a/API-DOCUMENTATION-PROTOTYPE.md b/API-DOCUMENTATION-PROTOTYPE.md new file mode 100644 index 000000000000..1f4f5d4062c3 --- /dev/null +++ b/API-DOCUMENTATION-PROTOTYPE.md @@ -0,0 +1,220 @@ +# Unified API documentation prototype findings + +The prototype demonstrates a shared reference for all five specification-backed +API families, including two Engine versions. It converts copied specifications, +records each source change, validates the results, and produces HTML, Markdown, +source downloads, navigation, and search through Hugo. + +Status: completed dry-run, September 7, 2026. This is a documentation prototype, +not product-owner approval of the converted contracts. No product API requests +were sent, and no authoritative or imported specification was edited. + +## Run and inspect the prototype + +From the repository root: + +```console +./hack/api-docs/run.sh serve +``` + +Open . The complete container build is: + +```console +docker buildx bake api-prototype +``` + +It exports the site and reports under `tmp/api-prototype`. Serve the exported +site with the command in the [tooling README](hack/api-docs/README.md). +Default site builds exclude the prototype. No production URLs or navigation +were migrated. + +![API catalog](prototypes/api-docs/evidence/catalog.png) + +![Operation reference](prototypes/api-docs/evidence/operation.png) + +The catalog and manual entrypoints lead to the same reference. The operation +view exposes effective connection/authentication settings, parameters, body +variants, linked schemas, and request examples. Native controls support version, +media, and example selection. Core reference content remains available without +JavaScript. + +## Results by API + +The baseline comes from the checked-in [source lock](prototypes/api-docs/source-lock.json). +Each linked ledger contains the exact additions, removals, and replacements, +with evidence and ownership. Before/after pointers are relative to the named +migration stage. Textual patches preserve formatting differences as well. + +| Snapshot | Operations | Named schemas | Media/body variants | Recorded changes | Preview exceptions | +| --- | ---: | ---: | ---: | ---: | ---: | +| [Governance](prototypes/api-docs/migrations/governance.json) | 8 | 18 | 52 | 4 | 0 | +| [Hub](prototypes/api-docs/migrations/hub.json) | 54 | 74 | 241 | 157 | 268 | +| [DVP](prototypes/api-docs/migrations/dvp.json) | 12 | 26 | 20 | 14 | 17 | +| [Registry](prototypes/api-docs/migrations/registry.json) | 11 | 0 | 68 | 7 | 4 | +| [Engine 1.56](prototypes/api-docs/migrations/engine-1.56.json) | 108 | 160 | 434 | 1521 | 101 | +| [Engine 1.55](prototypes/api-docs/migrations/engine-1.55.json) | 108 | 160 | 434 | 1521 | 101 | + +Registry uses inline schemas; zero named schemas does not mean it lacks schemas. +A media/body variant is a request or response representation, including a +response without declared content. + +The pipeline accounts for 301 operations and creates 746 HTML/Markdown page +pairs: the catalog, six overviews, 301 operations, and 438 named schemas. +Source/model comparisons cover complete operation objects, response variants, +headers, and schemas. Original and converted method/path sets match. + +The validation step checks 1983 schema roots and performs 1529 example evaluations. +The [491 exact exceptions](prototypes/api-docs/exceptions.json) comprise 397 +missing media examples/fixtures, 45 missing parameter descriptions, and 49 +example/schema mismatches. These are recorded review items, not passing checks. +The same source example can be evaluated in more than one context. + +Strict validation fails with these exceptions. Preview generation accepts only +entries matching the API, source digest, rule, pointer, and diagnostic hash. +Structural errors, unresolved references, and source/output loss remain fatal. +Provisional contract assumptions are separately identified in the migration +ledgers and reference overviews. + +## What the prototype established + +| Assumption | Result and implication | +| --- | --- | +| One presentation can cover hosted and daemon APIs | Confirmed for the selected corpus. Engine uses an explicit socket connection profile and API version; hosted APIs retain their effective server addresses. | +| A Go preprocessing step integrates with Hugo | Confirmed. A separate Go module prepares model version 1; preview content adapters produce ordinary site pages, Markdown, and searchable content. | +| Source preservation requires more than retaining references | Confirmed. The convenience JSON view normalized timestamp strings. Reading original YAML scalar values preserves their spelling. Regression tests cover this case. | +| Stable IDs are sufficient for stable routing | Incomplete. Hub has both `Error` and `error` schemas. Hugo adapter paths normalize case. Unique internal page keys plus explicit case-preserving URLs prevent collisions. | +| Existing Markdown processing can be reused unchanged | Rejected. The site processing script changed an external `image-index.md` URL inside fenced schema JSON. The preview preserves its Markdown and performs only the required file flattening. | +| Validating the document covers its schemas | Rejected. Hub contains boolean `required` flags inside property definitions. Explicit schema checks found them; the conversion moves them to parent required-property lists. | +| Format conversion determines actual response media | Rejected. Engine conversion required explicit archive-success and JSON-error corrections. HEAD content was removed according to HTTP semantics while retaining status codes and headers. | +| Search can cover schema properties | Confirmed. Browser search for `GwPriority` returns both Engine schema references, with their API versions in the result titles. | + +The effective-security model preserves anonymous overrides and AND/OR +alternatives. Tests cover path-level server overrides, parameter replacement, +`QUERY`, boolean schemas, recursive references, reference siblings, external +streaming schemas, named/dynamic references in the evaluator, and false/zero +values. The selected OAS dialect and document schemas are locked locally. + +The structural gate uses the locked OAI document schema plus explicit schema +compilation. Vacuum supplies named Docker policy rules. This division avoids +relying on an implicit default ruleset. Contract reports use `oasdiff`, with +additional effective-setting and coverage comparisons. Original Hub's missing +reference can prevent a tool comparison; that failure is retained, and the +mandatory replay ledger remains available. + +## Source changes requiring upstream work + +| Owner | Changes and decisions | +| --- | --- | +| `docker/governor-services` | Adopt the selected OAS version/dialect and navigation metadata. Correct the token request prose from `password` to `secret`, following Hub's documented operation. Confirm credential support before publishing shared guidance. | +| Hub product owner; specification stored in `docker/docs` | Adopt the recorded missing operation IDs and editorial completions. Correct property-level requiredness and renderer-specific markup. Confirm the provisional `team_repo` base of `repository_info`. Keep SCIM's provisioning-token requirement separate. Resolve missing examples/descriptions and the remaining example mismatches. Establish authoritative ownership and synchronization. | +| DVP product owner; specification stored in `docker/docs` | Correct `type: https`, move path security to operation policies, and move the unsupported root field into an extension. Replace embedded schema-renderer markup with portable links. Retain authentication server overrides. Confirm the legacy login flow rather than silently replacing it with Hub's later flow. | +| Registry product owner; specification stored in `docker/docs` | Confirm the provisional `info.version: 2` and bearer security declaration, including anonymous access alternatives. Complete parameter descriptions and preserve challenge/token guidance, headers, and binary transfer examples. | +| `moby/moby` | Coordinate OAS migration with Go model generation. Review every provisional `x-nullable` interpretation: omission and pointer representation do not prove acceptance of JSON null. Review response media corrections, preserve generation extensions, and reconcile the existing example mismatches. Historical conversion remains a reviewed archival path. | +| `docker/docs` | Own catalog/connection metadata, source import gates, prepared-data interfaces, reference templates, search integration, and migration of URLs and fragment links. Resolve the Markdown processing script behavior independently of this preview. | + +All 3224 recorded changes are reproducible. Mechanical changes can be grouped +for review, but the ledgers retain every affected location and value. Existing +operation IDs are preserved; missing IDs are maintained in a separate +[recorded mapping](prototypes/api-docs/operation-ids.json). + +The source package for each API contains the converted specification, original +snapshot, ledger, textual patch, source lock, and exceptions. These six specs +have no external references. Multi-file resolution is tested through fixtures; +portable multi-file publication still needs a product-sized integration case. + +## Limits exposed by the prototype + +The prototype is a foundation for the implementation, not a complete OpenAPI +processor or a production reference design: + +- Schema exploration has linked references and bounded structured expansion, + followed by complete constraint blocks. Complex schema presentation needs + further design and accessibility review. Full operation JSON preserves + annotations that lack a dedicated presentation. +- The request generator covers POSIX shell examples, socket connections, + ordinary path/query/header parameters, and form-style query arrays. Other + serialization or authentication cases produce instructions rather than + fabricated working examples. Full request/response annotation policy and + wire-format testing remain required. +- Format and content annotations are not assertions in this prototype. + Example/schema validity does not establish actual server behavior, binary + encoding, or streaming framing. Media examples with known mismatches are + labeled; the generator avoids using directly identified invalid payloads. +- The evaluator tests advanced references, but broader resource-scope handling, + complete schema-position discovery, and publication across external resources + need additional integration fixtures. Callback/webhook navigation is an + explicit capability error. +- Temporary routes demonstrate navigation and version selection. Production + IA, historical discoverability, legacy fragment compatibility, and the full + Engine archive remain implementation work. + +## Build and browser evidence + +Go regression tests, migration replay, strict-source checks, preview generation, +source/model comparisons, HTML/Markdown checks, and browser checks were run. +The container build and local build both completed. A default Hugo build +completed without prototype HTML, Markdown, or navigation entries. + +The [browser checks](hack/api-docs/browser-checks.mjs) cover filtering, keyboard +version selection, clipboard content, reciprocal manual links, media/example +selection, search with version context, a 390-pixel browser window, and content with +JavaScript disabled. These checks are targeted; they are not a full +accessibility audit. + +The local measured Hugo/postprocessing/search/output-check stage took about +14 seconds with dependencies prepared; the final container run measured 41 seconds +for that stage. The API subtree occupied 190,452,604 bytes (about 190 MB), +including HTML, Markdown, and source downloads. The build also includes the +rest of the documentation site to exercise integration. Complete contract +blocks and repeated navigation add substantial output; production work should +measure and reduce that cost. These observations are not performance budgets. + +The `pagefind` 1.5.2 published Linux binary failed on the tested host's 16 KB memory +pages. An opt-in build of the same release with +`JEMALLOC_SYS_WITH_LG_PAGE=16` passed indexing and browser search. Its first Rust +build took about 98 seconds. The production build remains unchanged. + +## Presentation refinement + +The September 8 refinement applies the [reference design notes](prototypes/api-docs/DESIGN.md) +to the preview. It retains the Docker Docs page shell and catalog structure, +with a consistent heading scale, 15px reference prose, 14px navigation, and +13px code using the bundled `Roboto Mono` font. The request panel aligns with +the operation introduction; secondary source details use a keyboard-accessible +disclosure. Long endpoint paths wrap between segments without changing their +copied text. Light and dark themes share the site's color tokens. + +The complete local preview build and all 13 existing browser checks passed. +Additional [browser checks](prototypes/api-docs/evidence/presentation.json) +covered five representative pages at widths of 390, +768, 1024, 1280, and 1440 pixels in both themes. All 50 combinations retained +13px code and avoided horizontal page overflow. Keyboard focus and the source +location disclosure also passed targeted checks. The screenshots in this report +show the refined presentation; the September 7 build measurements describe the +initial dry-run. + +- [Dark operation view](prototypes/api-docs/evidence/operation-dark.png) +- [Mobile operation view](prototypes/api-docs/evidence/operation-mobile.png) +- [Schema view](prototypes/api-docs/evidence/schema.png) + +## Implementation sequence after this dry-run + +1. Agree the source profile, owners, and the recorded provisional decisions. + Establish source CI and a process for retiring exact preview exceptions. + Start Engine generation-toolchain coordination at this stage. +2. Harden the Governance vertical slice into a production component: versioned + compiler interface, precise schema traversal and resource registry, + direction-aware examples, accessible schema exploration, and bounded output. +3. Apply the source corrections with Hub, Registry, and DVP owners. Require + verified authentication/media contracts and reviewed examples before release. +4. Complete Engine's upstream authoring/generation migration and versioned + presentation, then expand the reviewed archival conversion beyond two versions. +5. Coordinate production catalog/manual navigation and legacy link migration + with the separate IA effort. Onboard the remaining HTTP references when + authoritative specifications are available; defer SDK and GraphQL work. + +Keep the [inventory](API-DOCUMENTATION-INVENTORY.md), +[architecture](API-DOCUMENTATION-ARCHITECTURE.md), and +[tooling review](API-DOCUMENTATION-TOOLING.md) alongside this report. Source +corrections require implementation evidence and owner review even when the +prototype's static checks pass. diff --git a/API-DOCUMENTATION-TOOLING.md b/API-DOCUMENTATION-TOOLING.md new file mode 100644 index 000000000000..c54223f37ce2 --- /dev/null +++ b/API-DOCUMENTATION-TOOLING.md @@ -0,0 +1,321 @@ +# API documentation tooling review + +This review replaces the component recommendation in the first +[architecture draft](API-DOCUMENTATION-ARCHITECTURE.md). It compares open-source +processing tools for Docker's proposed OpenAPI 3.2 source contract and tailored +presentation system. It does not compare reference UIs. +The [prototype report](API-DOCUMENTATION-PROTOTYPE.md) adds implementation +evidence and links to the reproducible pipeline and migration records. + +Research date: September 7, 2026. Versions below are the examined releases. +Experiments ran in temporary directories against shared fixtures; no product +specifications, dependencies, or site implementation were changed. + +## Recommendation + +Use a Go preprocessing tool built on [libopenapi][libopenapi], with +[vacuum][vacuum] for structural and Docker policy checks and +[jsonschema/v6][go-jsonschema] for explicit schema compilation and example +validation. Retain the original source nodes and reference graph throughout. +Hugo consumes prepared presentation data and publishes HTML, Markdown, +navigation, search content, and source downloads. + +Make [oasdiff][oasdiff] a review-report component. Keep runtime testing with +[Schemathesis][schemathesis] in product CI, where controlled services are +available. Neither belongs in the core rendering algorithm. + +Publish a locked source package with an entry specification, its referenced +files, and provenance metadata as the canonical downloadable contract. +A single-file bundle can be an additional artifact after its transformation +passes fidelity checks. A common OpenAPI format does not require a single +physical source file. + +The earlier `@redocly/cli` recommendation was based on too narrow a positive test. +It was intended to supply linting and bundling, not the presentation layer. +The broader tests do not support using it as the central validation gate +for this profile. Its bundling command remains useful in a narrower role. + +## Why separate the components + +“OpenAPI validation” can refer to several different operations: + +| Responsibility | Question answered | +| --- | --- | +| Strict parsing | Is the YAML/JSON well formed, without duplicate keys or discarded values? | +| Document structure | Are OpenAPI objects, required fields, and references valid? | +| Docker source policy | Are operation IDs, navigation groups, descriptions, ownership, and examples present as required by the Docker profile? | +| Schema compilation | Is each embedded Schema Object valid under its declared dialect, including schemas without examples? | +| Example evaluation | Does a supplied example satisfy its schema and the selected request/response policy? | +| Contract comparison | What changed, and what could affect consumers or documentation links? | + +A tool can perform one of these correctly while leaving another unchecked. +A parser can also repair input, or a convenience model can lose information +when serialized. Neither behavior is suitable for an authoritative +publication boundary without explicit handling. + +The serious findings came from negative controls and semantic comparisons. +Checking that `query` or `itemSchema` appears in output would not have caught +a false schema becoming an unconstrained schema, or one reference constraint +overwriting another. + +## Available components + +The licenses below apply to the examined open-source packages. The proposed +core functions do not require a hosted account or paid service. + +| Component and examined release | License | Assessment for this pipeline | +| --- | --- | --- | +| [libopenapi][libopenapi] 0.38.7 | MIT | Preferred source model, operation index, reference indexes, and source locations. Retain original schema nodes; do not reconstruct the contract through its schema rendering methods. | +| [vacuum][vacuum] 0.30.3 | MIT | Preferred policy/checking interface, with configurable rules, Go/JavaScript custom functions, and CI diagnostics. Use an explicit Docker ruleset and severity policy. | +| [libopenapi-validator][lib-validator] 0.14.0 | MIT | Supporting structural/request/response validation library. Its document convenience method does not replace explicit compilation of every schema. Its schema helpers use the same Go JSON Schema implementation recommended below. | +| [jsonschema/v6][go-jsonschema] 6.0.3 | Apache-2.0 | Preferred JSON Schema 2020-12 implementation for the Go tool. Supports resource registration, schema compilation, and instance validation. Configure the chosen dialect and resource loader deliberately. | +| [kin-openapi][kin] 0.149.0 | MIT | An active alternative with better 3.2 support than Hugo's pinned 0.139.0. Tests still found valid tag metadata rejected and reference-sibling information lost on serialization. | +| [Scalar parser][scalar-parser] 0.29.1, [document checker][scalar-validator] 0.1.1, and [json-magic][scalar-bundle] 0.13.4 | MIT | Separate components with different contracts. Strict document checking and narrow bundling are useful. Lenient parser validation and reference expansion are unsuitable as the authoritative semantic model. | +| [Spectral][spectral] CLI 6.16.3 / rulesets 1.22.7 | Apache-2.0 | A viable general policy engine. The built-in OAS ruleset does not handle the tested 3.2 document correctly; a Docker-owned ruleset would be necessary. Vacuum fits the proposed Go integration better. | +| [Redocly CLI/core][redocly] 2.51.2 | MIT | Tested bundling preserves important cases. Its structural lint rule rejects a valid boolean Schema Object, so it should not be the default source gate for the admitted profile. | +| [Swagger ApiDOM][apidom] 1.12.1 | Apache-2.0 | A credible typed syntax-tree foundation for a TypeScript alternative. Its 3.2 namespace recognizes the fixture, but the inspected 3.2 bundle strategy does no bundling. Full parser/resolver integration needs further work. | +| [APIDevTools swagger-parser][swagger-parser] 13.0.0 | MIT | Explicitly rejects OpenAPI 3.2. Not a candidate for the selected source format. | +| [APIDevTools JSON Schema ref parser][ref-parser] 15.3.6 | MIT | A separate generic reference/bundling tool that can process the tested 3.2 document. Reference expansion is not a complete JSON Schema semantic resolver. | +| [Ajv][ajv] 8.20.0 | MIT | A strong JSON Schema option if the compiler uses TypeScript. There is no need to add it alongside the Go evaluator by default. | +| [Python spec checker][python-spec] 0.9.0 / [schema checker][python-schema] 0.9.0 | Apache-2.0 / BSD-3-Clause | Useful independent diagnostics. The schema evaluator works when invoked directly; document-level checks missed important streaming schema/reference cases. Adding Python to the core build is unnecessary. | +| [oasdiff][oasdiff] 1.31.0 | Apache-2.0 | Preferred compatibility and changelog reporting. Tests detect several 3.2 changes that other comparison tools missed. Review full reports and apply Docker-specific severity policy. | +| [OpenAPITools openapi-diff][java-diff] 2.1.7 | Apache-2.0 | The examined documentation advertises OAS 3.0, without verified support for this 3.2 profile. Do not select it for this pipeline. | +| [Schemathesis][schemathesis] 4.26.0 | MIT | Suitable for optional product conformance tests. Its 3.2 operation and synthetic response handling passed targeted tests, but live stream testing requires a bounded test harness. | + +This comparison does not establish that an entire ecosystem is better than +another. The Go recommendation follows from the useful combination of source +locations, reference indexes, custom rule integration, and a schema evaluator +that can work with intact resources. The repository already has a Go build +environment through Hugo. A TypeScript alternative remains possible, but +switching among JavaScript convenience parsers would not remove the semantic +work identified here. + +## What the tests established + +The shared valid fixture combined four operations, including `QUERY`, an +external streaming `itemSchema`, a boolean schema, recursive references, +a `$ref` sibling, a path-level server override, an unauthenticated operation, +and false/zero example values. Separate fixtures introduced missing metadata, +an unresolved streaming reference, an invalid schema type, an invalid example, +a duplicate YAML key, and a missing operation ID. + +Missing `operationId` is an intentional Docker profile test; OpenAPI itself +does not require every operation to have one. + +### Checks need explicit coverage + +| Tested path | Observation | Consequence | +| --- | --- | --- | +| Vacuum recommended rules | Accepted the valid fixture; rejected missing version, unresolved streaming reference, and duplicate key. An invalid example was a warning with exit zero. Invalid `itemSchema.type` was not rejected. | Select rule severities explicitly and compile schemas independently. The recommended ruleset alone is insufficient. | +| Vacuum custom operation-ID rule | A rule including `QUERY` passed the valid fixture and rejected a missing ID with a source location. | The Docker profile can be enforced through custom rules; its selectors must cover all admitted operation collections. | +| libopenapi-validator `ValidateDocument()` | Accepted the invalid streaming schema type. Explicit schema compilation rejected it before any example was checked. | A capable schema evaluator is ineffective if the document traversal never sends it a schema. | +| `@redocly/cli` configured structural/example rules | Detected the invalid metadata, reference, type, and example, but rejected the valid boolean schema as an object-type error. | Its structural rule cannot be adopted unchanged for this source profile. The earlier positive probe did not exercise this case. | +| Scalar parser validation | Replaced missing `info.version` with `0.1.0` and accepted the document. Its separate strict checker rejected the missing field. | Avoid normalization/repair APIs at the authoritative boundary. Choose the exact package and function by role. | +| Scalar strict document checking | Accepted invalid `itemSchema.type`; the structural schema admits an object or boolean without validating its schema keywords. | Document checking and embedded schema compilation remain separate requirements. | +| Spectral built-in OAS rules | Treated the 3.2 fixture as 3.0 and rejected legal fields. A standalone custom rule worked. | Spectral is an alternative policy engine, not a verified 3.2 structure gate with its default OAS rules. | +| Python spec checking | Rejected missing version, but accepted the missing streaming reference and invalid streaming schema. Direct schema evaluation handled the tested JSON Schema constraints correctly. | Do not infer full schema/reference coverage from a claimed specification version. | + +The build should not accumulate all these tools as redundant gates. +Vacuum, `libopenapi`, and the supporting Go validation library share +implementation dependencies; their agreement is not independent evidence +of correctness. Use focused regression fixtures and separate responsibilities. + +### Preserve the graph and source nodes + +Both vacuum's default inline bundling and composed bundling changed +`schema: false` to `{}`. The high-level schema `Render()` path did the same. +The first schema accepts no instances; the second accepts any instance. +This is a semantic change, not formatting. + +However, `libopenapi` retained the literal false value in +`SchemaProxy.GetValueNode()` and in its source JSON representation. An +experiment registered intact resources with `jsonschema/v6`, selected schemas +by URI/pointer, and rejected unregistered resource access. It correctly +compiled recursive schemas, resolved the external streaming schema, rejected +the invalid type, and preserved false-schema validation. + +That is the recommended processing path: use typed operations as convenient +views, with original schema nodes and reference identities as authority. +Do not serialize a convenience model back into the canonical specification. + +The assembled prototype found a further limit: the convenience source JSON +view normalizes YAML timestamp strings, including fractional-second spelling. +The implementation reads original YAML scalar nodes for authoritative values +and uses the typed library model for operation source locations. The earlier +false-schema probe established preservation of that specific value, not every +source scalar. + +Reference expansion also failed in other components. Scalar and the generic +APIDevTools reference parser lost the base constraint in this case: + +```yaml +Base: + type: object + required: [a] +Sibling: + $ref: '#/components/schemas/Base' + required: [b] +``` + +The expanded object retained only `required: [b]`; both constraints must +apply. Additional named-anchor tests exposed incorrect or incomplete +resolution. ApiDOM's inspected [schema expansion implementation][apidom-expand] +also lets sibling keywords override constraints from the referenced schema. +A fully expanded object should therefore not +be the compiler's canonical schema representation. + +### Bundling can remain optional + +`@redocly/cli` bundling, Scalar `json-magic` bundling, and the generic APIDevTools +bundler preserved the tested false schema, recursive references, reference +siblings, `QUERY`, and external streaming schema. This is useful evidence +for an optional single-file derivative, rather than a reason to adopt their +other APIs as the compiler. + +There are still conditions to verify: reference errors must fail the task, +network resolution must follow the dependency lock, and resource/anchor +identity must survive. Scalar's default error handling can log unresolved +references and return output, and object inputs can be mutated. ApiDOM's +3.2 [bundle strategy][apidom-bundle] returns its parsed input; its existence is not +evidence that it builds a portable bundle. + +Retaining the source package avoids making any such rewrite a mandatory +step. The package must contain the entrypoint and all locked resources in +a layout where their references resolve. Publish that tree at stable URLs +and provide an archive for download. Acquiring dependencies and preserving +their identities remains required; an archive alone does not fix references +that point outside the package. + +If a single-file download is needed, introduce one of the passing bundling +paths behind the same semantic fixtures. `@redocly/cli` is a reasonable candidate +for that limited role. It should not supply canonical rendering input or +be mistaken for the source validation system. + +### Compare contracts with appropriate limits + +`oasdiff` detected removal of a `QUERY` operation, a boolean schema changing +from true to false, and an externally referenced streaming schema changing +to an incompatible inline type. The `libopenapi` method `CompareDocuments` missed the +latter two cases in the tested end-to-end calls. + +Use the full diff/changelog report from `oasdiff` for review. Its breaking report +treated an operation changing from `security: []` to bearer authentication +as informational, so Docker needs an explicit effective-authentication +comparison and severity policy. Its `breaking` command also exits zero by +default even when findings are present; enforcement requires a configured +`--fail-on ERR` or `WARN` policy. + +The [documented caveats][oasdiff-caveats] include dynamic references and +component path items. Do not treat an empty report as proof of complete +equivalence. Avoid using its schema-flattening options as compiler input; +[documented flattening limitations][oasdiff-flattening] can change constraints. +Compare against the previous accepted source for the same API version, or +an explicitly selected release baseline. Intentional versioned contract +changes need review, rather than an unconditional prohibition on change. + +## Proposed components and pipeline + +| Stage | Component | Output and boundary | +| --- | --- | --- | +| 1. Acquire and lock | Repository import tooling | Immutable source tree, dependency lock, API manifest, source revisions, and digests. Only declared resources are available to later stages. | +| 2. Parse and index | `libopenapi` | Strictly parsed source nodes, operation model, reference indexes, and source locations. Keep duplicate-key detection enabled and restrict indexed directories. | +| 3. Check document and profile | Vacuum plus an explicit Docker rule package | Structural/profile diagnostics with source pointers. Required rules fail as errors; no generic quality score or silent repair. | +| 4. Compile schemas | `jsonschema/v6` | A compiled schema for every admitted schema position, including `itemSchema`, whether or not it has an example. Register intact resources and the exact chosen dialect. | +| 5. Check examples | The same compiled schemas plus Docker request/response policy | Errors tied to the example and schema locations. No value coercion, inserted defaults, or removed properties. Handle media-specific examples explicitly. | +| 6. Prepare reference data | Docker-owned Go compiler | Versioned operation/navigation data, effective settings, schema graph, guide links, source provenance, and coverage diagnostics. | +| 7. Review changes | `oasdiff` plus prepared-data comparisons | Full contract report and Docker-specific checks for effective security, stable IDs, response/media coverage, and unsupported features. | +| 8. Publish | Hugo content adapters and templates | HTML, Markdown, source tree/archive, navigation, search, and stable links. Optional separately checked single-file bundle. | + +Stages 2–6 can live in one Go command and share loaded resources. Source +repositories can run its check-only mode with the same profile release; +the docs import runs those checks again on the exact revision it publishes. +Pin compatible library and rule versions together, rather than independently +upgrading a CLI and its semantic model. + +The Docker-owned portion should remain bounded: acquisition policy, source +profile, schema-position enumeration, presentation data, product metadata, +and fidelity checks. Reuse the libraries for parsing, reference indexes, +schema evaluation, and contract comparison. Do not implement another JSON +Schema evaluator or attempt to flatten arbitrary schemas in templates. + +### Required integration checks + +Before production use, verify the assembled pipeline, not only each package: + +- Register and test the exact OAS dialect and annotation vocabulary. The + successful raw-schema Go probe used Draft 2020-12; it does not certify all + OAS-specific annotation behavior. Preserve the source's declared dialect. +- Test `$id`, named anchors, dynamic references, cycles, and `$ref` siblings + with the locked resource registry. Block any admitted feature the pipeline + cannot handle faithfully. +- Define request/response, `format`, regular-expression, content, and streaming + example policies. A passing JSON instance test does not prove correct wire + encoding or actual service behavior. +- Keep original schema nodes through the prepared model and prove the + renderer covers them. A correct raw source does not excuse a partial UI. +- Test diagnostics, CLI exit behavior, and coverage on the same fixture corpus + whenever dependencies or the Docker source profile change. + +### Components to keep out of the default build + +Do not run Spectral alongside Vacuum, `ajv` alongside the Go schema evaluator, +or Python checks alongside both to add more checks. Add an independent +tool temporarily when investigating a discrepancy, with its scope recorded. + +Avoid depending directly on undocumented convenience models such as +`pb33f/doctor` for Docker's compiler API. Use documented source/index +facilities and isolate them behind a small adapter. + +Schemathesis is useful in product CI against controlled API instances. The +research only ran operation enumeration and synthetic response checks; no +HTTP calls were sent. Its [SSE documentation][schemathesis-sse] says it +buffers complete responses, so infinite streams require bounded fixtures or +another harness. Live API testing should not make docs builds dependent on +service availability or credentials. + +## Effect on the architecture proposal + +The tailored UI, Hugo publication, OpenAPI 3.2 target, and source ownership +requirements remain. The component recommendation changes from a +Redocly/TypeScript starting point to a source-preserving Go pipeline. + +The canonical publication artifact becomes the validated source package +and its reference graph. Single-file bundling becomes an optional derivative. +Schema compilation and example evaluation become explicit mandatory stages. +Compatibility reports support review with known limits, and the pipeline +retains its own completeness checks. + +These recommendations are grounded in the examined versions and fixtures. +They are a more specific implementation basis, not a claim of complete +OpenAPI conformance by any individual tool. + +The prototype uses the locked OAI document schema for structural validation, +explicit compilation for Schema Objects, and Vacuum for Docker policy rules. +It also isolates generated Markdown from a site processing script that rewrites +URLs inside fenced JSON. These refinements retain the proposed component +boundaries while incorporating end-to-end evidence. + +[libopenapi]: https://github.com/pb33f/libopenapi/releases/tag/v0.38.7 +[vacuum]: https://github.com/daveshanley/vacuum/blob/v0.30.3/README.md +[lib-validator]: https://github.com/pb33f/libopenapi-validator/tree/v0.14.0 +[go-jsonschema]: https://github.com/santhosh-tekuri/jsonschema/blob/v6.0.3/README.md +[kin]: https://github.com/getkin/kin-openapi/blob/v0.149.0/README.md +[scalar-parser]: https://github.com/scalar/scalar/tree/main/packages/openapi-parser +[scalar-validator]: https://github.com/scalar/scalar/blob/main/packages/openapi-validator/src/validate.ts +[scalar-bundle]: https://github.com/scalar/scalar/blob/main/packages/json-magic/src/bundle/bundle.ts +[spectral]: https://github.com/stoplightio/spectral/blob/0c2fa158147dcef0d8d577fbf753abbb1748f9ad/packages/rulesets/src/oas/functions/oasDocumentSchema.ts +[redocly]: https://github.com/Redocly/redocly-cli/blob/8938c898beaf8849054f6660427bfafe03b89a54/packages/core/src/types/oas3_2.ts +[apidom]: https://github.com/swagger-api/apidom/tree/219d365159f147e6068c56ff06d57ce2ce9297f6/packages/apidom-ns-openapi-3-2 +[apidom-bundle]: https://github.com/swagger-api/apidom/blob/219d365159f147e6068c56ff06d57ce2ce9297f6/packages/apidom-reference/src/bundle/strategies/openapi-3-2/index.ts +[apidom-expand]: https://github.com/swagger-api/apidom/blob/219d365159f147e6068c56ff06d57ce2ce9297f6/packages/apidom-reference/src/dereference/strategies/openapi-3-2/visitor.ts +[swagger-parser]: https://github.com/APIDevTools/swagger-parser/blob/2e1672443dc4834d82abec1229c894d6cf8fc11a/lib/index.js +[ref-parser]: https://github.com/APIDevTools/json-schema-ref-parser +[ajv]: https://github.com/ajv-validator/ajv/blob/v8.20.0/docs/json-schema.md +[python-spec]: https://github.com/python-openapi/openapi-spec-validator/blob/0.9.0/README.rst +[python-schema]: https://github.com/python-openapi/openapi-schema-validator/blob/0.9.0/README.rst +[oasdiff]: https://github.com/oasdiff/oasdiff/releases/tag/v1.31.0 +[oasdiff-caveats]: https://github.com/oasdiff/oasdiff/blob/v1.31.0/docs/OPENAPI-31.md +[oasdiff-flattening]: https://github.com/oasdiff/oasdiff/blob/v1.31.0/docs/ALLOF.md +[java-diff]: https://github.com/OpenAPITools/openapi-diff/blob/2.1.7/README.md +[schemathesis]: https://github.com/schemathesis/schemathesis/releases/tag/v4.26.0 +[schemathesis-sse]: https://github.com/schemathesis/schemathesis/blob/v4.26.0/docs/guides/server-sent-events.md diff --git a/Dockerfile b/Dockerfile index b0ab6a5993cf..68a005cfa30c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -173,3 +173,29 @@ EOT FROM scratch AS release COPY --from=build /project/public / COPY --from=pagefind /pagefind /pagefind + +# The published musl search binary assumes 4 KB pages. This opt-in rebuild +# supports the 16 KB and 64 KB Linux hosts used for local prototypes as well. +FROM rust:1.94-alpine3.23 AS api-prototype-search +RUN apk add --no-cache build-base +ENV JEMALLOC_SYS_WITH_LG_PAGE=16 +RUN cargo install pagefind --version 1.5.2 --locked --root /out + +# api-prototype-build is opt-in and never feeds the production release target. +FROM build-base AS api-prototype-build +RUN apk add --no-cache bash diffutils +ENV GOWORK=off +COPY --from=api-prototype-search /out/bin/pagefind /usr/local/bin/prototype-pagefind +ENV PAGEFIND_BIN=/usr/local/bin/prototype-pagefind +ARG API_PROTOTYPE_URL="http://localhost:1314" +ENV API_PROTOTYPE_URL=${API_PROTOTYPE_URL} +RUN --mount=type=cache,target=/root/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/root/.npm \ + ./hack/api-docs/run.sh build + +FROM scratch AS api-prototype +COPY --from=api-prototype-build /project/tmp/api-prototype/site /site +COPY --from=api-prototype-build /project/tmp/api-prototype/reports /reports +COPY --from=api-prototype-build /project/tmp/api-prototype/validation.json /validation.json +COPY --from=api-prototype-build /project/tmp/api-prototype/timing.json /timing.json diff --git a/docker-bake.hcl b/docker-bake.hcl index b693439a542d..7d4a29394810 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -22,6 +22,12 @@ group "default" { targets = ["release"] } +target "api-prototype" { + target = "api-prototype" + output = ["type=local,dest=tmp/api-prototype"] + provenance = false +} + target "index" { # generate a new local search index target = "index" @@ -188,4 +194,4 @@ target "validate-upstream" { target = "validate-upstream" output = ["type=cacheonly"] provenance = false -} \ No newline at end of file +} diff --git a/hack/api-docs/README.md b/hack/api-docs/README.md new file mode 100644 index 000000000000..fe9c6f4078c9 --- /dev/null +++ b/hack/api-docs/README.md @@ -0,0 +1,96 @@ +# API documentation prototype tooling + +This toolchain converts copied API specifications, records upstream changes, +and builds an opt-in Hugo reference. See the +[prototype report](../../API-DOCUMENTATION-PROTOTYPE.md) for findings and limits. + +Run from the repository root: + +```console +./hack/api-docs/run.sh build +./hack/api-docs/run.sh serve +``` + +Open `http://localhost:1314/api-prototype/`. The local commands need Go 1.26.5, +Hugo 0.163.0, Node.js, npm, and standard shell utilities. The server command also +uses Python 3. The container build supplies its dependencies: + +```console +docker buildx bake api-prototype +python3 -m http.server 1314 --bind 127.0.0.1 --directory tmp/api-prototype/site +``` + +The build exports the complete preview site, including the existing manuals, +under `tmp/api-prototype/site`. It never deploys or submits upstream changes. +The API pages exist only with the prototype Hugo config. + +## Commands + +| Command | Behavior | +| --- | --- | +| `bootstrap` | Install pinned migration dependencies and build the Go command, Vacuum, and the contract comparison tool | +| `verify` | Verify source digests, replay all migration stages, and compare converted sources, ledgers, and textual diffs | +| `convert` | Recreate converted sources and migration records from immutable snapshots and recorded choices | +| `check` | Run source verification, Vacuum policy rules, and strict validation; recorded exceptions still fail strict validation | +| `generate` | Run the pipeline through prepared data, checked source downloads, and comparison reports, accepting only exact preview exceptions | +| `report` | Check source/model coverage and regenerate the migration summary | +| `test` | Run Go regression tests and migration reproduction | +| `build` | Generate data, build Hugo, preserve reference Markdown, index search, and check output | +| `serve` | Build and serve the preview on localhost | + +The low-level Go command accepts `check`, `generate`, or `inspect`, followed by +the repository root. `inspect` writes diagnostics without declaring the input +acceptable. `--preview` accepts only recorded, matching exceptions. Use the +wrapper for the complete publication gates. + +## Source and diagnostic records + +The [catalog](../../prototypes/api-docs/catalog.json) describes the six snapshots. +The [source lock](../../prototypes/api-docs/source-lock.json) records their +origins and digests. Each migration ledger contains ordered before/after +changes; pointers refer to that stage's input/output document. A converter's +move can appear as a removal and an addition. Textual patches also retain +formatting changes. + +Preserve existing operation IDs. Missing IDs come from the checked-in +[ID mapping](../../prototypes/api-docs/operation-ids.json). Add specific, +reviewed correction patches to `corrections.json` beside the catalog when +needed, with the same change classification and evidence fields as the ledger. +Do not edit the original snapshots or authoritative specifications. + +Validation exceptions include the API, source digest, rule, pointer, diagnostic +hash, and reason. They are deliberate review records, not an automatically +refreshed allowlist. A changed source or diagnostic invalidates an exception. +`check` fails until the source is ready even when `build` produces a draft. + +## Output and coverage + +The Go command writes presentation model version 1 under +`tmp/api-prototype/data`. It contains effective operations and the original +schema graph. Hugo templates consume that interface. Source packages contain +both specifications, the migration ledger, textual diff, lock, and exceptions. +The six publication specifications have no external references; external +resource handling is exercised separately by fixtures. + +Coverage reports compare operation identities, full operation objects, media +variants, headers, and named schemas. Output checks verify HTML/Markdown pairs +and preview-owned links. The browser checks export a function accepting a +Playwright `Page`; run it against the local preview with JavaScript enabled. + +The source loader preserves YAML timestamp spelling and rejects duplicate +keys. JSON Schema evaluation uses the locked OAS dialect resources, with +format/content annotations left as annotations. Request/response annotations +are displayed; complete directional example evaluation and wire-format +validation remain implementation work. + +## Search portability + +The published `pagefind` 1.5.2 Linux binary fails on the tested 16 KB-page host. +The local build uses the optional Docker recipe to compile the same release +with `JEMALLOC_SYS_WITH_LG_PAGE=16`. Other local hosts use the published binary. +The prototype container includes that rebuild. This affects the opt-in target; +the production search build is unchanged. + +Set `PAGEFIND_BIN` to use a prepared compatible binary. Set +`API_PROTOTYPE_URL` when building for a different preview origin. For the +local server, also set `API_PROTOTYPE_PORT` to the matching port. diff --git a/hack/api-docs/browser-checks.mjs b/hack/api-docs/browser-checks.mjs new file mode 100644 index 000000000000..433e94778998 --- /dev/null +++ b/hack/api-docs/browser-checks.mjs @@ -0,0 +1,124 @@ +// Run with a Playwright Page connected to the local preview; no product API calls. +export default async function verify(page, base = "http://localhost:1314") { + const results = []; + const assert = (condition, message) => { + if (!condition) throw Error(message); + results.push(message); + }; + await page.setViewportSize({ width: 1440, height: 1000 }); + await page.goto(base + "/api-prototype/"); + assert( + (await page.locator(".api-card").count()) === 6, + "Catalog exposes all six snapshots", + ); + await page.goto(base + "/api-prototype/engine-1.56/"); + await page.locator("[data-api-filter]").fill("archive"); + const visible = page.locator("[data-api-filter-item]:visible"); + assert( + (await visible.count()) > 0 && (await visible.count()) < 108, + "Operation filter narrows Engine operations", + ); + assert( + (await visible.allTextContents()).every((t) => + t.toLowerCase().includes("archive"), + ), + "Filter results match their label", + ); + await page.locator("[data-api-version]").focus(); + await page.keyboard.press("ArrowDown"); + await page.keyboard.press("Enter"); + await page.waitForURL("**/api-prototype/engine-1.55/"); + assert( + page.url().endsWith("/engine-1.55/"), + "Keyboard version selection changes the reference", + ); + await page.goto(base + "/api-prototype/governance/operations/listPolicies/"); + await page.context().grantPermissions(["clipboard-read", "clipboard-write"]); + await page.locator("[data-api-copy]").focus(); + await page.keyboard.press("Enter"); + const copied = await page.evaluate(() => navigator.clipboard.readText()); + assert( + copied.includes("${TOKEN}") && + !copied.includes("'Authorization: Bearer $TOKEN'"), + "Copy preserves shell-expandable credentials", + ); + const manual = await page + .getByRole("link", { name: "Product manual", exact: false }) + .getAttribute("href"); + await page.goto(manual.startsWith("http") ? manual : base + manual); + assert( + (await page + .getByRole("link", { name: /Explore the AI Governance API 1 prototype/ }) + .count()) === 1, + "Product manual links back to the same API reference", + ); + await page.goto(base + "/api-prototype/engine-1.56/operations/SystemPing/"); + const select = page.locator("[data-api-media-select]"); + const options = await select + .locator("option") + .evaluateAll((nodes) => nodes.map((n) => n.value).filter(Boolean)); + assert(options.length > 1, "Engine exposes multiple media types"); + await select.selectOption(options[0]); + assert( + (await page.locator("[data-api-media][hidden]").count()) > 0, + "Media selection filters without removing source variants", + ); + await page.goto(base + "/api-prototype/governance/operations/createPolicy/"); + const exampleSelect = page.locator("[data-api-example-select]").first(); + if (await exampleSelect.count()) { + const n = await exampleSelect.locator("option").count(); + if (n > 1) { + await exampleSelect.selectOption({ index: 1 }); + assert( + (await page.locator("[data-api-example][hidden]").count()) > 0, + "Example selection updates displayed examples", + ); + } + } + const search = await page.evaluate(async () => { + const pf = await import("/pagefind/pagefind.js"); + const found = await pf.search("GwPriority"); + return Promise.all( + found.results.slice(0, 15).map(async (r) => { + const d = await r.data(); + return { url: d.url, title: d.meta.title }; + }), + ); + }); + assert( + search.some( + (r) => + r.url.includes("/api-prototype/engine-1.56/") && + r.title.includes("1.56"), + ), + "Search finds schema properties with API version context", + ); + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto(base + "/api-prototype/governance/operations/listPolicies/"); + assert( + await page.evaluate( + () => document.documentElement.scrollWidth <= innerWidth + 1, + ), + "Operation page fits a narrow viewport", + ); + assert( + await page.locator("[data-api-copy]").isVisible(), + "Request example remains usable on a narrow screen", + ); + await page.setViewportSize({ width: 1440, height: 1000 }); + const noJS = await page + .context() + .browser() + .newContext({ javaScriptEnabled: false }); + const staticPage = await noJS.newPage(); + await staticPage.goto( + base + "/api-prototype/governance/operations/listPolicies/", + ); + assert( + (await staticPage.locator("[data-api-variant]").count()) > 0 && + (await staticPage.locator(".api-signature").isVisible()), + "Reference content is present without JavaScript", + ); + await noJS.close(); + return { result: "pass", checks: results, search }; +} diff --git a/hack/api-docs/flatten-preview.mjs b/hack/api-docs/flatten-preview.mjs new file mode 100644 index 000000000000..b605846eaa16 --- /dev/null +++ b/hack/api-docs/flatten-preview.mjs @@ -0,0 +1,32 @@ +// The site postprocessor rewrites URL-like strings inside fenced JSON too. +// Keep generated reference Markdown intact; its links already target published URLs. +import fs from "node:fs"; +import path from "node:path"; +import { execFileSync } from "node:child_process"; +const root = path.resolve(import.meta.dirname, "../.."); +const site = path.join(root, "tmp/api-prototype/site"); +function files(dir) { + return fs + .readdirSync(dir, { withFileTypes: true }) + .flatMap((e) => + e.isDirectory() + ? files(path.join(dir, e.name)) + : [path.join(dir, e.name)], + ); +} +const saved = files(path.join(site, "api-prototype")) + .filter((p) => p.endsWith(".md")) + .map((p) => [p, fs.readFileSync(p)]); +for (const [p] of saved) fs.unlinkSync(p); +try { + execFileSync( + process.execPath, + [path.join(root, "hack/flatten-and-resolve.js"), site], + { stdio: "inherit" }, + ); +} finally { + for (const [p, b] of saved) { + const dest = path.basename(p) === "index.md" ? path.dirname(p) + ".md" : p; + fs.writeFileSync(dest, b); + } +} diff --git a/hack/api-docs/go.mod b/hack/api-docs/go.mod new file mode 100644 index 000000000000..6f45e2016a8f --- /dev/null +++ b/hack/api-docs/go.mod @@ -0,0 +1,18 @@ +module github.com/docker/docs/hack/api-docs + +go 1.26.5 + +require ( + github.com/pb33f/libopenapi v0.38.7 + github.com/santhosh-tekuri/jsonschema/v6 v6.0.3 +) + +require ( + github.com/bahlo/generic-list-go v0.2.0 // indirect + github.com/buger/jsonparser v1.1.2 // indirect + github.com/pb33f/jsonpath v0.8.2 // indirect + github.com/pb33f/ordered-map/v2 v2.3.1 // indirect + go.yaml.in/yaml/v4 v4.0.0-rc.6 // indirect + golang.org/x/sync v0.22.0 // indirect + golang.org/x/text v0.14.0 // indirect +) diff --git a/hack/api-docs/go.sum b/hack/api-docs/go.sum new file mode 100644 index 000000000000..304e372c1e29 --- /dev/null +++ b/hack/api-docs/go.sum @@ -0,0 +1,30 @@ +github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= +github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= +github.com/buger/jsonparser v1.1.2 h1:frqHqw7otoVbk5M8LlE/L7HTnIq2v9RX6EJ48i9AxJk= +github.com/buger/jsonparser v1.1.2/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= +github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/pb33f/jsonpath v0.8.2 h1:Ou4C7zjYClBm97dfZjDCjdZGusJoynv/vrtiEKNfj2Y= +github.com/pb33f/jsonpath v0.8.2/go.mod h1:zBV5LJW4OQOPatmQE2QdKpGQJvhDTlE5IEj6ASaRNTo= +github.com/pb33f/libopenapi v0.38.7 h1:Q2jfgRPdnU38WW8wQvrX2HEPGiqsxj01PX1BHmAEihc= +github.com/pb33f/libopenapi v0.38.7/go.mod h1:naZ03Auhn7i+RJtMv8ck8l7Ag8E2/x2w66j9vsDFL38= +github.com/pb33f/ordered-map/v2 v2.3.1 h1:5319HDO0aw4DA4gzi+zv4FXU9UlSs3xGZ40wcP1nBjY= +github.com/pb33f/ordered-map/v2 v2.3.1/go.mod h1:qxFQgd0PkVUtOMCkTapqotNgzRhMPL7VvaHKbd1HnmQ= +github.com/pb33f/testify v0.1.0 h1:g48/HDU/jn2COspS4nM0scptxiKTJ4DnbX/4ehK6IZ8= +github.com/pb33f/testify v0.1.0/go.mod h1:nq283P/jJ8hXMmdhAqfj7BJIz0y+6IOHj9q0044rKt4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.3 h1:1EYB5IzjZawrrnELUi78f9fPu57HuXjmddZPjrls/28= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.3/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +go.yaml.in/yaml/v4 v4.0.0-rc.6 h1:1h7H1ohdUh93/FyE4YaDa1Zh64K6VVbjF4K6WUxMtH4= +go.yaml.in/yaml/v4 v4.0.0-rc.6/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/hack/api-docs/main.go b/hack/api-docs/main.go new file mode 100644 index 000000000000..470d2b3b2dd0 --- /dev/null +++ b/hack/api-docs/main.go @@ -0,0 +1,757 @@ +// api-docs prepares a source-preserving reference model for the opt-in prototype. +package main + +import ( + "bytes" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "net/url" + "os" + "path/filepath" + "sort" + "strings" + + "github.com/pb33f/libopenapi" + "github.com/pb33f/libopenapi/datamodel" + js "github.com/santhosh-tekuri/jsonschema/v6" + yaml "go.yaml.in/yaml/v4" +) + +type Object = map[string]any + +const dialect = "https://spec.openapis.org/oas/3.1/dialect/base" + +var methods = []string{"get", "put", "post", "delete", "options", "head", "patch", "trace", "query"} + +func obj(v any) Object { + m, _ := v.(map[string]any) + if m == nil { + return Object{} + } + return m +} +func arr(v any) []any { a, _ := v.([]any); return a } +func str(v any) string { s, _ := v.(string); return s } +func keys(m Object) []string { + a := make([]string, 0, len(m)) + for k := range m { + a = append(a, k) + } + sort.Strings(a) + return a +} +func hash(b []byte) string { s := sha256.Sum256(b); return hex.EncodeToString(s[:]) } +func encoded(v any) []byte { + b, e := json.MarshalIndent(v, "", " ") + if e != nil { + panic(e) + } + return append(b, '\n') +} +func esc(s string) string { return strings.ReplaceAll(strings.ReplaceAll(s, "~", "~0"), "/", "~1") } +func pointer(root any, p string) (any, error) { + if p == "" { + return root, nil + } + if !strings.HasPrefix(p, "/") { + return nil, fmt.Errorf("unsupported pointer %s", p) + } + for _, k := range strings.Split(p[1:], "/") { + k = strings.ReplaceAll(strings.ReplaceAll(k, "~1", "/"), "~0", "~") + switch v := root.(type) { + case map[string]any: + var ok bool + root, ok = v[k] + if !ok { + return nil, fmt.Errorf("missing pointer %s", p) + } + case []any: + var n int + if _, e := fmt.Sscanf(k, "%d", &n); e != nil || n < 0 || n >= len(v) { + return nil, fmt.Errorf("invalid array pointer %s", p) + } + root = v[n] + default: + return nil, fmt.Errorf("non-container pointer %s", p) + } + } + return root, nil +} +func readJSON(p string) (any, error) { + b, e := os.ReadFile(p) + if e != nil { + return nil, e + } + return js.UnmarshalJSON(bytes.NewReader(b)) +} +func writeJSON(p string, v any) error { + if e := os.MkdirAll(filepath.Dir(p), 0755); e != nil { + return e + } + return os.WriteFile(p, encoded(v), 0644) +} + +type Diagnostic struct { + Rule string `json:"rule"` + Pointer string `json:"pointer"` + Message string `json:"message"` + Waivable bool `json:"waivable"` + Excepted bool `json:"excepted"` + Reason string `json:"reason,omitempty"` +} +type Source struct { + ID string `json:"id"` + Product string `json:"product"` + Title string `json:"title"` + Source string `json:"source"` + Owner string `json:"owner"` + Manual string `json:"manual"` + Connection string `json:"connection"` + Auth string `json:"auth"` + Guides []string `json:"guides"` +} +type Registry struct{ resources map[string]any } + +func (r *Registry) Load(uri string) (any, error) { + if v, ok := r.resources[uri]; ok { + return v, nil + } + return nil, fmt.Errorf("unlocked resource: %s", uri) +} + +type Document struct { + Root Object + URI string + Registry *Registry + Diagnostics []Diagnostic + Schemas map[string]any + Locations map[string]int + Compiler *js.Compiler + Compiled map[string]*js.Schema + Digest string + Source Source + SchemaCount int + ExampleCount int +} + +func (d *Document) issue(rule, p, msg string, waivable bool) { + d.Diagnostics = append(d.Diagnostics, Diagnostic{Rule: rule, Pointer: p, Message: strings.ReplaceAll(msg, d.URI, "source:"+d.Source.ID), Waivable: waivable}) +} +func walk(v any, p string, fn func(Object, string)) { + switch n := v.(type) { + case map[string]any: + fn(n, p) + for _, k := range keys(n) { + walk(n[k], p+"/"+esc(k), fn) + } + case []any: + for i, x := range n { + walk(x, fmt.Sprintf("%s/%d", p, i), fn) + } + } +} +func strictSource(file string) (Object, libopenapi.Document, error) { + b, e := os.ReadFile(file) + if e != nil { + return nil, nil, e + } + cfg := datamodel.NewDocumentConfiguration() + cfg.AllowRemoteReferences = false + cfg.AllowFileReferences = false + cfg.SkipExternalRefResolution = true + doc, e := libopenapi.NewDocumentWithConfiguration(b, cfg) + if e != nil { + return nil, nil, e + } + v, e := strictFragment(file) + return obj(v), doc, e +} + +// YAML timestamp scalars are strings in the JSON data model. Decode source nodes +// explicitly: libopenapi's JSON convenience view normalizes their spelling. +func strictFragment(file string) (any, error) { + b, e := os.ReadFile(file) + if e != nil { + return nil, e + } + var node yaml.Node + if e = yaml.Unmarshal(b, &node); e != nil { + return nil, e + } + v, e := sourceValue(&node, map[*yaml.Node]bool{}) + if e != nil { + return nil, e + } + raw, e := json.Marshal(v) + if e != nil { + return nil, e + } + return js.UnmarshalJSON(bytes.NewReader(raw)) +} +func sourceValue(n *yaml.Node, active map[*yaml.Node]bool) (any, error) { + if active[n] { + return nil, errors.New("cyclic YAML alias") + } + active[n] = true + defer delete(active, n) + switch n.Kind { + case yaml.DocumentNode: + if len(n.Content) != 1 { + return nil, errors.New("expected one YAML document") + } + return sourceValue(n.Content[0], active) + case yaml.AliasNode: + return sourceValue(n.Alias, active) + case yaml.MappingNode: + m := Object{} + for i := 0; i < len(n.Content); i += 2 { + k := n.Content[i] + if k.Kind != yaml.ScalarNode || k.Value == "<<" { + return nil, errors.New("complex/merge YAML keys are outside the source profile") + } + if _, ok := m[k.Value]; ok { + return nil, fmt.Errorf("duplicate key %s at line %d", k.Value, k.Line) + } + v, e := sourceValue(n.Content[i+1], active) + if e != nil { + return nil, e + } + m[k.Value] = v + } + return m, nil + case yaml.SequenceNode: + a := []any{} + for _, c := range n.Content { + v, e := sourceValue(c, active) + if e != nil { + return nil, e + } + a = append(a, v) + } + return a, nil + case yaml.ScalarNode: + if n.Tag == "!!str" || n.Tag == "!!timestamp" { + return n.Value, nil + } + var v any + e := n.Decode(&v) + return v, e + } + return nil, errors.New("unsupported YAML node") +} + +func loadDocument(file, metaDir string) (*Document, error) { + abs, _ := filepath.Abs(file) + root, parsed, e := strictSource(abs) + if e != nil { + return nil, e + } + uri := (&url.URL{Scheme: "file", Path: abs}).String() + b, _ := os.ReadFile(file) + d := &Document{Root: root, URI: uri, Diagnostics: []Diagnostic{}, Registry: &Registry{resources: map[string]any{uri: root}}, Schemas: map[string]any{}, Locations: map[string]int{}, Compiled: map[string]*js.Schema{}, Digest: hash(b)} + // libopenapi's typed model supplies operation views/locations; schema serialization is never used. + model, modelErr := parsed.BuildV3Model() + if modelErr == nil && model != nil && model.Model.Paths != nil { + for p, item := range model.Model.Paths.PathItems.FromOldest() { + for m, op := range item.GetOperations().FromOldest() { + if op.GoLow().RootNode != nil { + d.Locations["/paths/"+esc(p)+"/"+m] = op.GoLow().RootNode.Line + } + } + } + } + // All file resources are acquired before compilation, under a bounded source directory. + var acquire func(any, string) error + acquire = func(v any, base string) error { + var failure error + walk(v, "", func(n Object, _ string) { + for _, k := range []string{"$ref", "$dynamicRef"} { + ref, ok := n[k].(string) + if !ok { + return + } + u, er := url.Parse(ref) + if er != nil { + failure = er + return + } + bu, _ := url.Parse(base) + u = bu.ResolveReference(u) + u.Fragment = "" + id := u.String() + if _, ok := d.Registry.resources[id]; ok { + return + } + if u.Scheme != "file" { + failure = fmt.Errorf("unlocked reference %s", id) + return + } + rel, er := filepath.Rel(filepath.Dir(abs), u.Path) + if er != nil || rel == ".." || strings.HasPrefix(rel, ".."+string(filepath.Separator)) { + failure = fmt.Errorf("reference escapes package: %s", ref) + return + } + r, er := strictFragment(u.Path) + if er != nil { + failure = er + return + } + d.Registry.resources[id] = r + if er = acquire(r, id); er != nil { + failure = er + } + } + }) + return failure + } + if e = acquire(root, uri); e != nil { + return nil, e + } + lockRaw, e := os.ReadFile(filepath.Join(metaDir, "lock.json")) + if e != nil { + return nil, e + } + var lock []struct{ File, URI, SHA256 string } + if e = json.Unmarshal(lockRaw, &lock); e != nil { + return nil, e + } + for _, l := range lock { + b, e := os.ReadFile(filepath.Join(metaDir, l.File)) + if e != nil { + return nil, e + } + if hash(b) != l.SHA256 { + return nil, fmt.Errorf("dialect digest mismatch: %s", l.File) + } + v, e := js.UnmarshalJSON(bytes.NewReader(b)) + if e != nil { + return nil, e + } + d.Registry.resources[l.URI] = v + if id := str(obj(v)["$id"]); id != "" { + d.Registry.resources[id] = v + } + } + d.Compiler = js.NewCompiler() + d.Compiler.DefaultDraft(js.Draft2020) + d.Compiler.UseLoader(d.Registry) + for id, v := range d.Registry.resources { + if e = d.Compiler.AddResource(id, v); e != nil { + return nil, e + } + } + return d, nil +} +func (d *Document) resolve(v any) any { + seen := map[string]bool{} + for { + r := str(obj(v)["$ref"]) + if r == "" { + return v + } + if seen[r] { + return v + } + seen[r] = true + u, e := url.Parse(r) + if e != nil { + return v + } + base, _ := url.Parse(d.URI) + u = base.ResolveReference(u) + frag := u.Fragment + u.Fragment = "" + target, ok := d.Registry.resources[u.String()] + if !ok { + return v + } + resolved, e := pointer(target, frag) + if e != nil { + return v + } + merged := Object{} + for k, x := range obj(resolved) { + merged[k] = x + } + for _, k := range []string{"summary", "description"} { + if x, ok := obj(v)[k]; ok { + merged[k] = x + } + } + if len(merged) == 0 { + return resolved + } + v = merged + } +} +func (d *Document) schemaRoots(v any, p string) { + switch n := v.(type) { + case map[string]any: + for _, k := range keys(n) { + x := n[k] + q := p + "/" + esc(k) + if k == "schemas" && p == "/components" { + for name, s := range obj(x) { + d.Schemas[q+"/"+esc(name)] = s + } + } else if k == "schema" || k == "itemSchema" { + d.Schemas[q] = x + } else if !strings.HasPrefix(k, "x-") && k != "example" && k != "examples" && k != "value" { + d.schemaRoots(x, q) + } + } + case []any: + for i, x := range n { + d.schemaRoots(x, fmt.Sprintf("%s/%d", p, i)) + } + } +} +func (d *Document) validate(metaDir string) { + if d.Root["openapi"] != "3.2.0" { + d.issue("S1", "/openapi", "Expected OpenAPI 3.2.0", false) + } + if d.Root["jsonSchemaDialect"] != dialect { + d.issue("S1", "/jsonSchemaDialect", "Expected the selected OAS dialect", false) + } + documentSchema, e := d.Compiler.Compile("https://spec.openapis.org/oas/3.2/schema/2025-09-17") + if e != nil { + d.issue("structure", "", e.Error(), false) + } else if e = documentSchema.Validate(d.Root); e != nil { + d.issue("structure", "", e.Error(), false) + } + // OAS Reference Objects also need explicit validation: a document schema cannot prove their target exists. + walk(d.Root, "", func(n Object, p string) { + if r := str(n["$ref"]); r != "" { + u, er := url.Parse(r) + if er != nil { + d.issue("reference", p, er.Error(), false) + return + } + base, _ := url.Parse(d.URI) + u = base.ResolveReference(u) + frag := u.Fragment + u.Fragment = "" + v, ok := d.Registry.resources[u.String()] + if !ok { + d.issue("reference", p, "Unregistered resource "+r, false) + } else if strings.HasPrefix(frag, "/") { + if _, er = pointer(v, frag); er != nil { + d.issue("reference", p, er.Error(), false) + } + } + } + }) + if len(obj(d.Root["webhooks"])) > 0 { + d.issue("capability", "/webhooks", "Webhook navigation is outside this prototype", false) + } + walk(d.Root, "", func(n Object, p string) { + if len(obj(n["callbacks"])) > 0 { + d.issue("capability", p+"/callbacks", "Callback navigation is outside this prototype", false) + } + }) + d.schemaRoots(d.Root, "") + schemaMeta, e := d.Compiler.Compile(dialect) + if e != nil { + d.issue("dialect", "", e.Error(), false) + return + } + for _, p := range keys(d.Schemas) { + s := d.Schemas[p] + d.SchemaCount++ + if e = schemaMeta.Validate(s); e != nil { + d.issue("schema", p, e.Error(), false) + continue + } + compiled, e := d.Compiler.Compile(d.URI + "#" + p) + if e != nil { + d.issue("schema", p, e.Error(), false) + continue + } + d.Compiled[p] = compiled + d.schemaExamples(s, p) + } + // Media, parameter and header examples are separate from examples nested inside schemas. + walk(d.Root, "", func(n Object, p string) { + schemaKey := "schema" + if _, ok := n["itemSchema"]; ok { + schemaKey = "itemSchema" + } + c := d.Compiled[p+"/"+schemaKey] + if c == nil { + return + } + if v, ok := n["example"]; ok { + d.example(c, v, p+"/example") + } + for _, name := range keys(obj(n["examples"])) { + ex := obj(d.resolve(obj(n["examples"])[name])) + if v, ok := ex["value"]; ok { + d.example(c, v, p+"/examples/"+esc(name)+"/value") + } + if _, ok := ex["externalValue"]; ok { + d.issue("example-external", p+"/examples/"+esc(name), "External example requires a locked media fixture", true) + } + } + }) + ids := map[string]bool{} + tags := map[string]string{} + for _, raw := range arr(d.Root["tags"]) { + t := obj(raw) + tags[str(t["name"])] = str(t["kind"]) + } + for _, op := range d.operations() { + id := str(op["id"]) + p := str(op["pointer"]) + if id == "" || ids[id] { + d.issue("S4", p, "Operation ID must be present and unique", false) + } + ids[id] = true + opTags := arr(op["tags"]) + if len(opTags) == 0 || tags[str(opTags[0])] != "nav" { + d.issue("S5", p+"/tags", "The first operation tag must identify a declared navigation group", false) + } + for _, tag := range opTags { + if _, ok := tags[str(tag)]; !ok { + d.issue("S5", p+"/tags", "Operation tag is undeclared: "+str(tag), false) + } + } + if len(arr(op["servers"])) == 0 && d.Source.Connection != "unix" { + d.issue("S6", p, "Operation needs effective servers or a local connection profile", false) + } + if strings.TrimSpace(str(op["description"])) == "" { + d.issue("S4", p+"/description", "Operation description required", true) + } + for _, pr := range arr(op["parameters"]) { + param := obj(pr) + if str(param["description"]) == "" { + d.issue("S8", str(param["pointer"])+"/description", "Parameter description requires editorial review", true) + } + } + for _, variant := range arr(op["variants"]) { + v := obj(variant) + if str(v["media"]) != "" && len(arr(v["examples"])) == 0 { + d.issue("S11", str(v["pointer"]), "Media variant needs a reviewed example or transfer fixture", true) + } + } + } +} +func (d *Document) schemaExamples(s any, p string) { + n := obj(s) + if len(n) == 0 { + return + } + if _, ok := n["$schema"]; ok && n["$schema"] != dialect { + d.issue("S1", p+"/$schema", "Schema dialect override is outside the profile", false) + } + c, e := d.Compiler.Compile(d.URI + "#" + p) + if e == nil { + if v, ok := n["example"]; ok { + d.example(c, v, p+"/example") + } + for i, v := range arr(n["examples"]) { + d.example(c, v, fmt.Sprintf("%s/examples/%d", p, i)) + } + } + for k, x := range n { + switch k { + case "properties", "patternProperties", "$defs", "dependentSchemas": + for _, name := range keys(obj(x)) { + d.schemaExamples(obj(x)[name], p+"/"+k+"/"+esc(name)) + } + case "allOf", "anyOf", "oneOf", "prefixItems": + for i, v := range arr(x) { + d.schemaExamples(v, fmt.Sprintf("%s/%s/%d", p, k, i)) + } + case "items", "additionalProperties", "unevaluatedProperties", "contains", "not", "if", "then", "else", "contentSchema", "propertyNames": + d.schemaExamples(x, p+"/"+k) + } + } +} +func (d *Document) example(c *js.Schema, v any, p string) { + d.ExampleCount++ + if e := c.Validate(v); e != nil { + d.issue("example", p, e.Error(), true) + } +} +func (d *Document) effective(root, item, op Object, k string) any { + if v, ok := op[k]; ok { + return v + } + if k == "servers" { + if v, ok := item[k]; ok { + return v + } + } + return root[k] +} +func (d *Document) parameters(item, op Object, p string) []any { + a := []any{} + positions := map[string]int{} + for i, container := range []Object{item, op} { + for j, raw := range arr(container["parameters"]) { + v := obj(d.resolve(raw)) + c := Object{} + for k, x := range v { + c[k] = x + } + prefix := p + if i == 0 { + prefix = p[:strings.LastIndex(p, "/")] + } + c["pointer"] = fmt.Sprintf("%s/parameters/%d", prefix, j) + key := str(v["in"]) + ":" + str(v["name"]) + if n, ok := positions[key]; ok { + a[n] = c + } else { + positions[key] = len(a) + a = append(a, c) + } + } + } + return a +} +func exampleList(v Object) []any { + out := []any{} + if x, ok := v["example"]; ok { + out = append(out, Object{"name": "Example", "value": x}) + } + for _, name := range keys(obj(v["examples"])) { + x := obj(obj(v["examples"])[name]) + if value, ok := x["value"]; ok { + out = append(out, Object{"name": name, "value": value}) + } + } + return out +} +func (d *Document) variants(op Object, p string) []any { + out := []any{} + add := func(direction, status string, raw any, ptr string) { + container := obj(d.resolve(raw)) + content := obj(container["content"]) + if len(content) == 0 { + out = append(out, Object{"direction": direction, "status": status, "description": container["description"], "headers": container["headers"], "media": "", "pointer": ptr, "examples": []any{}}) + } + for _, media := range keys(content) { + v := obj(content[media]) + a := Object{"direction": direction, "status": status, "description": container["description"], "headers": container["headers"], "media": media, "pointer": ptr + "/content/" + esc(media), "examples": d.mediaExamples(v), "required": container["required"]} + for _, k := range []string{"schema", "itemSchema", "encoding"} { + if s, ok := v[k]; ok { + a[k] = s + } + } + out = append(out, a) + } + } + if v, ok := op["requestBody"]; ok { + add("Request", "", v, p+"/requestBody") + } + for _, code := range keys(obj(op["responses"])) { + add("Response", code, obj(op["responses"])[code], p+"/responses/"+esc(code)) + } + return out +} +func (d *Document) operations() []Object { + out := []Object{} + for _, path := range keys(obj(d.Root["paths"])) { + item := obj(d.resolve(obj(d.Root["paths"])[path])) + ms := append([]string{}, methods...) + for m := range obj(item["additionalOperations"]) { + ms = append(ms, m) + } + for _, method := range ms { + raw, ok := item[method] + extra := !ok + if !ok { + raw, ok = obj(item["additionalOperations"])[method] + } + if !ok { + continue + } + op := obj(raw) + p := "/paths/" + esc(path) + "/" + method + if extra { + p = "/paths/" + esc(path) + "/additionalOperations/" + esc(method) + } + v := Object{"id": op["operationId"], "method": strings.ToUpper(method), "path": path, "pointer": p, "line": d.Locations[p], "summary": op["summary"], "description": op["description"], "tags": op["tags"], "deprecated": op["deprecated"], "servers": d.effective(d.Root, item, op, "servers"), "security": d.effective(d.Root, item, op, "security"), "parameters": d.parameters(item, op, p), "variants": d.variants(op, p), "raw": op} + out = append(out, v) + } + } + return out +} +func main() { + if e := run(); e != nil { + fmt.Fprintln(os.Stderr, e) + os.Exit(1) + } +} +func run() error { + if len(os.Args) < 3 { + return errors.New("usage: api-docs check|generate|inspect ROOT [--preview]") + } + command := os.Args[1] + root, _ := filepath.Abs(os.Args[2]) + dir := filepath.Join(root, "prototypes/api-docs") + meta := filepath.Join(dir, "dialects") + catalogRaw, e := os.ReadFile(filepath.Join(dir, "catalog.json")) + if e != nil { + return e + } + var catalog struct { + APIs []Source `json:"apis"` + } + if e = json.Unmarshal(catalogRaw, &catalog); e != nil { + return e + } + preview := len(os.Args) > 3 && os.Args[3] == "--preview" + exceptions, _ := readJSON(filepath.Join(dir, "exceptions.json")) + reports := []any{} + models := []any{} + blocking := 0 + for _, src := range catalog.APIs { + d, e := loadDocument(filepath.Join(dir, "converted", src.ID+".yaml"), meta) + if e != nil { + return fmt.Errorf("%s: %w", src.ID, e) + } + d.Source = src + d.validate(meta) + for i := range d.Diagnostics { + diag := &d.Diagnostics[i] + for _, raw := range arr(exceptions) { + x := obj(raw) + if diag.Waivable && x["api"] == src.ID && x["sha256"] == d.Digest && x["rule"] == diag.Rule && x["pointer"] == diag.Pointer && x["messageSha256"] == hash([]byte(diag.Message)) && str(x["reason"]) != "" { + diag.Excepted = true + diag.Reason = str(x["reason"]) + break + } + } + if !diag.Excepted || !preview { + blocking++ + } + } + reports = append(reports, Object{"api": src.ID, "sha256": d.Digest, "schemas": d.SchemaCount, "examples": d.ExampleCount, "operations": len(d.operations()), "diagnostics": d.Diagnostics}) + models = append(models, d.model()) + fmt.Printf("%s: %d operations, %d schema roots, %d examples, %d diagnostics\n", src.ID, len(d.operations()), d.SchemaCount, d.ExampleCount, len(d.Diagnostics)) + } + out := filepath.Join(root, "tmp/api-prototype") + if e = writeJSON(filepath.Join(out, "validation.json"), reports); e != nil { + return e + } + if command == "inspect" { + return nil + } + if blocking > 0 { + return fmt.Errorf("%d blocking diagnostics; see tmp/api-prototype/validation.json", blocking) + } + if command == "generate" { + if e = writeJSON(filepath.Join(out, "data/api-prototype.json"), Object{"modelVersion": 1, "apis": models}); e != nil { + return e + } + if e = publishSources(root, catalog.APIs); e != nil { + return e + } + } + return nil +} diff --git a/hack/api-docs/main_test.go b/hack/api-docs/main_test.go new file mode 100644 index 000000000000..ae7a4ef9bba1 --- /dev/null +++ b/hack/api-docs/main_test.go @@ -0,0 +1,208 @@ +package main + +import ( + js "github.com/santhosh-tekuri/jsonschema/v6" + "os" + "path/filepath" + "reflect" + "strings" + "testing" +) + +func fixture(t *testing.T, name string) *Document { + t.Helper() + d, e := loadDocument(filepath.Join("testdata", name), "../../prototypes/api-docs/dialects") + if e != nil { + t.Fatal(e) + } + d.Source = Source{ID: "test"} + return d +} +func TestActualDialectAndReferences(t *testing.T) { + d := fixture(t, "valid.yaml") + d.validate("") + for _, x := range d.Diagnostics { + if !x.Waivable { + t.Errorf("%s: %s", x.Rule, x.Message) + } + } + if len(d.operations()) != 4 { + t.Fatal("operation omitted") + } + var query Object + for _, op := range d.operations() { + if op["method"] == "QUERY" { + query = op + } + } + if query == nil { + t.Fatal("QUERY omitted") + } + if obj(arr(query["servers"])[0])["url"] != "https://search.example.test" { + t.Fatal("path server override lost") + } + p := obj(arr(query["parameters"])[0]) + if p["example"] != jsonNumber("0") { + t.Fatalf("parameter override/zero lost: %#v", p["example"]) + } + if len(arr(query["parameters"])) != 1 { + t.Fatal("duplicate overridden parameter") + } +} +func jsonNumber(s string) any { + v, e := js.UnmarshalJSON(strings.NewReader(s)) + if e != nil { + panic(e) + } + return v +} +func TestNegativeFixtures(t *testing.T) { + for _, tc := range []struct{ name, rule string }{{"invalid-info.yaml", "structure"}, {"invalid-item-type.yaml", "schema"}, {"invalid-example.yaml", "example"}, {"profile-missing-id.yaml", "S4"}} { + t.Run(tc.name, func(t *testing.T) { + d := fixture(t, tc.name) + d.validate("") + found := false + for _, x := range d.Diagnostics { + found = found || x.Rule == tc.rule + } + if !found { + t.Fatalf("missing %s diagnostic: %+v", tc.rule, d.Diagnostics) + } + }) + } + for _, name := range []string{"duplicate-key.yaml", "invalid-stream-ref.yaml"} { + t.Run(name, func(t *testing.T) { + d, e := loadDocument(filepath.Join("testdata", name), "../../prototypes/api-docs/dialects") + if e == nil { + d.validate("") + for _, x := range d.Diagnostics { + if !x.Waivable { + return + } + } + t.Fatal("invalid source accepted") + } + }) + } +} +func TestSchemaSemantics(t *testing.T) { + d := fixture(t, "valid.yaml") + c := d.Compiler + cases := []struct { + name string + schema any + valid, invalid any + }{{"boolean false", false, nil, "x"}, {"ref siblings", Object{"$defs": Object{"base": Object{"type": "object", "required": []any{"a"}}}, "$ref": "#/$defs/base", "required": []any{"b"}}, Object{"a": true, "b": true}, Object{"b": true}}, {"recursive", Object{"type": "object", "properties": Object{"next": Object{"$ref": "#"}}}, Object{"next": Object{}}, Object{"next": 1}}, {"anchor", Object{"$defs": Object{"x": Object{"$anchor": "x", "type": "boolean"}}, "$ref": "#x"}, false, "false"}, {"dynamic", Object{"$dynamicAnchor": "node", "type": "object", "properties": Object{"child": Object{"$dynamicRef": "#node"}}}, Object{"child": Object{}}, Object{"child": false}}} + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + uri := "https://fixtures.test/" + strings.ReplaceAll(tc.name, " ", "-") + s := tc.schema + if m, ok := s.(map[string]any); ok { + m["$schema"] = dialect + } + if e := c.AddResource(uri, s); e != nil { + t.Fatal(e) + } + compiled, e := c.Compile(uri) + if e != nil { + t.Fatal(e) + } + if tc.valid != nil { + if e = compiled.Validate(tc.valid); e != nil { + t.Fatal(e) + } + } + if e = compiled.Validate(tc.invalid); e == nil { + t.Fatal("invalid example accepted") + } + }) + } +} +func TestAuthAndCurl(t *testing.T) { + schemes := Object{"bearer": Object{"type": "http", "scheme": "bearer"}, "key": Object{"type": "apiKey", "in": "header", "name": "X-Key"}} + op := Object{"method": "GET", "path": "/flag/{id}", "servers": []any{Object{"url": "https://api.test"}}, "securitySchemes": schemes, "security": []any{Object{"bearer": []any{}, "key": []any{}}, Object{}}, "parameters": []any{Object{"name": "id", "in": "path", "required": true, "example": "a/b"}, Object{"name": "enabled", "in": "query", "example": false}, Object{"name": "limit", "in": "query", "example": 0}}} + curl, _ := curlExample(Source{}, op) + for _, want := range []string{"a%2Fb", "enabled=false", "limit=0", "${TOKEN}", "X-Key: ${API_KEY}"} { + if !strings.Contains(curl, want) { + t.Errorf("missing %s: %s", want, curl) + } + } + op["security"] = []any{} + curl, _ = curlExample(Source{}, op) + if strings.Contains(curl, "Authorization") { + t.Fatal("anonymous operation gained auth") + } + op["method"] = "HEAD" + curl, _ = curlExample(Source{Connection: "unix", ID: "engine-1.56"}, op) + if !strings.Contains(curl, "--head") || !strings.Contains(curl, "--unix-socket") { + t.Fatal(curl) + } + d := &Document{} + root := Object{"security": []any{Object{"bearer": []any{}}}} + if !reflect.DeepEqual(d.effective(root, Object{}, Object{"security": []any{}}, "security"), []any{}) { + t.Fatal("empty override lost") + } +} +func TestFalseSchemaAndExamplePreserved(t *testing.T) { + b, e := os.ReadFile("testdata/valid.yaml") + if e != nil { + t.Fatal(e) + } + tmp := t.TempDir() + if e = os.WriteFile(filepath.Join(tmp, "spec.yaml"), []byte(strings.ReplaceAll(string(b), "schema: true", "schema: false")), 0600); e != nil { + t.Fatal(e) + } + if e = os.Mkdir(filepath.Join(tmp, "schemas"), 0700); e != nil { + t.Fatal(e) + } + event, _ := os.ReadFile("testdata/schemas/event.yaml") + os.WriteFile(filepath.Join(tmp, "schemas/event.yaml"), event, 0600) + d, e := loadDocument(filepath.Join(tmp, "spec.yaml"), "../../prototypes/api-docs/dialects") + if e != nil { + t.Fatal(e) + } + d.validate("") + v, e := pointer(d.Root, "/paths/~1search/query/responses/200/content/application~1json/schema") + if e != nil || v != false { + t.Fatal("false schema changed") + } + for _, op := range d.operations() { + if op["path"] == "/public" { + ex := obj(arr(obj(arr(op["variants"])[0])["examples"])[0]) + if ex["value"] != false { + t.Fatal("false example omitted") + } + } + } +} + +func TestTimestampStringsRetainSpelling(t *testing.T) { + p := filepath.Join(t.TempDir(), "schema.yaml") + if e := os.WriteFile(p, []byte("type: string\nexample: 2021-01-05T21:06:53.506400Z\n"), 0600); e != nil { + t.Fatal(e) + } + v, e := strictFragment(p) + if e != nil { + t.Fatal(e) + } + if obj(v)["example"] != "2021-01-05T21:06:53.506400Z" { + t.Fatalf("timestamp spelling changed: %v", v) + } +} +func TestCaseSensitiveSchemaRoutes(t *testing.T) { + if slug("Error") == slug("error") { + t.Fatal("schema route collision") + } +} +func TestUnlockedResourcesAndUnknownDialect(t *testing.T) { + d := fixture(t, "valid.yaml") + if _, e := d.Compiler.Compile("https://unlocked.test/schema"); e == nil { + t.Fatal("unlocked schema fetched") + } + if e := d.Compiler.AddResource("https://fixtures.test/custom", Object{"$schema": "https://unlocked.test/dialect", "type": "object"}); e != nil { + t.Fatal(e) + } + if _, e := d.Compiler.Compile("https://fixtures.test/custom"); e == nil { + t.Fatal("unknown dialect accepted") + } +} diff --git a/hack/api-docs/migrate.mjs b/hack/api-docs/migrate.mjs new file mode 100644 index 000000000000..e3e16831d780 --- /dev/null +++ b/hack/api-docs/migrate.mjs @@ -0,0 +1,551 @@ +// Migration-only tooling. The publication compiler is Go; original sources are immutable. +import fs from "node:fs"; +import path from "node:path"; +import crypto from "node:crypto"; +import { execFileSync } from "node:child_process"; +import YAML from "yaml"; +import { isDeepStrictEqual } from "node:util"; +import converter from "swagger2openapi"; +const root = path.resolve(import.meta.dirname, "../.."); +const dir = path.join(root, "prototypes/api-docs"); +const catalog = JSON.parse(fs.readFileSync(path.join(dir, "catalog.json"))); +const digest = (b) => crypto.createHash("sha256").update(b).digest("hex"); +const read = (p) => fs.readFileSync(path.join(dir, p), "utf8"); +const json = (v) => JSON.stringify(v, null, 2) + "\n"; +const clone = (v) => structuredClone(v); +const esc = (s) => s.replaceAll("~", "~0").replaceAll("/", "~1"); +const own = (o, k) => Object.hasOwn(o, k); +const methods = [ + "get", + "put", + "post", + "delete", + "options", + "head", + "patch", + "trace", + "query", +]; +function parse(s) { + const d = YAML.parseDocument(s, { uniqueKeys: true }); + if (d.errors.length) throw d.errors[0]; + return d.toJS(); +} +function output(file, value, verify) { + const b = typeof value === "string" ? value : json(value); + const p = path.join(dir, file); + if (verify) { + if (!fs.existsSync(p) || fs.readFileSync(p, "utf8") !== b) + throw Error(`Reproduction differs: ${file}`); + } else fs.writeFileSync(p, b); +} +function diff(a, b, p = "") { + if (JSON.stringify(a) === JSON.stringify(b)) return []; + if ( + a && + b && + !Array.isArray(a) && + !Array.isArray(b) && + typeof a === "object" && + typeof b === "object" + ) + return [...new Set([...Object.keys(a), ...Object.keys(b)])] + .sort() + .flatMap((k) => diff(a[k], b[k], p + "/" + esc(k))); + return [ + { + pointer: p, + beforePresent: a !== undefined, + afterPresent: b !== undefined, + ...(a === undefined ? {} : { before: a }), + ...(b === undefined ? {} : { after: b }), + }, + ]; +} +function apply(tree, changes) { + for (const c of changes) { + const parts = c.pointer + .slice(1) + .split("/") + .map((s) => s.replaceAll("~1", "/").replaceAll("~0", "~")); + let o = tree; + for (const p of parts.slice(0, -1)) o = o[p]; + const k = parts.at(-1); + if (c.afterPresent) o[k] = clone(c.after); + else delete o[k]; + } + return tree; +} +function walk(v, fn, p = "") { + if (!v || typeof v !== "object") return; + fn(v, p); + for (const [k, x] of Object.entries(v)) walk(x, fn, p + "/" + esc(k)); +} +function operations(spec) { + const out = []; + for (const [p, item] of Object.entries(spec.paths ?? {})) + for (const m of methods) if (item[m]) out.push([p, m, item[m], item]); + return out; +} +const idPath = path.join(dir, "operation-ids.json"); +let ids = fs.existsSync(idPath) ? JSON.parse(fs.readFileSync(idPath)) : {}; +const command = process.argv[2] ?? "verify"; +const verify = command === "verify"; +if (command === "snapshot") { + const revision = execFileSync("git", ["rev-parse", "HEAD"], { + cwd: root, + encoding: "utf8", + }).trim(); + const lock = { + revision, + tools: { + swagger2openapi: "7.0.8", + yaml: "2.8.1", + libopenapi: "0.38.7", + vacuum: "0.30.3", + jsonschema: "6.0.3", + oasdiff: "1.31.0", + }, + sources: [], + }; + for (const api of catalog.apis) { + const b = fs.readFileSync(path.join(root, api.source)); + const f = `original/${api.id}.yaml`; + if ( + fs.existsSync(path.join(dir, f)) && + !fs.readFileSync(path.join(dir, f)).equals(b) + ) + throw Error(`Refusing to overwrite snapshot: ${f}`); + output(f, b.toString(), false); + lock.sources.push({ ...api, sha256: digest(b) }); + } + output("source-lock.json", lock, false); + console.log("Captured six immutable source snapshots."); + process.exit(0); +} +const lock = JSON.parse(read("source-lock.json")); +for (const api of catalog.apis) { + const source = lock.sources.find((s) => s.id === api.id); + const originalText = read(`original/${api.id}.yaml`); + if ( + digest(originalText) !== source.sha256 || + digest(fs.readFileSync(path.join(root, api.source))) !== source.sha256 + ) + throw Error(`Source digest mismatch: ${api.id}`); + const original = parse(originalText); + let spec = clone(original); + const ledger = []; + const stage = (name, classification, rationale, evidence, fn) => { + const before = clone(spec); + fn(); + for (const c of diff(before, spec)) + ledger.push({ + ...c, + id: `${api.id}-${digest(name + c.pointer).slice(0, 12)}`, + stage: name, + classification, + rationale, + evidence, + owner: api.owner, + sourcePointer: c.beforePresent ? c.pointer : null, + destinationPointer: c.afterPresent ? c.pointer : null, + }); + }; + if (spec.swagger) { + const result = await converter.convertObj(clone(spec), { + refSiblings: "allOf", + patch: false, + warnOnly: false, + }); + stage( + "swagger-to-oas3", + "mechanical conversion", + "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "swagger2openapi 7.0.8", + () => { + spec = result.openapi; + }, + ); + output(`migrations/${api.id}.intermediate.json`, spec, verify); + } + stage( + "oas32-header", + "mechanical conversion", + "Adopt the common OpenAPI version and its selected schema dialect.", + "API-DOCUMENTATION-ARCHITECTURE.md S1", + () => { + spec.openapi = "3.2.0"; + spec.jsonSchemaDialect = catalog.dialect; + }, + ); + // Schema migration is scoped to schema positions, excluding examples and application property names. + function schemas(v, fn, p = "") { + if (!v || typeof v !== "object") return; + for (const [k, x] of Object.entries(v)) { + const q = p + "/" + esc(k); + if (k === "schemas" && p === "/components") { + for (const [n, s] of Object.entries(x)) schema(s, fn, q + "/" + esc(n)); + } else if (k === "schema" || k === "itemSchema") schema(x, fn, q); + else if ( + !["example", "examples", "value", "default", "enum"].includes(k) && + !k.startsWith("x-") + ) + schemas(x, fn, q); + } + } + function schema(s, fn, p) { + if (!s || typeof s !== "object") return; + fn(s, p); + for (const [k, x] of Object.entries(s)) { + if ( + [ + "properties", + "patternProperties", + "$defs", + "definitions", + "dependentSchemas", + ].includes(k) + ) + for (const [n, c] of Object.entries(x ?? {})) + schema(c, fn, p + "/" + k + "/" + esc(n)); + else if ( + ["allOf", "anyOf", "oneOf", "prefixItems"].includes(k) && + Array.isArray(x) + ) + x.forEach((c, i) => schema(c, fn, p + "/" + k + "/" + i)); + else if ( + [ + "items", + "additionalProperties", + "unevaluatedProperties", + "unevaluatedItems", + "contains", + "not", + "if", + "then", + "else", + "contentSchema", + "propertyNames", + ].includes(k) + ) + schema(x, fn, p + "/" + k); + } + } + stage( + "oas30-schema-semantics", + "mechanical conversion", + "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + () => + schemas(spec, (s) => { + if (own(s, "nullable")) { + const nullable = s.nullable; + delete s.nullable; + if (nullable && s.type) { + const type = Array.isArray(s.type) ? s.type : [s.type]; + s.type = [...new Set([...type, "null"])]; + } + } + for (const [ex, bound] of [ + ["exclusiveMinimum", "minimum"], + ["exclusiveMaximum", "maximum"], + ]) + if (typeof s[ex] === "boolean") { + if (s[ex] && typeof s[bound] === "number") { + s[ex] = s[bound]; + delete s[bound]; + } else delete s[ex]; + } + }), + ); + if (api.product === "engine") + stage( + "engine-nullability-assumption", + "provisional assumption", + "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "Original x-nullable declarations; inventory Engine migration risk", + () => + schemas(spec, (s) => { + if (s["x-nullable"] === true) { + delete s["x-nullable"]; + const base = clone(s); + for (const k of Object.keys(s)) delete s[k]; + s.anyOf = [base, { type: "null" }]; + } + }), + ); + stage( + "editorial-metadata", + "editorial completion", + "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "Existing operation summaries, paths, and tags", + () => { + spec.info.description ??= `HTTP reference for ${api.title}.`; + const tags = new Map((spec.tags ?? []).map((t) => [t.name, t])); + for (const [p, m, op] of operations(spec)) { + const key = `${api.id}:${m.toUpperCase()} ${p}`; + if (!op.operationId) { + if (!ids[key]) { + if (verify) throw Error(`Missing recorded operation ID: ${key}`); + ids[key] = + m + + p + .replace(/\{([^}]+)\}/g, " by $1 ") + .replace(/[^a-zA-Z0-9]+/g, " ") + .trim() + .split(" ") + .map((s) => s[0].toUpperCase() + s.slice(1)) + .join(""); + } + op.operationId = ids[key]; + } + if (!op.summary?.trim()) op.summary = `${m.toUpperCase()} ${p}`; + if (!op.description?.trim()) + op.description = op.summary.endsWith(".") + ? op.summary + : op.summary + "."; + if (!op.tags?.length) op.tags = ["Operations"]; + for (const name of op.tags) + if (!tags.has(name)) + tags.set(name, { name, description: `${name} operations.` }); + } + for (const t of tags.values()) { + t.summary ??= t["x-displayName"] ?? t.name; + t.kind = operations(spec).some((x) => x[2].tags?.[0] === t.name) + ? "nav" + : "info"; + t.description ??= `${t.summary} reference.`; + delete t["x-displayName"]; + } + spec.tags = [...tags.values()]; + }, + ); + stage( + "property-required-correction", + "evidence-backed correction", + "Move misplaced boolean property required flags to the parent required array; preserve the declared requiredness.", + "Original property-level required: true declarations", + () => + schemas(spec, (s) => { + for (const [name, prop] of Object.entries(s.properties ?? {})) { + if (prop && typeof prop.required === "boolean") { + if (prop.required) + s.required = [...new Set([...(s.required ?? []), name])]; + delete prop.required; + } + } + }), + ); + stage( + "portable-descriptions", + "editorial completion", + "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "Docker profile S12", + () => + walk(spec, (v) => { + for (const k of ["description", "summary"]) + if (typeof v[k] === "string") + v[k] = v[k] + .replace( + //g, + "[$1](#schema-$1)", + ) + .replace(/\[([^<]+)<\/a>\]/g, "[$2]($1)") + .replace(/([^<]+)<\/a>/g, "[$2]($1)") + .replace(//gi, "\n") + .replace(/<\/?p>/gi, "\n") + .replace( + /<\/?(?:span|div|small|strong|em|b|i)(?:\s[^>]*)?>/gi, + "", + ); + }), + ); + stage( + "empty-description-completion", + "editorial completion", + "Replace descriptions that contained only presentation markup with the existing operation summary.", + "Existing operation summary", + () => { + for (const [p, m, op] of operations(spec)) + if (!op.description?.trim()) op.description = op.summary + "."; + }, + ); + if (api.product === "engine") + stage( + "engine-response-media", + "evidence-backed correction", + "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "Engine API introductory error contract and GET /containers/{id}/archive description", + () => { + for (const [p, m, op] of operations(spec)) + for (const [status, response] of Object.entries(op.responses ?? {})) { + const content = response.content ?? {}; + const entries = Object.values(content); + if ( + Number(status) >= 400 && + entries.length && + entries.every( + (v) => v.schema?.$ref === "#/components/schemas/ErrorResponse", + ) + ) + response.content = { "application/json": entries[0] }; + if ( + p === "/containers/{id}/archive" && + m === "get" && + status === "200" + ) + response.content = { "application/x-tar": {} }; + } + }, + ); + if (api.id === "dvp") + stage( + "dvp-structural-correction", + "evidence-backed correction", + "Use the standard http bearer scheme and move invalid path security to each operation without changing the documented requirement.", + "Existing HubAuth bearer definition and path-level security declarations", + () => { + spec.components.securitySchemes.HubAuth.type = "http"; + for (const item of Object.values(spec.paths)) { + if (own(item, "security")) { + for (const m of methods) + if (item[m] && !own(item[m], "security")) + item[m].security = clone(item.security); + delete item.security; + } + } + if (own(spec, "features.openapi")) { + spec["x-features-openapi"] = spec["features.openapi"]; + delete spec["features.openapi"]; + } + }, + ); + if (api.id === "registry") + stage( + "registry-version-auth-assumption", + "provisional assumption", + "Use protocol version 2 as provisional info.version and declare challenge-acquired bearer access. Confirm anonymous/public access alternatives and version identity with Hub owners.", + "Registry description and content/reference/api/registry/auth.md", + () => { + spec.info.version = "2"; + spec.components ??= {}; + spec.components.securitySchemes ??= {}; + spec.components.securitySchemes.registryToken = { + type: "http", + scheme: "bearer", + description: api.auth, + }; + spec.security = [{ registryToken: [] }]; + }, + ); + if (api.id === "hub") { + stage( + "hub-team-schema-assumption", + "provisional assumption", + "Replace the missing response reference with the existing repository schema, the likely base of a team repository. Product owner must verify returned fields.", + "components.schemas.team_repo and existing repository response definition", + () => { + const s = spec.components.schemas.team_repo; + if (s?.allOf?.[0]?.$ref === "#/components/responses/team_repo") + s.allOf[0].$ref = "#/components/schemas/repository_info"; + }, + ); + stage( + "scim-auth-context", + "evidence-backed correction", + "Declare the separate provisioning token for SCIM operations instead of inheriting Hub credential exchange guidance.", + "content/manuals/security/provisioning/scim/provision-scim.md", + () => { + spec.components.securitySchemes.scimToken = { + type: "http", + scheme: "bearer", + description: + "Use the SCIM provisioning token configured for the organization.", + }; + for (const [p, m, op] of operations(spec)) + if (p.startsWith("/v2/scim/")) op.security = [{ scimToken: [] }]; + }, + ); + } + if (api.id === "governance") + stage( + "governance-token-prose", + "evidence-backed correction", + "Align copied token request field names with the Hub token operation; upstream owner must confirm credential support.", + "Hub POST /v2/auth/token identifier and secret fields", + () => { + const s = spec.components.securitySchemes.bearerAuth; + if (s?.description) + s.description = s.description + .replace(/`password`/g, "`secret`") + .replace(/`username`/g, "`identifier`"); + }, + ); + stage( + "head-response-bodies", + "evidence-backed correction", + "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "RFC 9110 section 9.3.2", + () => { + for (const [p, m, op] of operations(spec)) + if (m === "head") + for (const response of Object.values(op.responses ?? {})) + if (response.content) delete response.content; + }, + ); + stage( + "explicit-root-security", + "editorial completion", + "Make the existing absence of inherited HTTP authentication explicit. Local socket permissions remain connection metadata.", + "OpenAPI root security inheritance; existing source operation policies", + () => { + if (!own(spec, "security")) spec.security = []; + }, + ); + // Explicit hand-reviewed corrections are applied as JSON-pointer patches with their own rationale. + const patchFile = path.join(dir, "corrections.json"); + const corrections = fs.existsSync(patchFile) + ? JSON.parse(fs.readFileSync(patchFile)) + : []; + for (const c of corrections.filter((x) => x.api === api.id)) + stage(c.id, c.classification, c.rationale, c.evidence, () => + apply(spec, [c]), + ); + const converted = YAML.stringify(spec, { lineWidth: 0 }); + const replay = apply(clone(original), ledger); + if (!isDeepStrictEqual(replay, spec)) + throw Error(`Ledger replay failed: ${api.id}`); + output(`converted/${api.id}.yaml`, converted, verify); + const report = { + api: api.id, + source: source, + convertedSha256: digest(converted), + profile: catalog.profileVersion, + changes: ledger, + }; + output(`migrations/${api.id}.json`, report, verify); + let textual; + try { + textual = execFileSync( + "diff", + [ + "-u", + "--label", + `original/${api.id}.yaml`, + "--label", + `converted/${api.id}.yaml`, + path.join(dir, `original/${api.id}.yaml`), + "-", + ], + { input: converted, encoding: "utf8" }, + ); + } catch (e) { + if (e.status !== 1) throw e; + textual = e.stdout; + } + output(`migrations/${api.id}.patch`, textual, verify); + console.log( + `${api.id}: ${operations(spec).length} operations, ${ledger.length} recorded changes`, + ); +} +output("operation-ids.json", ids, verify); diff --git a/hack/api-docs/model.go b/hack/api-docs/model.go new file mode 100644 index 000000000000..4f8387451551 --- /dev/null +++ b/hack/api-docs/model.go @@ -0,0 +1,295 @@ +package main + +import ( + "archive/zip" + "net/url" + "os" + "path/filepath" + "sort" + "strings" +) + +func route(id string) string { return "/api-prototype/" + id + "/" } +func slug(s string) string { return url.PathEscape(s) } +func (d *Document) model() Object { + ops := d.operations() + schemas := []any{} + schemaURLs := Object{} + for _, name := range keys(obj(obj(d.Root["components"])["schemas"])) { + p := "/components/schemas/" + esc(name) + u := route(d.Source.ID) + "schemas/" + slug(name) + "/" + schemaURLs["#"+p] = u + schemas = append(schemas, Object{"name": name, "pointer": p, "url": u, "schema": obj(obj(d.Root["components"])["schemas"])[name]}) + } + for _, op := range ops { + for _, raw := range arr(op["variants"]) { + v := obj(raw) + c := d.Compiled[str(v["pointer"])+"/schema"] + if c != nil { + for _, rawEx := range arr(v["examples"]) { + ex := obj(rawEx) + ex["valid"] = c.Validate(ex["value"]) == nil + } + } + } + } + for _, op := range ops { + op["url"] = route(d.Source.ID) + "operations/" + slug(str(op["id"])) + "/" + op["securitySchemes"] = obj(d.Root["components"])["securitySchemes"] + op["curl"], op["curlNotes"] = curlExample(d.Source, op) + op["references"] = refs(op["raw"], schemaURLs) + op["requestSchema"] = firstRequestSchema(op) + } + assumptions := []any{} + for _, raw := range arr(mustJSON(filepath.Join("prototypes/api-docs/migrations", d.Source.ID+".json"))["changes"]) { + c := obj(raw) + if c["classification"] == "provisional assumption" { + assumptions = append(assumptions, Object{"id": c["id"], "pointer": c["pointer"], "rationale": c["rationale"]}) + } + } + return Object{"id": d.Source.ID, "product": d.Source.Product, "title": d.Source.Title, "version": obj(d.Root["info"])["version"], "description": obj(d.Root["info"])["description"], "url": route(d.Source.ID), "manual": d.Source.Manual, "guides": d.Source.Guides, "connection": d.Source.Connection, "auth": d.Source.Auth, "servers": d.Root["servers"], "securitySchemes": obj(d.Root["components"])["securitySchemes"], "tags": d.Root["tags"], "operations": ops, "schemas": schemas, "schemaURLs": schemaURLs, "digest": d.Digest, "owner": d.Source.Owner, "source": d.Source.Source, "diagnostics": d.Diagnostics, "assumptions": assumptions, "schemaCount": d.SchemaCount, "exampleCount": d.ExampleCount} +} +func mustJSON(p string) Object { v, _ := readJSON(p); return obj(v) } +func refs(v any, urls Object) []any { + found := map[string]bool{} + walk(v, "", func(n Object, _ string) { + if s := str(n["$ref"]); s != "" { + found[s] = true + } + }) + out := []any{} + names := []string{} + for n := range found { + names = append(names, n) + } + sort.Strings(names) + for _, n := range names { + out = append(out, Object{"ref": n, "url": urls[n]}) + } + return out +} +func firstRequestSchema(op Object) any { + for _, v := range arr(op["variants"]) { + m := obj(v) + if m["direction"] == "Request" { + return m["schema"] + } + } + return nil +} +func shell(s string) string { return "'" + strings.ReplaceAll(s, "'", "'\"'\"'") + "'" } +func scalar(v any) string { + if s, ok := v.(string); ok { + return s + } + return strings.TrimSpace(string(encoded(v))) +} +func parameterValue(p Object) (any, bool) { + if v, ok := p["example"]; ok { + return v, true + } + s := obj(p["schema"]) + if v, ok := s["example"]; ok { + return v, true + } + if a := arr(s["examples"]); len(a) > 0 { + return a[0], true + } + return nil, false +} +func curlExample(src Source, op Object) (string, []string) { + notes := []string{} + args := []string{"curl"} + if op["method"] == "HEAD" { + args = append(args, "--head") + } else { + args = append(args, "--request "+str(op["method"])) + } + server := "" + if a := arr(op["servers"]); len(a) > 0 { + m := obj(a[0]) + server = str(m["url"]) + for name, v := range obj(m["variables"]) { + server = strings.ReplaceAll(server, "{"+name+"}", str(obj(v)["default"])) + } + } + if src.Connection == "unix" { + args = append(args, "--unix-socket \"${DOCKER_SOCKET:-/var/run/docker.sock}\"") + if !strings.HasPrefix(server, "/") { + server = "/v" + strings.TrimPrefix(src.ID, "engine-") + } + server = "http://localhost" + server + } + if server == "" { + server = "https://" + notes = append(notes, "Set the API server address.") + } + target := strings.TrimRight(server, "/") + str(op["path"]) + query := []string{} + for _, raw := range arr(op["parameters"]) { + p := obj(raw) + name := str(p["name"]) + v, has := parameterValue(p) + required, _ := p["required"].(bool) + if !has && !required { + continue + } + value := "<" + strings.ToUpper(name) + ">" + if has { + value = scalar(v) + } + location := str(p["in"]) + if location == "path" { + part := value + if has { + part = url.PathEscape(value) + } + target = strings.ReplaceAll(target, "{"+name+"}", part) + } else if location == "header" { + args = append(args, "--header "+shell(name+": "+value)) + } else if location == "query" { + style := str(p["style"]) + if style == "" { + style = "form" + } + explode := true + if x, ok := p["explode"].(bool); ok { + explode = x + } + if list, ok := v.([]any); ok && style == "form" { + parts := []string{} + for _, x := range list { + parts = append(parts, scalar(x)) + } + if explode { + for _, x := range parts { + query = append(query, url.QueryEscape(name)+"="+url.QueryEscape(x)) + } + } else { + query = append(query, url.QueryEscape(name)+"="+url.QueryEscape(strings.Join(parts, ","))) + } + } else if len(obj(v)) > 0 || style != "form" { + notes = append(notes, "Serialize "+name+" using its documented "+style+" rules; this parameter is not generated.") + } else { + query = append(query, url.QueryEscape(name)+"="+url.QueryEscape(value)) + } + } else { + notes = append(notes, "Supply "+name+" using its documented "+location+" encoding.") + } + } + if len(query) > 0 { + target += "?" + strings.Join(query, "&") + } + security := arr(op["security"]) + if len(security) > 0 { + first := obj(security[0]) + for _, scheme := range keys(first) { + definition := obj(obj(op["securitySchemes"])[scheme]) + switch { + case definition["type"] == "http" && definition["scheme"] == "bearer": + token := "TOKEN" + if scheme == "scimToken" { + token = "SCIM_TOKEN" + } + if scheme == "registryToken" { + token = "REGISTRY_TOKEN" + } + args = append(args, "--header \"Authorization: Bearer ${"+token+"}\"") + case definition["type"] == "apiKey" && definition["in"] == "header": + args = append(args, "--header \""+str(definition["name"])+": ${API_KEY}\"") + default: + notes = append(notes, "Configure authentication scheme "+scheme+" using its documented transport or credential format.") + } + } + if len(security) > 1 { + notes = append(notes, "This example uses the first authentication alternative. Review the complete requirements.") + } + } + for _, raw := range arr(op["variants"]) { + v := obj(raw) + if v["direction"] != "Request" { + continue + } + media := str(v["media"]) + if media == "" { + continue + } + args = append(args, "--header "+shell("Content-Type: "+media)) + examples := arr(v["examples"]) + if len(examples) > 0 && obj(examples[0])["valid"] != false && strings.Contains(media, "json") { + args = append(args, "--data-raw "+shell(strings.TrimSpace(string(encoded(obj(examples[0])["value"]))))) + } else { + args = append(args, "--data-binary @request-body") + notes = append(notes, "Prepare request-body using the selected media type and schema.") + } + break + } + args = append(args, shell(target)) + return strings.Join(args, " \\\n "), notes +} +func publishSources(root string, sources []Source) error { + out := filepath.Join(root, "tmp/api-prototype/static/api-prototype/sources") + for _, s := range sources { + dir := filepath.Join(out, s.ID) + if e := os.MkdirAll(dir, 0755); e != nil { + return e + } + f, e := os.Create(filepath.Join(dir, "source.zip")) + if e != nil { + return e + } + z := zip.NewWriter(f) + for _, pair := range [][2]string{{"converted/" + s.ID + ".yaml", "openapi.yaml"}, {"original/" + s.ID + ".yaml", "original.yaml"}, {"migrations/" + s.ID + ".json", "migration.json"}, {"migrations/" + s.ID + ".patch", "migration.patch"}, {"source-lock.json", "source-lock.json"}, {"exceptions.json", "exceptions.json"}} { + b, e := os.ReadFile(filepath.Join(root, "prototypes/api-docs", pair[0])) + if e != nil { + return e + } + if e = os.WriteFile(filepath.Join(dir, pair[1]), b, 0644); e != nil { + return e + } + w, e := z.Create(pair[1]) + if e != nil { + return e + } + if _, e = w.Write(b); e != nil { + return e + } + } + if e = z.Close(); e != nil { + return e + } + if e = f.Close(); e != nil { + return e + } + } + return nil +} + +// Examples are annotations: retrieve them without flattening schema constraints. +func (d *Document) mediaExamples(v Object) []any { + out := exampleList(v) + if len(out) > 0 { + return out + } + s := v["schema"] + seen := map[string]bool{} + for s != nil { + n := obj(s) + if x, ok := n["example"]; ok { + return []any{Object{"name": "Schema example", "value": x}} + } + if xs := arr(n["examples"]); len(xs) > 0 { + for _, x := range xs { + out = append(out, Object{"name": "Schema example", "value": x}) + } + return out + } + ref := str(n["$ref"]) + if ref == "" || seen[ref] { + break + } + seen[ref] = true + s = d.resolve(n) + } + return out +} diff --git a/hack/api-docs/package-lock.json b/hack/api-docs/package-lock.json new file mode 100644 index 000000000000..e36275b52af7 --- /dev/null +++ b/hack/api-docs/package-lock.json @@ -0,0 +1,447 @@ +{ + "name": "docker-api-docs-migration", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "docker-api-docs-migration", + "dependencies": { + "swagger2openapi": "7.0.8", + "yaml": "2.8.1" + } + }, + "node_modules/@exodus/schemasafe": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", + "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/http2-client": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", + "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-h2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", + "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", + "dependencies": { + "http2-client": "^1.2.5" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-readfiles": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", + "integrity": "sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==", + "dependencies": { + "es6-promise": "^3.2.1" + } + }, + "node_modules/oas-kit-common": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", + "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, + "node_modules/oas-linter": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", + "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", + "dependencies": { + "@exodus/schemasafe": "^1.0.0-rc.2", + "should": "^13.2.1", + "yaml": "^1.10.0" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-linter/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/oas-resolver": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", + "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", + "dependencies": { + "node-fetch-h2": "^2.3.0", + "oas-kit-common": "^1.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "bin": { + "resolve": "resolve.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-resolver/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/oas-schema-walker": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", + "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==", + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-validator": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", + "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", + "dependencies": { + "call-me-maybe": "^1.0.1", + "oas-kit-common": "^1.0.8", + "oas-linter": "^3.2.2", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "reftools": "^1.1.9", + "should": "^13.2.1", + "yaml": "^1.10.0" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-validator/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/reftools": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", + "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==", + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dependencies": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "node_modules/should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dependencies": { + "should-type": "^1.4.0" + } + }, + "node_modules/should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "node_modules/should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==" + }, + "node_modules/should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "node_modules/should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/swagger2openapi": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", + "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", + "dependencies": { + "call-me-maybe": "^1.0.1", + "node-fetch": "^2.6.1", + "node-fetch-h2": "^2.3.0", + "node-readfiles": "^0.2.0", + "oas-kit-common": "^1.0.8", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "oas-validator": "^5.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "bin": { + "boast": "boast.js", + "oas-validate": "oas-validate.js", + "swagger2openapi": "swagger2openapi.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/swagger2openapi/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/hack/api-docs/package.json b/hack/api-docs/package.json new file mode 100644 index 000000000000..aaf3dfd0b3e2 --- /dev/null +++ b/hack/api-docs/package.json @@ -0,0 +1,9 @@ +{ + "name": "docker-api-docs-migration", + "private": true, + "type": "module", + "dependencies": { + "swagger2openapi": "7.0.8", + "yaml": "2.8.1" + } +} diff --git a/hack/api-docs/pagefind.Dockerfile b/hack/api-docs/pagefind.Dockerfile new file mode 100644 index 000000000000..188a35e7fb35 --- /dev/null +++ b/hack/api-docs/pagefind.Dockerfile @@ -0,0 +1,7 @@ +# Rebuild the existing search tool for Linux hosts with 16 KB or 64 KB pages. +FROM rust:1.94-alpine3.23 AS build +RUN apk add --no-cache build-base +ENV JEMALLOC_SYS_WITH_LG_PAGE=16 +RUN cargo install pagefind --version 1.5.2 --locked --root /out +FROM scratch +COPY --from=build /out/bin/pagefind /pagefind diff --git a/hack/api-docs/report.mjs b/hack/api-docs/report.mjs new file mode 100644 index 000000000000..6c26842cbf2d --- /dev/null +++ b/hack/api-docs/report.mjs @@ -0,0 +1,178 @@ +import fs from "node:fs"; +import path from "node:path"; +import { isDeepStrictEqual } from "node:util"; +import YAML from "yaml"; +const root = path.resolve(import.meta.dirname, "../.."); +const dir = path.join(root, "prototypes/api-docs"); +const out = path.join(root, "tmp/api-prototype"); +const read = (p) => JSON.parse(fs.readFileSync(p)); +const model = read(path.join(out, "data/api-prototype.json")); +const validation = read(path.join(out, "validation.json")); +const methods = [ + "get", + "put", + "post", + "delete", + "options", + "head", + "patch", + "trace", + "query", +]; +function operations(s) { + return Object.entries(s.paths).flatMap(([p, item]) => + methods + .filter((m) => item[m]) + .map((m) => ({ path: p, method: m.toUpperCase(), raw: item[m] })), + ); +} +function resolve(s, v) { + const seen = new Set(); + while (v?.$ref) { + if (seen.has(v.$ref)) throw Error("Reference object cycle"); + seen.add(v.$ref); + if (!v.$ref.startsWith("#/")) + throw Error("Unexpected external reference in the publication corpus"); + v = v.$ref + .slice(2) + .split("/") + .map((x) => x.replaceAll("~1", "/").replaceAll("~0", "~")) + .reduce((o, k) => o[k], s); + } + return v; +} +const rows = []; +for (const api of model.apis) { + const spec = YAML.parse( + fs.readFileSync(path.join(dir, `converted/${api.id}.yaml`), "utf8"), + ); + const original = YAML.parse( + fs.readFileSync(path.join(dir, `original/${api.id}.yaml`), "utf8"), + ); + const ops = operations(spec), + sourceOps = operations(original); + if ( + !isDeepStrictEqual( + sourceOps.map((o) => o.method + " " + o.path).sort(), + ops.map((o) => o.method + " " + o.path).sort(), + ) + ) + throw Error(`Changed operation set: ${api.id}`); + if (ops.length !== api.operations.length) + throw Error(`Missing operations: ${api.id}`); + let variants = 0, + headers = 0, + references = 0; + for (const op of ops) { + const prepared = api.operations.find( + (o) => o.path === op.path && o.method === op.method, + ); + if (!prepared || !isDeepStrictEqual(prepared.raw, op.raw)) + throw Error(`Operation source loss: ${api.id} ${op.path}`); + const expected = []; + const add = (direction, status, value) => { + const v = resolve(spec, value); + for (const [media, body] of Object.entries(v.content ?? { "": {} })) + expected.push({ + direction, + status, + media, + body, + headers: v.headers ?? null, + }); + }; + if (op.raw.requestBody) add("Request", "", op.raw.requestBody); + for (const [status, v] of Object.entries(op.raw.responses ?? {})) + add("Response", status, v); + if (expected.length !== prepared.variants.length) + throw Error(`Variant count mismatch: ${api.id} ${op.path}`); + for (const v of expected) { + const actual = prepared.variants.find( + (x) => + x.direction === v.direction && + x.status === v.status && + x.media === v.media, + ); + if (!actual) throw Error("Missing media variant"); + for (const k of ["schema", "itemSchema", "encoding"]) + if (!isDeepStrictEqual(v.body[k], actual[k])) + throw Error(`Lost ${k}: ${api.id} ${op.path}`); + if (!isDeepStrictEqual(v.headers, actual.headers ?? null)) + throw Error("Lost response headers"); + headers += Object.keys(v.headers ?? {}).length; + variants++; + } + references += (JSON.stringify(op.raw).match(/"\$ref":/g) ?? []).length; + } + for (const [name, schema] of Object.entries(spec.components?.schemas ?? {})) { + const actual = api.schemas.find((s) => s.name === name); + if (!actual || !isDeepStrictEqual(schema, actual.schema)) + throw Error(`Lost schema: ${api.id} ${name}`); + } + const ledger = read(path.join(dir, `migrations/${api.id}.json`)); + const classes = {}; + for (const c of ledger.changes) + classes[c.classification] = (classes[c.classification] ?? 0) + 1; + const diagnostics = validation.find((r) => r.api === api.id); + rows.push({ + api: api.id, + operations: ops.length, + variants, + headers, + references, + namedSchemas: api.schemas.length, + schemaRoots: diagnostics.schemas, + examples: diagnostics.examples, + exceptions: diagnostics.diagnostics?.length ?? 0, + changes: ledger.changes.length, + classifications: classes, + coverage: "pass", + }); +} +const engineA = model.apis.find((a) => a.id === "engine-1.55"), + engineB = model.apis.find((a) => a.id === "engine-1.56"); +const effective = []; +for (const op of engineB.operations) { + const prior = engineA.operations.find((x) => x.id === op.id); + if (!prior) { + effective.push({ operation: op.id, change: "added" }); + continue; + } + for (const field of ["security", "servers", "parameters"]) + if (!isDeepStrictEqual(prior[field], op[field])) + effective.push({ + operation: op.id, + field, + before: prior[field], + after: op[field], + }); +} +fs.mkdirSync(path.join(out, "reports"), { recursive: true }); +fs.writeFileSync( + path.join(out, "reports/coverage.json"), + JSON.stringify( + { + modelVersion: model.modelVersion, + apis: rows, + engineEffectiveChanges: effective, + }, + null, + 2, + ) + "\n", +); +const md = [ + "# Prototype migration report", + "", + "Generated from checked-in source snapshots, converted specifications, and the presentation model.", + "", + "| API | Operations | Media/body variants | Schemas | Examples checked | Exceptions | Ledger changes |", + "| --- | ---: | ---: | ---: | ---: | ---: | ---: |", + ...rows.map( + (r) => + `| ${r.api} | ${r.operations} | ${r.variants} | ${r.namedSchemas} | ${r.examples} | ${r.exceptions} | ${r.changes} |`, + ), + "", + "Every operation, response variant, header definition, and named schema matches the converted source. Original and converted method/path sets match. See the source ledger for intentional contract corrections.", +]; +fs.writeFileSync(path.join(out, "reports/summary.md"), md.join("\n") + "\n"); +console.log("Source-to-model coverage passed for all six specifications."); diff --git a/hack/api-docs/run.sh b/hack/api-docs/run.sh new file mode 100755 index 000000000000..b69b08b15b9f --- /dev/null +++ b/hack/api-docs/run.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +set -euo pipefail +ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd) +cd "$ROOT" +BIN="$ROOT/tmp/api-prototype/bin" +mkdir -p "$BIN" "$ROOT/tmp/api-prototype/reports" +export GOWORK=off +bootstrap() { + npm --prefix hack/api-docs ci --ignore-scripts --no-audit --no-fund + (cd hack/api-docs && go build -o "$BIN/api-docs" .) + if [[ ! -x "$BIN/vacuum" ]] || ! "$BIN/vacuum" version 2>&1 | grep -qE '0\.30\.3'; then + GOBIN="$BIN" go install github.com/daveshanley/vacuum@v0.30.3 + fi + if [[ ! -x "$BIN/oasdiff" ]] || ! "$BIN/oasdiff" --version 2>&1 | grep -qE '1\.31\.0'; then + GOBIN="$BIN" go install github.com/oasdiff/oasdiff@v1.31.0 + fi +} +policy() { + for api in governance hub dvp registry engine-1.56 engine-1.55; do + if ! "$BIN/vacuum" lint --no-update-check --remote=false --ruleset hack/api-docs/vacuum.yaml --fail-severity error --min-score 0 --no-banner --no-style --details "prototypes/api-docs/converted/$api.yaml" > "tmp/api-prototype/reports/$api-vacuum.txt" 2>&1; then + cat "tmp/api-prototype/reports/$api-vacuum.txt"; return 1 + fi + done +} +index_site() { + if [[ -n "${PAGEFIND_BIN:-}" ]]; then + "$PAGEFIND_BIN" --site tmp/api-prototype/site --output-path tmp/api-prototype/site/pagefind + elif [[ "$(uname -s)" == Linux && "$(getconf PAGESIZE)" -gt 4096 ]]; then + if [[ ! -x tmp/api-prototype/pagefind-portable/pagefind ]]; then + mkdir -p tmp/api-prototype/empty + docker buildx build --file hack/api-docs/pagefind.Dockerfile --output type=local,dest=tmp/api-prototype/pagefind-portable tmp/api-prototype/empty + fi + tmp/api-prototype/pagefind-portable/pagefind --site tmp/api-prototype/site --output-path tmp/api-prototype/site/pagefind + else + npx --yes pagefind@1.5.2 --site tmp/api-prototype/site --output-path tmp/api-prototype/site/pagefind + fi +} +prepare() { + bootstrap + node hack/api-docs/migrate.mjs verify + policy + "$BIN/api-docs" generate "$ROOT" --preview + "$BIN/oasdiff" diff prototypes/api-docs/converted/engine-1.55.yaml prototypes/api-docs/converted/engine-1.56.yaml --format json > tmp/api-prototype/reports/engine-diff.json + "$BIN/oasdiff" changelog prototypes/api-docs/converted/engine-1.55.yaml prototypes/api-docs/converted/engine-1.56.yaml --format markdown > tmp/api-prototype/reports/engine-changelog.md + for api in hub dvp registry governance engine-1.55 engine-1.56; do + input="prototypes/api-docs/original/$api.yaml" + [[ "$api" != engine-* ]] || input="prototypes/api-docs/migrations/$api.intermediate.json" + # Original Registry lacks info.version and original Hub has an unresolved ref. + # Preserve tool failures as reports; the replay ledger remains mandatory. + if ! "$BIN/oasdiff" diff "$input" "prototypes/api-docs/converted/$api.yaml" --format json > "tmp/api-prototype/reports/$api-migration-diff.json" 2> "tmp/api-prototype/reports/$api-migration-diff.stderr"; then + printf '%s\n' 'Comparison unavailable; inspect stderr and the complete replay ledger.' > "tmp/api-prototype/reports/$api-migration-diff.status" + fi + done + node hack/api-docs/report.mjs +} +case "${1:-build}" in + bootstrap) bootstrap ;; + verify) node hack/api-docs/migrate.mjs verify ;; + convert) node hack/api-docs/migrate.mjs convert ;; + check) bootstrap; node hack/api-docs/migrate.mjs verify; policy; "$BIN/api-docs" check "$ROOT" ;; + generate) prepare ;; + report) node hack/api-docs/report.mjs ;; + test) (cd hack/api-docs && go test ./...); node hack/api-docs/migrate.mjs verify ;; + build|serve) + prepare + [[ -d node_modules/alpinejs ]] || npm ci --no-audit --no-fund + started=$SECONDS + rm -rf "$ROOT/tmp/api-prototype/site" + hugo --config hugo.yaml,prototypes/api-docs/hugo.yaml --destination tmp/api-prototype/site --baseURL "${API_PROTOTYPE_URL:-http://localhost:1314}" --environment api-prototype + node hack/api-docs/flatten-preview.mjs + index_site + node hack/api-docs/verify-output.mjs + printf '{"buildSeconds":%s}\n' "$((SECONDS-started))" > tmp/api-prototype/timing.json + if [[ "${1:-build}" == serve ]]; then + exec python3 -m http.server "${API_PROTOTYPE_PORT:-1314}" --bind 127.0.0.1 --directory tmp/api-prototype/site + fi + ;; + *) printf '%s\n' 'Usage: run.sh bootstrap|verify|convert|check|generate|report|test|build|serve' >&2; exit 2 ;; +esac diff --git a/hack/api-docs/testdata/duplicate-key.yaml b/hack/api-docs/testdata/duplicate-key.yaml new file mode 100644 index 000000000000..739c796ab82b --- /dev/null +++ b/hack/api-docs/testdata/duplicate-key.yaml @@ -0,0 +1,102 @@ +openapi: 3.2.0 +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +info: + title: Docker documentation tooling fixture + version: '1' + version: '2' + description: Component capability fixture. +servers: +- url: https://api.example.test/v1 +security: +- bearerAuth: [] +tags: +- name: operations + summary: Operations + kind: nav + description: Fixture operations. +paths: + /events: + get: + operationId: listEvents + tags: + - operations + summary: List events + responses: + '200': + description: Event stream + content: + text/event-stream: + itemSchema: + $ref: ./schemas/event.yaml + /search: + parameters: + - name: limit + in: query + schema: + type: integer + example: 10 + servers: + - url: https://search.example.test + query: + operationId: querySearch + tags: + - operations + summary: Search + parameters: + - name: limit + in: query + schema: + type: integer + example: 0 + responses: + '200': + description: Search result + content: + application/json: + schema: true + /public: + get: + operationId: getPublic + tags: + - operations + summary: Public result + security: [] + responses: + '200': + description: A flag + content: + application/json: + schema: + type: boolean + example: false + /items: + get: + operationId: getItems + tags: + - operations + summary: Get items + responses: + '200': + description: Item + content: + application/json: + schema: + $ref: '#/components/schemas/Item' + description: Description beside a reference. +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + schemas: + Item: + type: object + required: + - id + properties: + id: + type: integer + next: + anyOf: + - $ref: '#/components/schemas/Item' + - type: 'null' diff --git a/hack/api-docs/testdata/invalid-example.yaml b/hack/api-docs/testdata/invalid-example.yaml new file mode 100644 index 000000000000..37015deb1a44 --- /dev/null +++ b/hack/api-docs/testdata/invalid-example.yaml @@ -0,0 +1,101 @@ +openapi: 3.2.0 +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +info: + title: Docker documentation tooling fixture + version: '1' + description: Component capability fixture. +servers: +- url: https://api.example.test/v1 +security: +- bearerAuth: [] +tags: +- name: operations + summary: Operations + kind: nav + description: Fixture operations. +paths: + /events: + get: + operationId: listEvents + tags: + - operations + summary: List events + responses: + '200': + description: Event stream + content: + text/event-stream: + itemSchema: + $ref: ./schemas/event.yaml + /search: + parameters: + - name: limit + in: query + schema: + type: integer + example: 10 + servers: + - url: https://search.example.test + query: + operationId: querySearch + tags: + - operations + summary: Search + parameters: + - name: limit + in: query + schema: + type: integer + example: 0 + responses: + '200': + description: Search result + content: + application/json: + schema: true + /public: + get: + operationId: getPublic + tags: + - operations + summary: Public result + security: [] + responses: + '200': + description: A flag + content: + application/json: + schema: + type: boolean + example: not-a-boolean + /items: + get: + operationId: getItems + tags: + - operations + summary: Get items + responses: + '200': + description: Item + content: + application/json: + schema: + $ref: '#/components/schemas/Item' + description: Description beside a reference. +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + schemas: + Item: + type: object + required: + - id + properties: + id: + type: integer + next: + anyOf: + - $ref: '#/components/schemas/Item' + - type: 'null' diff --git a/hack/api-docs/testdata/invalid-info.yaml b/hack/api-docs/testdata/invalid-info.yaml new file mode 100644 index 000000000000..3280debcaee6 --- /dev/null +++ b/hack/api-docs/testdata/invalid-info.yaml @@ -0,0 +1,100 @@ +openapi: 3.2.0 +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +info: + title: Docker documentation tooling fixture + description: Component capability fixture. +servers: +- url: https://api.example.test/v1 +security: +- bearerAuth: [] +tags: +- name: operations + summary: Operations + kind: nav + description: Fixture operations. +paths: + /events: + get: + operationId: listEvents + tags: + - operations + summary: List events + responses: + '200': + description: Event stream + content: + text/event-stream: + itemSchema: + $ref: ./schemas/event.yaml + /search: + parameters: + - name: limit + in: query + schema: + type: integer + example: 10 + servers: + - url: https://search.example.test + query: + operationId: querySearch + tags: + - operations + summary: Search + parameters: + - name: limit + in: query + schema: + type: integer + example: 0 + responses: + '200': + description: Search result + content: + application/json: + schema: true + /public: + get: + operationId: getPublic + tags: + - operations + summary: Public result + security: [] + responses: + '200': + description: A flag + content: + application/json: + schema: + type: boolean + example: false + /items: + get: + operationId: getItems + tags: + - operations + summary: Get items + responses: + '200': + description: Item + content: + application/json: + schema: + $ref: '#/components/schemas/Item' + description: Description beside a reference. +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + schemas: + Item: + type: object + required: + - id + properties: + id: + type: integer + next: + anyOf: + - $ref: '#/components/schemas/Item' + - type: 'null' diff --git a/hack/api-docs/testdata/invalid-item-type.yaml b/hack/api-docs/testdata/invalid-item-type.yaml new file mode 100644 index 000000000000..524584656267 --- /dev/null +++ b/hack/api-docs/testdata/invalid-item-type.yaml @@ -0,0 +1,101 @@ +openapi: 3.2.0 +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +info: + title: Docker documentation tooling fixture + version: '1' + description: Component capability fixture. +servers: +- url: https://api.example.test/v1 +security: +- bearerAuth: [] +tags: +- name: operations + summary: Operations + kind: nav + description: Fixture operations. +paths: + /events: + get: + operationId: listEvents + tags: + - operations + summary: List events + responses: + '200': + description: Event stream + content: + text/event-stream: + itemSchema: + type: definitely-invalid + /search: + parameters: + - name: limit + in: query + schema: + type: integer + example: 10 + servers: + - url: https://search.example.test + query: + operationId: querySearch + tags: + - operations + summary: Search + parameters: + - name: limit + in: query + schema: + type: integer + example: 0 + responses: + '200': + description: Search result + content: + application/json: + schema: true + /public: + get: + operationId: getPublic + tags: + - operations + summary: Public result + security: [] + responses: + '200': + description: A flag + content: + application/json: + schema: + type: boolean + example: false + /items: + get: + operationId: getItems + tags: + - operations + summary: Get items + responses: + '200': + description: Item + content: + application/json: + schema: + $ref: '#/components/schemas/Item' + description: Description beside a reference. +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + schemas: + Item: + type: object + required: + - id + properties: + id: + type: integer + next: + anyOf: + - $ref: '#/components/schemas/Item' + - type: 'null' diff --git a/hack/api-docs/testdata/invalid-stream-ref.yaml b/hack/api-docs/testdata/invalid-stream-ref.yaml new file mode 100644 index 000000000000..7d4edd2052bb --- /dev/null +++ b/hack/api-docs/testdata/invalid-stream-ref.yaml @@ -0,0 +1,101 @@ +openapi: 3.2.0 +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +info: + title: Docker documentation tooling fixture + version: '1' + description: Component capability fixture. +servers: +- url: https://api.example.test/v1 +security: +- bearerAuth: [] +tags: +- name: operations + summary: Operations + kind: nav + description: Fixture operations. +paths: + /events: + get: + operationId: listEvents + tags: + - operations + summary: List events + responses: + '200': + description: Event stream + content: + text/event-stream: + itemSchema: + $ref: ./schemas/missing.yaml + /search: + parameters: + - name: limit + in: query + schema: + type: integer + example: 10 + servers: + - url: https://search.example.test + query: + operationId: querySearch + tags: + - operations + summary: Search + parameters: + - name: limit + in: query + schema: + type: integer + example: 0 + responses: + '200': + description: Search result + content: + application/json: + schema: true + /public: + get: + operationId: getPublic + tags: + - operations + summary: Public result + security: [] + responses: + '200': + description: A flag + content: + application/json: + schema: + type: boolean + example: false + /items: + get: + operationId: getItems + tags: + - operations + summary: Get items + responses: + '200': + description: Item + content: + application/json: + schema: + $ref: '#/components/schemas/Item' + description: Description beside a reference. +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + schemas: + Item: + type: object + required: + - id + properties: + id: + type: integer + next: + anyOf: + - $ref: '#/components/schemas/Item' + - type: 'null' diff --git a/hack/api-docs/testdata/profile-missing-id.yaml b/hack/api-docs/testdata/profile-missing-id.yaml new file mode 100644 index 000000000000..99fba5ceccbd --- /dev/null +++ b/hack/api-docs/testdata/profile-missing-id.yaml @@ -0,0 +1,100 @@ +openapi: 3.2.0 +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +info: + title: Docker documentation tooling fixture + version: '1' + description: Component capability fixture. +servers: +- url: https://api.example.test/v1 +security: +- bearerAuth: [] +tags: +- name: operations + summary: Operations + kind: nav + description: Fixture operations. +paths: + /events: + get: + operationId: listEvents + tags: + - operations + summary: List events + responses: + '200': + description: Event stream + content: + text/event-stream: + itemSchema: + $ref: ./schemas/event.yaml + /search: + parameters: + - name: limit + in: query + schema: + type: integer + example: 10 + servers: + - url: https://search.example.test + query: + operationId: querySearch + tags: + - operations + summary: Search + parameters: + - name: limit + in: query + schema: + type: integer + example: 0 + responses: + '200': + description: Search result + content: + application/json: + schema: true + /public: + get: + tags: + - operations + summary: Public result + security: [] + responses: + '200': + description: A flag + content: + application/json: + schema: + type: boolean + example: false + /items: + get: + operationId: getItems + tags: + - operations + summary: Get items + responses: + '200': + description: Item + content: + application/json: + schema: + $ref: '#/components/schemas/Item' + description: Description beside a reference. +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + schemas: + Item: + type: object + required: + - id + properties: + id: + type: integer + next: + anyOf: + - $ref: '#/components/schemas/Item' + - type: 'null' diff --git a/hack/api-docs/testdata/schemas/event.yaml b/hack/api-docs/testdata/schemas/event.yaml new file mode 100644 index 000000000000..b158529a5656 --- /dev/null +++ b/hack/api-docs/testdata/schemas/event.yaml @@ -0,0 +1,9 @@ +type: object +required: +- event +- data +properties: + event: + type: string + data: + type: string diff --git a/hack/api-docs/testdata/valid.yaml b/hack/api-docs/testdata/valid.yaml new file mode 100644 index 000000000000..5863f4b25c20 --- /dev/null +++ b/hack/api-docs/testdata/valid.yaml @@ -0,0 +1,101 @@ +openapi: 3.2.0 +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +info: + title: Docker documentation tooling fixture + version: '1' + description: Component capability fixture. +servers: +- url: https://api.example.test/v1 +security: +- bearerAuth: [] +tags: +- name: operations + summary: Operations + kind: nav + description: Fixture operations. +paths: + /events: + get: + operationId: listEvents + tags: + - operations + summary: List events + responses: + '200': + description: Event stream + content: + text/event-stream: + itemSchema: + $ref: ./schemas/event.yaml + /search: + parameters: + - name: limit + in: query + schema: + type: integer + example: 10 + servers: + - url: https://search.example.test + query: + operationId: querySearch + tags: + - operations + summary: Search + parameters: + - name: limit + in: query + schema: + type: integer + example: 0 + responses: + '200': + description: Search result + content: + application/json: + schema: true + /public: + get: + operationId: getPublic + tags: + - operations + summary: Public result + security: [] + responses: + '200': + description: A flag + content: + application/json: + schema: + type: boolean + example: false + /items: + get: + operationId: getItems + tags: + - operations + summary: Get items + responses: + '200': + description: Item + content: + application/json: + schema: + $ref: '#/components/schemas/Item' + description: Description beside a reference. +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + schemas: + Item: + type: object + required: + - id + properties: + id: + type: integer + next: + anyOf: + - $ref: '#/components/schemas/Item' + - type: 'null' diff --git a/hack/api-docs/vacuum.yaml b/hack/api-docs/vacuum.yaml new file mode 100644 index 000000000000..e3fdaa5d5a43 --- /dev/null +++ b/hack/api-docs/vacuum.yaml @@ -0,0 +1,24 @@ +# Structural and dialect validation run against locked OAI schemas in the Go command. +# Vacuum supplies independently named Docker policy rules with source locations. +rules: + docker-operation-id: + description: Every operation needs a stable operation ID. + severity: error + given: $.paths[*][get,put,post,delete,options,head,patch,trace,query] + then: + field: operationId + function: truthy + docker-info-description: + description: Every API needs an overview. + severity: error + given: $.info + then: + field: description + function: truthy + docker-info-version: + description: Every API needs a version identity. + severity: error + given: $.info + then: + field: version + function: truthy diff --git a/hack/api-docs/verify-output.mjs b/hack/api-docs/verify-output.mjs new file mode 100644 index 000000000000..3f8b1f4da9c9 --- /dev/null +++ b/hack/api-docs/verify-output.mjs @@ -0,0 +1,127 @@ +import fs from "node:fs"; +import path from "node:path"; +import { isDeepStrictEqual } from "node:util"; +const root = path.resolve(import.meta.dirname, "../.."); +const base = path.join(root, "tmp/api-prototype/site"); +const data = JSON.parse( + fs.readFileSync(path.join(root, "tmp/api-prototype/data/api-prototype.json")), +); +const decode = (s) => + s + .replace(/&#(\d+);/g, (_, n) => String.fromCodePoint(Number(n))) + .replaceAll("&", "&") + .replaceAll(""", '"') + .replaceAll("'", "'") + .replaceAll("<", "<") + .replaceAll(">", ">"); +let count = 0; +const problems = []; +function check(url) { + const htmlPath = path.join(base, url, "index.html"); + const mdPath = path.join(base, url.replace(/\/$/, "")) + ".md"; + if (!fs.existsSync(htmlPath) || !fs.existsSync(mdPath)) { + problems.push(`Missing HTML/Markdown: ${url}`); + return ["", ""]; + } + const html = fs.readFileSync(htmlPath, "utf8"), + md = fs.readFileSync(mdPath, "utf8"); + count++; + return [decode(html), md]; +} +check("/api-prototype/"); +for (const api of data.apis) { + check(api.url); + for (const op of api.operations) { + const [html, md] = check(op.url); + for (const variant of op.variants) + if ( + !html.includes(`data-api-variant="${variant.pointer}"`) || + !md.includes(`### ${variant.direction} ${variant.status}`) + ) + problems.push(`Missing variant: ${op.url} ${variant.pointer}`); + for (const p of op.parameters) + if ( + !html.includes(`data-api-parameter="${p.name}"`) || + !md.includes(`### ${p.name}`) + ) + problems.push(`Missing parameter: ${op.url} ${p.name}`); + if (!html.includes(op.path) || !md.includes(op.method + " " + op.path)) + problems.push(`Missing operation signature: ${op.url}`); + if (!md.includes(op.curl)) + problems.push(`Request example mismatch: ${op.url}`); + } + for (const schema of api.schemas) { + const [html, md] = check(schema.url); + if ( + ![...md.matchAll(/```json\n([\s\S]*?)\n```/g)].some((m) => { + try { + return isDeepStrictEqual(JSON.parse(m[1]), schema.schema); + } catch { + return false; + } + }) + ) + problems.push(`Incomplete Markdown schema: ${schema.url}`); + if (!html.includes(schema.name)) + problems.push(`Missing schema heading: ${schema.url}`); + } +} +// Check preview-owned links in every generated preview page, including copied specification prose. +function files(dir) { + return fs + .readdirSync(dir, { withFileTypes: true }) + .flatMap((e) => + e.isDirectory() + ? files(path.join(dir, e.name)) + : [path.join(dir, e.name)], + ); +} +for (const file of files(path.join(base, "api-prototype")).filter((p) => + p.endsWith(".html"), +)) { + const html = fs.readFileSync(file, "utf8"); + for (const m of html.matchAll(/href="([^"]+)"/g)) { + let url; + try { + url = new URL( + decode(m[1]), + "http://localhost:1314/" + path.relative(base, file), + ); + } catch { + continue; + } + if ( + url.hostname !== "localhost" || + !url.pathname.startsWith("/api-prototype/") + ) + continue; + const target = path.join( + base, + decodeURIComponent(url.pathname), + url.pathname.endsWith("/") ? "index.html" : "", + ); + if (!fs.existsSync(target)) + problems.push( + `Broken preview link: ${path.relative(base, file)} -> ${m[1]}`, + ); + } +} +if (problems.length) + throw Error( + problems.slice(0, 25).join("\n") + `\n${problems.length} output failures`, + ); +const bytes = files(path.join(base, "api-prototype")).reduce( + (n, p) => n + fs.statSync(p).size, + 0, +); +fs.writeFileSync( + path.join(root, "tmp/api-prototype/reports/output.json"), + JSON.stringify( + { htmlMarkdownPagePairs: count, previewBytes: bytes, result: "pass" }, + null, + 2, + ) + "\n", +); +console.log( + `Verified ${count} HTML/Markdown page pairs and preview-owned links.`, +); diff --git a/layouts/_partials/content-default.html b/layouts/_partials/content-default.html index 9d7c32067066..884c98de345e 100644 --- a/layouts/_partials/content-default.html +++ b/layouts/_partials/content-default.html @@ -12,6 +12,9 @@

{{ .Title | safeHTML }}

{{ partialCached "pagemeta.html" . . }}
+{{ if site.Params.apiPrototype }} + {{ partial "api-prototype/manual-link.html" . }} +{{ end }} {{ .Content }} {{- if and (eq .Type "guides") (not .IsSection) (ne .CurrentSection .FirstSection) -}} {{- with .PrevInSection -}} diff --git a/prototypes/api-docs/.gitattributes b/prototypes/api-docs/.gitattributes new file mode 100644 index 000000000000..0cb9aa6a6436 --- /dev/null +++ b/prototypes/api-docs/.gitattributes @@ -0,0 +1,5 @@ +# Keep the prototype implementation prominent in GitHub's diff view. +original/** linguist-vendored +dialects/** linguist-vendored +converted/** linguist-generated +migrations/** linguist-generated diff --git a/prototypes/api-docs/DESIGN.md b/prototypes/api-docs/DESIGN.md new file mode 100644 index 000000000000..fe07a45a5c5b --- /dev/null +++ b/prototypes/api-docs/DESIGN.md @@ -0,0 +1,56 @@ +# API reference presentation + +## Direction + +Use the Docker Docs visual language for a reference that readers scan repeatedly: +paths, parameter names, response codes, and examples should be legible at a glance. +The endpoint signature is the strongest accent. Other borders group related +information; avoid decorative panels, shadows, and animation. + +## Tokens + +- Paper: `#ffffff`; subtle surface: `#f9f9fa`. +- Text: `#2c333f`; secondary text: `#566581`. +- Divider: `#e7eaef`; action blue: `#0d4df2`. +- Dark mode uses the site's dark surface and gray/blue tokens. +- `Roboto Flex` for prose and navigation; the site's `Roboto Mono` for code. +- Type sizes: 32px page title, 20px sections, 15px prose and field headings, + 14px navigation and controls, 13px code and secondary information. +- Prose uses a 1.7 line height and a maximum measure of 72 characters. + +## Layout + +Keep the three-column reference, left aligned, with the request example aligned +to the opening description. Use a single-column reading flow below the desktop +breakpoint, retaining the example near the beginning of the operation. + +```text +Product navigation | Breadcrumbs Version / reference links + | Operation title + | Method and endpoint + | Description + reference | Request example + | Parameters | Copy action + | Responses | Source details +``` + +An alternative with a full-width description placed examples too far below the +title on operations with long introductions. A panel around every section would +also compete with the catalog's cards. Keep reference sections open and reserve +the panel treatment for executable examples. + +## Review against the brief + +Retain the catalog's structure and the site's fonts, header, and page shell. +Replace oversized heading weights, undersized code, uppercase decorative labels, +and uneven navigation spacing with a restrained type scale. Align HTTP methods +in a fixed navigation column so long operation names wrap coherently. Keep +source-review details available without giving them the prominence of a warning +on every page. Native controls, visible focus, and static reference content +remain part of the design. + +## Repository guidance proposal + +Suggested addition to `AGENTS.md`: verify font-family names against the +`@font-face` declarations in `assets/css/style.css`. The registered code font +family is `Roboto Mono`; the shared `roboto flex mono` alias falls back to a +system font. The prototype uses the registered family explicitly. diff --git a/prototypes/api-docs/catalog.json b/prototypes/api-docs/catalog.json new file mode 100644 index 000000000000..7590a038130c --- /dev/null +++ b/prototypes/api-docs/catalog.json @@ -0,0 +1,82 @@ +{ + "modelVersion": 1, + "profileVersion": "docker-docs-prototype-1", + "dialect": "https://spec.openapis.org/oas/3.1/dialect/base", + "apis": [ + { + "id": "governance", + "product": "governance", + "title": "AI Governance", + "source": "content/reference/api/ai-governance/api.yaml", + "owner": "docker/governor-services", + "upstreamPath": "governor-service-api/openapi.yaml", + "manual": "/manuals/ai/sandboxes/governance/", + "connection": "hosted", + "auth": "Exchange supported Docker credentials for a Hub bearer token. Organization permissions still apply.", + "guides": ["/reference/api/hub/latest/#tag/authentication"] + }, + { + "id": "hub", + "product": "hub", + "title": "Docker Hub", + "source": "content/reference/api/hub/latest.yaml", + "owner": "docker/docs (product authority to confirm)", + "manual": "/manuals/docker-hub/", + "connection": "hosted", + "auth": "Use the documented Hub token exchange. SCIM operations use a separate provisioning token.", + "guides": ["/manuals/security/provisioning/scim/provision-scim.md"] + }, + { + "id": "dvp", + "product": "dvp", + "title": "Publisher analytics", + "source": "content/reference/api/dvp/latest.yaml", + "owner": "docker/docs (product authority to confirm)", + "manual": "/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md", + "connection": "hosted", + "auth": "Analytics calls use a bearer token. The copied source retains the legacy login flow pending product confirmation.", + "guides": [] + }, + { + "id": "registry", + "product": "registry", + "title": "Registry", + "source": "content/reference/api/registry/latest.yaml", + "owner": "docker/docs (product authority to confirm)", + "manual": "/manuals/docker-hub/repos/", + "connection": "hosted", + "auth": "Follow the WWW-Authenticate challenge and obtain a repository-scoped registry token. This is separate from the Hub API token exchange.", + "guides": ["/reference/api/registry/auth.md"] + }, + { + "id": "engine-1.56", + "product": "engine", + "title": "Docker Engine", + "source": "_vendor/github.com/moby/moby/api/docs/v1.56.yaml", + "owner": "moby/moby", + "moduleVersion": "github.com/moby/moby/api@v1.56.0", + "manual": "/manuals/engine/", + "connection": "unix", + "auth": "Connect to a daemon you operate. Local socket permissions control access; remote daemons require their configured transport protection. X-Registry-Auth delegates registry credentials and does not authenticate the daemon caller.", + "guides": [ + "/manuals/engine/security/protect-access.md", + "/manuals/engine/daemon/remote-access.md" + ] + }, + { + "id": "engine-1.55", + "product": "engine", + "title": "Docker Engine", + "source": "_vendor/github.com/moby/moby/api/docs/v1.55.yaml", + "owner": "moby/moby", + "moduleVersion": "github.com/moby/moby/api@v1.56.0", + "manual": "/manuals/engine/", + "connection": "unix", + "auth": "Connect to a daemon you operate. Local socket permissions control access; remote daemons require their configured transport protection. X-Registry-Auth delegates registry credentials and does not authenticate the daemon caller.", + "guides": [ + "/manuals/engine/security/protect-access.md", + "/manuals/engine/daemon/remote-access.md" + ] + } + ] +} diff --git a/prototypes/api-docs/converted/dvp.yaml b/prototypes/api-docs/converted/dvp.yaml new file mode 100644 index 000000000000..3d0c606a0c72 --- /dev/null +++ b/prototypes/api-docs/converted/dvp.yaml @@ -0,0 +1,709 @@ +openapi: 3.2.0 +info: + title: DVP Data API + version: 1.0.0 + x-logo: + url: https://docs.docker.com/assets/images/logo-docker-main.png + href: /reference + description: | + The Docker DVP Data API allows [Docker Verified Publishers](https://docs.docker.com/docker-hub/publish/) to view image pull analytics data for their namespaces. Analytics data can be retrieved in a CSV as raw data, or in a summary format. + + #### Summary data + + In your summary data CSV, you will have access to the data points listed below. You can request summary data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month). + + There are two levels of summary data: + + - Repository-level, a summary of every namespace and repository + - Tag- or digest-level, a summary of every namespace, repository, and reference + (tag or digest) + + The summary data formats contain the following data points: + + - Unique IP address count + - Pulls by tag count + - Pulls by digest count + - Version check count + + #### Raw data + + In your raw data CSV you will have access to the data points listed below. You can request raw data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month). **Note:** each action is represented as a single row. + + - Type (industry) + - Host (cloud provider) + - Country (geolocation) + - Timestamp + - Namespace + - Repository + - Reference (digest is always included, tag is provided when available) + - HTTP request method + - Action, one of the following: + - Pull by tag + - Pull by digest + - Version check + - User-Agent +servers: + - url: https://hub.docker.com/api/publisher/analytics/v1 +security: + - HubAuth: [] +tags: + - name: authentication + summary: Authentication Endpoints + kind: nav + description: Authentication Endpoints reference. + - name: namespaces + summary: Namespace data + kind: nav + description: Namespace data reference. + - name: discovery + summary: Discovery + kind: nav + description: Discovery reference. + - name: responseDataFile + description: | + [ResponseDataFile](#schema-ResponseDataFile) + summary: ResponseDataFile + kind: info + - name: yearModel + description: | + [YearModel](#schema-YearModel) + summary: Year Data Model + kind: info + - name: monthModel + description: | + [MonthModel](#schema-MonthModel) + summary: Month Data Model + kind: info + - name: weekModel + description: | + [WeekModel](#schema-WeekModel) + summary: Week Data Model + kind: info +x-tagGroups: + - name: API + tags: + - authentication + - discovery + - namespaces + - name: Models + tags: + - responseDataFile + - yearModel + - monthModel + - weekModel +paths: + /v2/users/login: + servers: + - url: https://hub.docker.com + post: + security: [] + tags: + - authentication + summary: Create an authentication token + operationId: PostUsersLogin + description: | + Creates and returns a bearer token in JWT format that you can use to + authenticate with Docker Hub APIs. + + The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. + + Most Docker Hub APIs require this token either to consume or to get detailed information. For example, to list images in a private repository. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/UsersLoginRequest" + description: Login details. + required: true + responses: + "200": + description: Authentication successful + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" + "401": + description: Authentication failed or second factor required + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginErrorResponse" + /v2/users/2fa-login: + servers: + - url: https://hub.docker.com + post: + security: [] + tags: + - authentication + summary: Second factor authentication + operationId: PostUsers2FALogin + description: | + When a user has 2FA enabled, this is the second call to perform after + `/v2/users/login` call. + + Creates and returns a bearer token in JWT format that you can use to authenticate with Docker Hub APIs. + + The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. + + Most Docker Hub APIs require this token either to consume or to get detailed information. For example, to list images in a private repository. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/Users2FALoginRequest" + description: Login details. + required: true + responses: + "200": + description: Authentication successful + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" + "401": + description: Authentication failed or second factor required + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsers2FALoginErrorResponse" + /: + get: + tags: + - discovery + summary: Get namespaces and repos + description: Gets a list of your namespaces and repos which have data available. + operationId: getNamespaces + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/NamespaceData" + /namespaces: + get: + tags: + - discovery + summary: Get user's namespaces + description: Get metadata associated with the namespaces the user has access to, including extra repos associated with the namespaces. + operationId: getUserNamespaces + responses: + "200": + description: Success + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/NamespaceMetadata" + "401": + description: Authentication failed or second factor required + /namespaces/{namespace}: + get: + tags: + - discovery + summary: Get namespace + description: Gets metadata associated with specified namespace, including extra repos associated with the namespace. + operationId: getNamespace + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/NamespaceMetadata" + /namespaces/{namespace}/pulls: + get: + tags: + - namespaces + summary: Get pull data + description: Gets pulls for the given namespace. + operationId: getNamespacePulls + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + - in: query + name: timespan + schema: + $ref: "#/components/schemas/TimespanType" + required: false + description: Timespan type for fetching data + - in: query + name: period + schema: + $ref: "#/components/schemas/PeriodType" + required: false + description: Relative period of the period to fetch data + - in: query + name: group + schema: + $ref: "#/components/schemas/GroupType" + required: false + description: Field to group the data by + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/PullData" + "404": + description: Not found - namespace doesn't exist or user does not have permission to access it + /namespaces/{namespace}/repos/{repo}/pulls: + get: + tags: + - namespaces + summary: Get pull data + description: Gets pulls for the given repo. + operationId: getRepoPulls + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + - in: path + name: repo + schema: + type: string + required: true + description: Repository to fetch data for + - in: query + name: timespan + schema: + $ref: "#/components/schemas/TimespanType" + required: false + description: Timespan type for fetching data + - in: query + name: period + schema: + $ref: "#/components/schemas/PeriodType" + required: false + description: Relative period of the period to fetch data + - in: query + name: group + schema: + $ref: "#/components/schemas/GroupType" + required: false + description: Field to group the data by + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/PullData" + "404": + description: Not found - repo doesn't exist or user does not have permission to access it + /namespaces/{namespace}/pulls/exports/years: + get: + tags: + - namespaces + summary: Get years with data + description: Gets a list of years that have data for the given namespace. + operationId: getNamespaceYears + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/YearData" + /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}: + get: + tags: + - namespaces + summary: Get timespans with data + description: Gets a list of timespans of the given type that have data for the given namespace and year. + operationId: getNamespaceTimespans + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + - in: path + name: year + schema: + type: integer + required: true + description: Year to fetch data for + - in: path + name: timespantype + schema: + $ref: "#/components/schemas/TimespanType" + required: true + description: Type of timespan to fetch data for + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/TimespanData" + /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}/{timespan}: + get: + tags: + - namespaces + summary: Get namespace metadata for timespan + description: Gets info about data for the given namespace and timespan. + operationId: getNamespaceTimespanMetadata + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + - in: path + name: year + schema: + type: integer + required: true + description: Year to fetch data for + - in: path + name: timespantype + schema: + $ref: "#/components/schemas/TimespanType" + required: true + description: Type of timespan to fetch data for + - in: path + name: timespan + schema: + type: integer + required: true + description: Timespan to fetch data for + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/TimespanModel" + "404": + description: Not Found + /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}/{timespan}/{dataview}: + get: + tags: + - namespaces + summary: Get namespace data for timespan + description: Gets a list of URLs that can be used to download the pull data for the given namespace and timespan. + operationId: getNamespaceDataByTimespan + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + - in: path + name: year + schema: + type: integer + required: true + description: Year to fetch data for + - in: path + name: timespantype + schema: + $ref: "#/components/schemas/TimespanType" + required: true + description: Type of timespan to fetch data for + - in: path + name: timespan + schema: + type: integer + required: true + description: Timespan to fetch data for + - in: path + name: dataview + schema: + $ref: "#/components/schemas/DataviewType" + required: true + description: Type of data to fetch + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/ResponseData" + /repos/pulls: + get: + tags: + - namespaces + summary: Get pull data for multiple repos + description: Gets pull for the given repos. + operationId: getManyReposPulls + parameters: + - in: query + name: repos + schema: + type: array + items: + type: string + required: true + description: Repositories to fetch data for (maximum of 50 repositories per request). + - in: query + name: timespan + schema: + $ref: "#/components/schemas/TimespanType" + required: false + description: Timespan type for fetching data + - in: query + name: period + schema: + $ref: "#/components/schemas/PeriodType" + required: false + description: Relative period of the period to fetch data + - in: query + name: group + schema: + $ref: "#/components/schemas/GroupType" + required: false + description: Field to group the data by + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/ReposPullData" +components: + schemas: + UsersLoginRequest: + description: User login details + type: object + required: + - username + - password + properties: + username: + description: The username of the Docker Hub account to authenticate with. + type: string + example: myusername + password: + description: The password or personal access token (PAT) of the Docker Hub account to authenticate with. + type: string + example: hunter2 + PostUsersLoginSuccessResponse: + description: successful user login response + type: object + properties: + token: + description: | + Created authentication token. + + This token can be used in the HTTP Authorization header as a JWT to authenticate with the Docker Hub APIs. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + PostUsersLoginErrorResponse: + description: failed user login response or second factor required + type: object + required: + - detail + properties: + detail: + description: Description of the error. + type: string + example: Incorrect authentication credentials + login_2fa_token: + description: Short-lived token to be used on `/v2/users/2fa-login` to complete the authentication. This field is present only if 2FA is enabled. + type: + - string + - "null" + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + Users2FALoginRequest: + description: Second factor user login details + type: object + required: + - login_2fa_token + - code + properties: + login_2fa_token: + description: The intermediate 2FA token returned from `/v2/users/login` API. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + code: + description: The Time-based One-Time Password of the Docker Hub account to authenticate with. + type: string + example: 123456 + PostUsers2FALoginErrorResponse: + description: failed second factor login response. + type: object + properties: + detail: + description: Description of the error. + type: string + example: Incorrect authentication credentials + ResponseData: + properties: + data: + type: array + description: | + List of urls to download the data. When the data is large, the data will be split into multiple files. + items: + $ref: "#/components/schemas/ResponseDataFile" + ResponseDataFile: + properties: + url: + type: string + size: + type: integer + format: int64 + NamespaceData: + properties: + namespaces: + type: array + items: + type: string + NamespaceMetadata: + properties: + namespace: + type: string + extraRepos: + type: array + items: + type: string + datasets: + type: array + items: + $ref: "#/components/schemas/DatasetModel" + DatasetModel: + properties: + name: + $ref: "#/components/schemas/DatasetType" + views: + type: array + items: + $ref: "#/components/schemas/DataviewType" + timespans: + type: array + items: + $ref: "#/components/schemas/TimespanType" + PullData: + properties: + pulls: + type: array + items: + $ref: "#/components/schemas/PullModel" + ReposPullData: + properties: + repos: + type: object + additionalProperties: + $ref: "#/components/schemas/PullData" + PullModel: + properties: + start: + type: string + end: + type: string + repo: + type: string + namespace: + type: string + pullCount: + type: integer + ipCount: + type: integer + country: + type: string + YearData: + properties: + years: + type: array + items: + $ref: "#/components/schemas/YearModel" + YearModel: + properties: + year: + type: integer + MonthData: + properties: + months: + type: array + items: + $ref: "#/components/schemas/MonthModel" + MonthModel: + properties: + month: + type: integer + WeekData: + properties: + weeks: + type: array + items: + $ref: "#/components/schemas/WeekModel" + WeekModel: + properties: + week: + type: integer + TimespanType: + type: string + enum: + - months + - weeks + PeriodType: + type: string + enum: + - last-2-months + - last-3-months + - last-6-months + - last-12-months + DataviewType: + type: string + enum: + - raw + - summary + - repo-summary + - namespace-summary + DatasetType: + type: string + enum: + - pulls + TimespanModel: + oneOf: + - $ref: "#/components/schemas/MonthModel" + - $ref: "#/components/schemas/WeekModel" + TimespanData: + oneOf: + - $ref: "#/components/schemas/MonthData" + - $ref: "#/components/schemas/WeekData" + GroupType: + type: string + enum: + - repo + - namespace + securitySchemes: + HubAuth: + type: http + scheme: bearer + bearerFormat: JWT + description: | + JWT Bearer Authentication is required to access the Docker DVP Data API. + + This authentication documentation is duplicated from the [Hub API Authentication docs](https://docs.docker.com/reference/api/hub/latest/#tag/authentication) + x-displayName: Docker Hub Authentication +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +x-features-openapi: + schemaDefinitionsTagName: Schemas diff --git a/prototypes/api-docs/converted/engine-1.55.yaml b/prototypes/api-docs/converted/engine-1.55.yaml new file mode 100644 index 000000000000..6150a9e1cbe8 --- /dev/null +++ b/prototypes/api-docs/converted/engine-1.55.yaml @@ -0,0 +1,15399 @@ +openapi: 3.2.0 +info: + title: Docker Engine API + version: "1.55" + x-logo: + url: https://docs.docker.com/assets/images/logo-docker-main.png + description: | + The Engine API is an HTTP API served by Docker Engine. It is the API the + Docker client uses to communicate with the Engine, so everything the Docker + client can do can be done with the API. + + Most of the client's commands map directly to API endpoints (e.g. `docker ps` + is `GET /containers/json`). The notable exception is running containers, + which consists of several API calls. + + # Errors + + The API uses standard HTTP status codes to indicate the success or failure + of the API call. The body of the response will be JSON in the following + format: + + ``` + { + "message": "page not found" + } + ``` + + # Versioning + + The API is usually changed in each release, so API calls are versioned to + ensure that clients don't break. To lock to a specific version of the API, + you prefix the URL with its version, for example, call `/v1.30/info` to use + the v1.30 version of the `/info` endpoint. If the API version specified in + the URL is not supported by the daemon, a HTTP `400 Bad Request` error message + is returned. + + If you omit the version-prefix, the current version of the API is used. + For example, calling `/info` is the same as calling `/v1.55/info`. Using the + API without a version-prefix is deprecated and will be removed in a future release. + + Engine releases in the near future should support this version of the API, + so your client will continue to work even if it is talking to a newer Engine. + + The API uses an open schema model, which means the server may add extra properties + to responses. Likewise, the server will ignore any extra query parameters and + request body properties. When you write clients, you need to ignore additional + properties in responses to ensure they do not break when talking to newer + daemons. + + + # Authentication + + Authentication for registries is handled client side. The client has to send + authentication details to various endpoints that need to communicate with + registries, such as `POST /images/(name)/push`. These are sent as + `X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5) + (JSON) string with the following structure: + + ``` + { + "username": "string", + "password": "string", + "serveraddress": "string" + } + ``` + + The `serveraddress` is a domain/IP without a protocol. Throughout this + structure, double quotes are required. + + If you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth), + you can just pass this instead of credentials: + + ``` + { + "identitytoken": "9cbaf023786cd7..." + } + ``` +tags: + - name: Container + description: | + Create and manage containers. + summary: Containers + kind: nav + - name: Image + summary: Images + kind: nav + description: Images reference. + - name: Network + description: | + Networks are user-defined networks that containers can be attached to. + See the [networking documentation](https://docs.docker.com/network/) + for more information. + summary: Networks + kind: nav + - name: Volume + description: | + Create and manage persistent storage that can be attached to containers. + summary: Volumes + kind: nav + - name: Exec + description: | + Run new commands inside running containers. Refer to the + [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) + for more information. + + To exec a command in a container, you first need to create an exec instance, + then start it. These two API endpoints are wrapped up in a single command-line + command, `docker exec`. + summary: Exec + kind: nav + - name: Swarm + description: | + Engines can be clustered together in a swarm. Refer to the + [swarm mode documentation](https://docs.docker.com/engine/swarm/) + for more information. + summary: Swarm + kind: nav + - name: Node + description: | + Nodes are instances of the Engine participating in a swarm. Swarm mode + must be enabled for these endpoints to work. + summary: Nodes + kind: nav + - name: Service + description: | + Services are the definitions of tasks to run on a swarm. Swarm mode must + be enabled for these endpoints to work. + summary: Services + kind: nav + - name: Task + description: | + A task is a container running on a swarm. It is the atomic scheduling unit + of swarm. Swarm mode must be enabled for these endpoints to work. + summary: Tasks + kind: nav + - name: Secret + description: | + Secrets are sensitive data that can be used by services. Swarm mode must + be enabled for these endpoints to work. + summary: Secrets + kind: nav + - name: Config + description: | + Configs are application configurations that can be used by services. Swarm + mode must be enabled for these endpoints to work. + summary: Configs + kind: nav + - name: Plugin + summary: Plugins + kind: nav + description: Plugins reference. + - name: System + summary: System + kind: nav + description: System reference. + - name: Distribution + description: Distribution operations. + summary: Distribution + kind: nav + - name: Session + description: Session operations. + summary: Session + kind: nav +paths: + /containers/json: + get: + summary: List containers + description: | + Returns a list of containers. For details on the format, see the + [inspect endpoint](#operation/ContainerInspect). + + Note that it uses a different, smaller representation of a container + than inspecting a single container. For example, the list of linked + containers is not propagated . + operationId: ContainerList + parameters: + - name: all + in: query + description: | + Return all containers. By default, only running containers are shown. + schema: + type: boolean + default: false + - name: limit + in: query + description: | + Return this number of most recently created containers, including + non-running ones. + schema: + type: integer + - name: size + in: query + description: | + Return the size of container as fields `SizeRw` and `SizeRootFs`. + schema: + type: boolean + default: false + - name: filters + in: query + description: | + Filters to process on the container list, encoded as JSON (a + `map[string][]string`). For example, `{"status": ["paused"]}` will + only return paused containers. + + Available filters: + + - `ancestor`=(`[:]`, ``, or ``) + - `before`=(`` or ``) + - `expose`=(`[/]`|`/[]`) + - `exited=` containers with exit code of `` + - `health`=(`starting`|`healthy`|`unhealthy`|`none`) + - `id=` a container's ID + - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) + - `is-task=`(`true`|`false`) + - `label=key` or `label="key=value"` of a container label + - `name=` a container's name + - `network`=(`` or ``) + - `publish`=(`[/]`|`/[]`) + - `since`=(`` or ``) + - `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`) + - `volume`=(`` or ``) + schema: + type: string + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ContainerSummary" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Container + /containers/create: + post: + summary: Create a container + operationId: ContainerCreate + parameters: + - name: name + in: query + description: | + Assign the specified name to the container. Must match + `/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`. + schema: + type: string + pattern: ^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$ + - name: platform + in: query + description: | + Platform in the format `os[/arch[/variant]]` used for image lookup. + + When specified, the daemon checks if the requested image is present + in the local image cache with the given OS and Architecture, and + otherwise returns a `404` status. + + If the option is not set, the host's native OS and Architecture are + used to look up the image in the image cache. However, if no platform + is passed and the given image does exist in the local image cache, + but its OS or architecture does not match, the container is created + with the available image, and a warning is added to the `Warnings` + field in the response, for example; + + WARNING: The requested image's platform (linux/arm64/v8) does not + match the detected host platform (linux/amd64) and no + specific platform was requested + schema: + type: string + default: "" + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/ContainerConfig" + - type: object + properties: + HostConfig: + $ref: "#/components/schemas/HostConfig" + NetworkingConfig: + $ref: "#/components/schemas/NetworkingConfig" + example: + Hostname: "" + Domainname: "" + User: "" + AttachStdin: false + AttachStdout: true + AttachStderr: true + Tty: false + OpenStdin: false + StdinOnce: false + Env: + - FOO=bar + - BAZ=quux + Cmd: + - date + Entrypoint: "" + Image: ubuntu + Labels: + com.example.vendor: Acme + com.example.license: GPL + com.example.version: "1.0" + Volumes: + /volumes/data: {} + WorkingDir: "" + NetworkDisabled: false + ExposedPorts: + 22/tcp: {} + StopSignal: SIGTERM + StopTimeout: 10 + HostConfig: + Binds: + - /tmp:/tmp + Links: + - redis3:redis + Memory: 0 + MemorySwap: 0 + MemoryReservation: 0 + NanoCpus: 500000 + CpuPercent: 80 + CpuShares: 512 + CpuPeriod: 100000 + CpuRealtimePeriod: 1000000 + CpuRealtimeRuntime: 10000 + CpuQuota: 50000 + CpusetCpus: 0,1 + CpusetMems: 0,1 + MaximumIOps: 0 + MaximumIOBps: 0 + BlkioWeight: 300 + BlkioWeightDevice: + - {} + BlkioDeviceReadBps: + - {} + BlkioDeviceReadIOps: + - {} + BlkioDeviceWriteBps: + - {} + BlkioDeviceWriteIOps: + - {} + DeviceRequests: + - Driver: nvidia + Count: -1 + DeviceIDs": + - "0" + - "1" + - GPU-fef8089b-4820-abfc-e83e-94318197576e + Capabilities: + - - gpu + - nvidia + - compute + Options: + property1: string + property2: string + MemorySwappiness: 60 + OomKillDisable: false + OomScoreAdj: 500 + PidMode: "" + PidsLimit: 0 + PortBindings: + 22/tcp: + - HostPort: "11022" + PublishAllPorts: false + Privileged: false + ReadonlyRootfs: false + Dns: + - 8.8.8.8 + DnsOptions: + - "" + DnsSearch: + - "" + VolumesFrom: + - parent + - other:ro + CapAdd: + - NET_ADMIN + CapDrop: + - MKNOD + GroupAdd: + - newgroup + RestartPolicy: + Name: "" + MaximumRetryCount: 0 + AutoRemove: true + NetworkMode: bridge + Devices: [] + Ulimits: + - {} + LogConfig: + Type: json-file + Config: {} + SecurityOpt: [] + StorageOpt: {} + CgroupParent: "" + VolumeDriver: "" + ShmSize: 67108864 + NetworkingConfig: + EndpointsConfig: + isolated_nw: + IPAMConfig: + IPv4Address: 172.20.30.33 + IPv6Address: 2001:db8:abcd::3033 + LinkLocalIPs: + - 169.254.34.68 + - fe80::3468 + Links: + - container_1 + - container_2 + Aliases: + - server_x + - server_y + database_nw: {} + application/octet-stream: + schema: + allOf: + - $ref: "#/components/schemas/ContainerConfig" + - type: object + properties: + HostConfig: + $ref: "#/components/schemas/HostConfig" + NetworkingConfig: + $ref: "#/components/schemas/NetworkingConfig" + example: + Hostname: "" + Domainname: "" + User: "" + AttachStdin: false + AttachStdout: true + AttachStderr: true + Tty: false + OpenStdin: false + StdinOnce: false + Env: + - FOO=bar + - BAZ=quux + Cmd: + - date + Entrypoint: "" + Image: ubuntu + Labels: + com.example.vendor: Acme + com.example.license: GPL + com.example.version: "1.0" + Volumes: + /volumes/data: {} + WorkingDir: "" + NetworkDisabled: false + ExposedPorts: + 22/tcp: {} + StopSignal: SIGTERM + StopTimeout: 10 + HostConfig: + Binds: + - /tmp:/tmp + Links: + - redis3:redis + Memory: 0 + MemorySwap: 0 + MemoryReservation: 0 + NanoCpus: 500000 + CpuPercent: 80 + CpuShares: 512 + CpuPeriod: 100000 + CpuRealtimePeriod: 1000000 + CpuRealtimeRuntime: 10000 + CpuQuota: 50000 + CpusetCpus: 0,1 + CpusetMems: 0,1 + MaximumIOps: 0 + MaximumIOBps: 0 + BlkioWeight: 300 + BlkioWeightDevice: + - {} + BlkioDeviceReadBps: + - {} + BlkioDeviceReadIOps: + - {} + BlkioDeviceWriteBps: + - {} + BlkioDeviceWriteIOps: + - {} + DeviceRequests: + - Driver: nvidia + Count: -1 + DeviceIDs": + - "0" + - "1" + - GPU-fef8089b-4820-abfc-e83e-94318197576e + Capabilities: + - - gpu + - nvidia + - compute + Options: + property1: string + property2: string + MemorySwappiness: 60 + OomKillDisable: false + OomScoreAdj: 500 + PidMode: "" + PidsLimit: 0 + PortBindings: + 22/tcp: + - HostPort: "11022" + PublishAllPorts: false + Privileged: false + ReadonlyRootfs: false + Dns: + - 8.8.8.8 + DnsOptions: + - "" + DnsSearch: + - "" + VolumesFrom: + - parent + - other:ro + CapAdd: + - NET_ADMIN + CapDrop: + - MKNOD + GroupAdd: + - newgroup + RestartPolicy: + Name: "" + MaximumRetryCount: 0 + AutoRemove: true + NetworkMode: bridge + Devices: [] + Ulimits: + - {} + LogConfig: + Type: json-file + Config: {} + SecurityOpt: [] + StorageOpt: {} + CgroupParent: "" + VolumeDriver: "" + ShmSize: 67108864 + NetworkingConfig: + EndpointsConfig: + isolated_nw: + IPAMConfig: + IPv4Address: 172.20.30.33 + IPv6Address: 2001:db8:abcd::3033 + LinkLocalIPs: + - 169.254.34.68 + - fe80::3468 + Links: + - container_1 + - container_2 + Aliases: + - server_x + - server_y + database_nw: {} + description: Container to create + required: true + responses: + "201": + description: Container created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerCreateResponse" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such image: c2ada9df5af8" + "409": + description: conflict + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Container + description: Create a container. + /containers/{id}/json: + get: + summary: Inspect a container + description: Return low-level information about a container. + operationId: ContainerInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerInspectResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: size + in: query + description: Return the size of container as fields `SizeRw` and `SizeRootFs` + schema: + type: boolean + default: false + tags: + - Container + /containers/{id}/top: + get: + summary: List processes running inside a container + description: | + On Unix systems, this is done by running the `ps` command. This endpoint + is not supported on Windows. + operationId: ContainerTop + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerTopResponse" + text/plain: + schema: + $ref: "#/components/schemas/ContainerTopResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: ps_args + in: query + description: The arguments to pass to `ps`. For example, `aux` + schema: + type: string + default: -ef + tags: + - Container + /containers/{id}/logs: + get: + summary: Get container logs + description: | + Get `stdout` and `stderr` logs from a container. + + Note: This endpoint works only for containers with the `json-file` or + `journald` logging driver. + operationId: ContainerLogs + responses: + "200": + description: | + logs returned as a stream in response body. + For the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach). + Note that unlike the attach endpoint, the logs endpoint does not + upgrade the connection and does not set Content-Type. + content: + application/vnd.docker.raw-stream: + schema: + type: string + format: binary + application/vnd.docker.multiplexed-stream: + schema: + type: string + format: binary + "404": + description: no such container + content: + application/vnd.docker.raw-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/vnd.docker.multiplexed-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: follow + in: query + description: Keep connection after returning logs. + schema: + type: boolean + default: false + - name: stdout + in: query + description: Return logs from `stdout` + schema: + type: boolean + default: false + - name: stderr + in: query + description: Return logs from `stderr` + schema: + type: boolean + default: false + - name: since + in: query + description: Only return logs since this time, as a UNIX timestamp + schema: + type: integer + default: 0 + - name: until + in: query + description: Only return logs before this time, as a UNIX timestamp + schema: + type: integer + default: 0 + - name: timestamps + in: query + description: Add timestamps to every log line + schema: + type: boolean + default: false + - name: tail + in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + schema: + type: string + default: all + tags: + - Container + /containers/{id}/changes: + get: + summary: Get changes on a container’s filesystem + description: | + Returns which files in a container's filesystem have been added, deleted, + or modified. The `Kind` of modification can be one of: + + - `0`: Modified ("C") + - `1`: Added ("A") + - `2`: Deleted ("D") + operationId: ContainerChanges + responses: + "200": + description: The list of changes + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FilesystemChange" + examples: + response: + value: + - Path: /dev + Kind: 0 + - Path: /dev/kmsg + Kind: 1 + - Path: /test + Kind: 1 + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + tags: + - Container + /containers/{id}/export: + get: + summary: Export a container + description: Export the contents of a container as a tarball. + operationId: ContainerExport + responses: + "200": + description: no error + "404": + description: no such container + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + tags: + - Container + /containers/{id}/stats: + get: + summary: Get container stats based on resource usage + description: | + This endpoint returns a live stream of a container’s resource usage + statistics. + + The `precpu_stats` is the CPU statistic of the *previous* read, and is + used to calculate the CPU usage percentage. It is not an exact copy + of the `cpu_stats` field. + + If either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is + nil then for compatibility with older daemons the length of the + corresponding `cpu_usage.percpu_usage` array should be used. + + On a cgroup v2 host, the following fields are not set + * `blkio_stats`: all fields other than `io_service_bytes_recursive` + * `cpu_stats`: `cpu_usage.percpu_usage` + * `memory_stats`: `max_usage` and `failcnt` + Also, `memory_stats.stats` fields are incompatible with cgroup v1. + + To calculate the values shown by the `stats` command of the docker cli tool + the following formulas can be used: + * used_memory = `memory_stats.usage - memory_stats.stats.cache` (cgroups v1) + * used_memory = `memory_stats.usage - memory_stats.stats.inactive_file` (cgroups v2) + * available_memory = `memory_stats.limit` + * Memory usage % = `(used_memory / available_memory) * 100.0` + * cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage` + * system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage` + * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus` + * CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0` + operationId: ContainerStats + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerStatsResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: stream + in: query + description: | + Stream the output. If false, the stats will be output once and then + it will disconnect. + schema: + type: boolean + default: true + - name: one-shot + in: query + description: | + Only get a single stat instead of waiting for 2 cycles. Must be used + with `stream=false`. + schema: + type: boolean + default: false + tags: + - Container + /containers/{id}/resize: + post: + summary: Resize a container TTY + description: Resize the TTY for a container. + operationId: ContainerResize + responses: + "200": + description: no error + "404": + description: no such container + content: + text/plain: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: cannot resize container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: h + in: query + required: true + description: Height of the TTY session in characters + schema: + type: integer + - name: w + in: query + required: true + description: Width of the TTY session in characters + schema: + type: integer + tags: + - Container + /containers/{id}/start: + post: + summary: Start a container + operationId: ContainerStart + responses: + "204": + description: no error + "304": + description: container already started + "400": + description: bad parameter, including an invalid checkpoint ID + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: detachKeys + in: query + description: | + Override the key sequence for detaching a container. Format is a + single character `[a-Z]` or `ctrl-` where `` is one + of: `a-z`, `@`, `^`, `[`, `,` or `_`. + schema: + type: string + tags: + - Container + description: Start a container. + /containers/{id}/stop: + post: + summary: Stop a container + operationId: ContainerStop + responses: + "204": + description: no error + "304": + description: container already stopped + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: signal + in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + schema: + type: string + - name: t + in: query + description: Number of seconds to wait before killing the container + schema: + type: integer + tags: + - Container + description: Stop a container. + /containers/{id}/restart: + post: + summary: Restart a container + operationId: ContainerRestart + responses: + "204": + description: no error + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: signal + in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + schema: + type: string + - name: t + in: query + description: Number of seconds to wait before killing the container + schema: + type: integer + tags: + - Container + description: Restart a container. + /containers/{id}/kill: + post: + summary: Kill a container + description: | + Send a POSIX signal to a container, defaulting to killing to the + container. + operationId: ContainerKill + responses: + "204": + description: no error + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "409": + description: container is not running + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: signal + in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + schema: + type: string + default: SIGKILL + tags: + - Container + /containers/{id}/update: + post: + summary: Update a container + description: | + Change various configuration options of a container without having to + recreate it. + operationId: ContainerUpdate + responses: + "200": + description: The container has been updated. + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerUpdateResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/Resources" + - type: object + properties: + RestartPolicy: + $ref: "#/components/schemas/RestartPolicy" + example: + BlkioWeight: 300 + CpuShares: 512 + CpuPeriod: 100000 + CpuQuota: 50000 + CpuRealtimePeriod: 1000000 + CpuRealtimeRuntime: 10000 + CpusetCpus: 0,1 + CpusetMems: "0" + Memory: 314572800 + MemorySwap: 514288000 + MemoryReservation: 209715200 + RestartPolicy: + MaximumRetryCount: 4 + Name: on-failure + required: true + tags: + - Container + /containers/{id}/rename: + post: + summary: Rename a container + operationId: ContainerRename + responses: + "204": + description: no error + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "409": + description: name already in use + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: name + in: query + required: true + description: New name for the container + schema: + type: string + tags: + - Container + description: Rename a container. + /containers/{id}/pause: + post: + summary: Pause a container + description: | + Use the freezer cgroup to suspend all processes in a container. + + Traditionally, when suspending a process the `SIGSTOP` signal is used, + which is observable by the process being suspended. With the freezer + cgroup the process is unaware, and unable to capture, that it is being + suspended, and subsequently resumed. + operationId: ContainerPause + responses: + "204": + description: no error + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + tags: + - Container + /containers/{id}/unpause: + post: + summary: Unpause a container + description: Resume a container which has been paused. + operationId: ContainerUnpause + responses: + "204": + description: no error + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + tags: + - Container + /containers/{id}/attach: + post: + summary: Attach to a container + description: | + Attach to a container to read its output or send it input. You can attach + to the same container multiple times and you can reattach to containers + that have been detached. + + Either the `stream` or `logs` parameter must be `true` for this endpoint + to do anything. + + See the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/) + for more details. + + ### Hijacking + + This endpoint hijacks the HTTP connection to transport `stdin`, `stdout`, + and `stderr` on the same socket. + + This is the response from the daemon for an attach request: + + ``` + HTTP/1.1 200 OK + Content-Type: application/vnd.docker.raw-stream + + [STREAM] + ``` + + After the headers and two new lines, the TCP connection can now be used + for raw, bidirectional communication between the client and server. + + To hint potential proxies about connection hijacking, the Docker client + can also optionally send connection upgrade headers. + + For example, the client sends this request to upgrade the connection: + + ``` + POST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1 + Upgrade: tcp + Connection: Upgrade + ``` + + The Docker daemon will respond with a `101 UPGRADED` response, and will + similarly follow with the raw stream: + + ``` + HTTP/1.1 101 UPGRADED + Content-Type: application/vnd.docker.raw-stream + Connection: Upgrade + Upgrade: tcp + + [STREAM] + ``` + + ### Stream format + + When the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate), + the HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream + and the stream over the hijacked connected is multiplexed to separate out + `stdout` and `stderr`. The stream consists of a series of frames, each + containing a header and a payload. + + The header contains the information which the stream writes (`stdout` or + `stderr`). It also contains the size of the associated frame encoded in + the last four bytes (`uint32`). + + It is encoded on the first eight bytes like this: + + ```go + header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} + ``` + + `STREAM_TYPE` can be: + + - 0: `stdin` (is written on `stdout`) + - 1: `stdout` + - 2: `stderr` + + `SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size + encoded as big endian. + + Following the header is the payload, which is the specified number of + bytes of `STREAM_TYPE`. + + The simplest way to implement this protocol is the following: + + 1. Read 8 bytes. + 2. Choose `stdout` or `stderr` depending on the first byte. + 3. Extract the frame size from the last four bytes. + 4. Read the extracted size and output it on the correct output. + 5. Goto 1. + + ### Stream format when using a TTY + + When the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate), + the stream is not multiplexed. The data exchanged over the hijacked + connection is simply the raw data from the process PTY and client's + `stdin`. + operationId: ContainerAttach + responses: + "101": + description: no error, hints proxy about hijacking + "200": + description: no error, no upgrade header found + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such container + content: + application/vnd.docker.raw-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/vnd.docker.multiplexed-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: detachKeys + in: query + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,` or `_`. + schema: + type: string + - name: logs + in: query + description: | + Replay previous logs from the container. + + This is useful for attaching to a container that has started and you + want to output everything since the container started. + + If `stream` is also enabled, once all the previous output has been + returned, it will seamlessly transition into streaming current + output. + schema: + type: boolean + default: false + - name: stream + in: query + description: | + Stream attached streams from the time the request was made onwards. + schema: + type: boolean + default: false + - name: stdin + in: query + description: Attach to `stdin` + schema: + type: boolean + default: false + - name: stdout + in: query + description: Attach to `stdout` + schema: + type: boolean + default: false + - name: stderr + in: query + description: Attach to `stderr` + schema: + type: boolean + default: false + tags: + - Container + /containers/{id}/attach/ws: + get: + summary: Attach to a container via a websocket + operationId: ContainerAttachWebsocket + responses: + "101": + description: no error, hints proxy about hijacking + "200": + description: no error, no upgrade header found + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: detachKeys + in: query + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,`, or `_`. + schema: + type: string + - name: logs + in: query + description: Return logs + schema: + type: boolean + default: false + - name: stream + in: query + description: Return stream + schema: + type: boolean + default: false + - name: stdin + in: query + description: Attach to `stdin` + schema: + type: boolean + default: false + - name: stdout + in: query + description: Attach to `stdout` + schema: + type: boolean + default: false + - name: stderr + in: query + description: Attach to `stderr` + schema: + type: boolean + default: false + tags: + - Container + description: Attach to a container via a websocket. + /containers/{id}/wait: + post: + summary: Wait for a container + description: Block until a container stops, then returns the exit code. + operationId: ContainerWait + responses: + "200": + description: The container has exit. + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerWaitResponse" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: condition + in: query + description: | + Wait until a container state reaches the given condition. + + Defaults to `not-running` if omitted or empty. + schema: + type: string + enum: + - not-running + - next-exit + - removed + default: not-running + tags: + - Container + /containers/{id}: + delete: + summary: Remove a container + operationId: ContainerDelete + responses: + "204": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "409": + description: conflict + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: | + You cannot remove a running container: c2ada9df5af8. Stop the + container before attempting removal or force remove + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: v + in: query + description: Remove anonymous volumes associated with the container. + schema: + type: boolean + default: false + - name: force + in: query + description: If the container is running, kill it before removing it. + schema: + type: boolean + default: false + - name: link + in: query + description: Remove the specified link associated with the container. + schema: + type: boolean + default: false + tags: + - Container + description: Remove a container. + /containers/{id}/archive: + head: + summary: Get information about files in a container + description: | + A response header `X-Docker-Container-Path-Stat` is returned, containing + a base64 - encoded JSON object with some filesystem header information + about the path. + operationId: ContainerArchiveInfo + responses: + "200": + description: no error + headers: + X-Docker-Container-Path-Stat: + description: | + A base64 - encoded JSON object with some filesystem header + information about the path + schema: + type: string + "400": + description: Bad parameter + "404": + description: Container or path does not exist + "500": + description: Server error + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: path + in: query + required: true + description: Resource in the container’s filesystem to archive. + schema: + type: string + tags: + - Container + get: + summary: Get an archive of a filesystem resource in a container + description: Get a tar archive of a resource in the filesystem of container id. + operationId: ContainerArchive + responses: + "200": + description: no error + content: + application/x-tar: {} + "400": + description: Bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: Container or path does not exist + content: + application/x-tar: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: path + in: query + required: true + description: Resource in the container’s filesystem to archive. + schema: + type: string + tags: + - Container + put: + summary: Extract an archive of files or folders to a directory in a container + description: | + Upload a tar archive to be extracted to a path in the filesystem of container id. + `path` parameter is asserted to be a directory. If it exists as a file, 400 error + will be returned with message "not a directory". + operationId: PutContainerArchive + responses: + "200": + description: The content was extracted successfully + "400": + description: Bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: not a directory + "403": + description: Permission denied, the volume or container rootfs is marked as read-only. + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: No such container or path does not exist inside the container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: path + in: query + required: true + description: "Path to a directory in the container to extract the archive’s contents into. " + schema: + type: string + - name: noOverwriteDirNonDir + in: query + description: | + If `1`, `true`, or `True` then it will be an error if unpacking the + given content would cause an existing directory to be replaced with + a non-directory and vice versa. + schema: + type: string + - name: copyUIDGID + in: query + description: | + If `1`, `true`, then it will copy UID/GID maps to the dest file or + dir + schema: + type: string + requestBody: + content: + application/x-tar: + schema: + type: string + format: binary + application/octet-stream: + schema: + type: string + format: binary + description: | + The input stream must be a tar archive compressed with one of the + following algorithms: `identity` (no compression), `gzip`, `bzip2`, + or `xz`. + required: true + tags: + - Container + /containers/prune: + post: + summary: Delete stopped containers + operationId: ContainerPrune + parameters: + - name: filters + in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels. + schema: + type: string + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: ContainerPruneResponse + properties: + ContainersDeleted: + description: Container IDs that were deleted + type: array + items: + type: string + SpaceReclaimed: + description: Disk space reclaimed in bytes + type: integer + format: int64 + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Container + description: Delete stopped containers. + /images/json: + get: + summary: List Images + description: Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image. + operationId: ImageList + responses: + "200": + description: Summary image data for the images matching the query + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ImageSummary" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: all + in: query + description: Show all images. Only images from a final layer (no children) are shown by default. + schema: + type: boolean + default: false + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the images list. + + Available filters: + + - `before`=(`[:]`, `` or ``) + - `dangling=true` + - `label=key` or `label="key=value"` of an image label + - `reference`=(`[:]`) + - `since`=(`[:]`, `` or ``) + - `until=` + schema: + type: string + - name: shared-size + in: query + description: Compute and show shared size as a `SharedSize` field on each image. + schema: + type: boolean + default: false + - name: digests + in: query + description: Show digest information as a `RepoDigests` field on each image. + schema: + type: boolean + default: false + - name: manifests + in: query + description: Include `Manifests` in the image summary. + schema: + type: boolean + default: false + - name: identity + in: query + description: Include `Identity` in each manifest summary. Requires `manifests=1`. + schema: + type: boolean + default: false + tags: + - Image + /build: + post: + summary: Build an image + description: | + Build an image from a tar archive with a `Dockerfile` in it. + + The `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/). + + The Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output. + + The build is canceled if the client drops the connection by quitting or being killed. + operationId: ImageBuild + parameters: + - name: dockerfile + in: query + description: Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`. + schema: + type: string + default: Dockerfile + - name: t + in: query + description: A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters. + schema: + type: string + - name: extrahosts + in: query + description: Extra hosts to add to /etc/hosts + schema: + type: string + - name: remote + in: query + description: A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball. + schema: + type: string + - name: q + in: query + description: Suppress verbose build output. + schema: + type: boolean + default: false + - name: nocache + in: query + description: Do not use the cache when building the image. + schema: + type: boolean + default: false + - name: cachefrom + in: query + description: JSON array of images used for build cache resolution. + schema: + type: string + - name: pull + in: query + description: Attempt to pull the image even if an older image exists locally. + schema: + type: string + - name: rm + in: query + description: Remove intermediate containers after a successful build. + schema: + type: boolean + default: true + - name: forcerm + in: query + description: Always remove intermediate containers, even upon failure. + schema: + type: boolean + default: false + - name: memory + in: query + description: Set memory limit for build. + schema: + type: integer + format: int64 + - name: memswap + in: query + description: Total memory (memory + swap). Set as `-1` to disable swap. + schema: + type: integer + format: int64 + - name: cpushares + in: query + description: CPU shares (relative weight). + schema: + type: integer + format: int64 + - name: cpusetcpus + in: query + description: CPUs in which to allow execution (e.g., `0-3`, `0,1`). + schema: + type: string + - name: cpuperiod + in: query + description: The length of a CPU period in microseconds. + schema: + type: integer + format: int64 + - name: cpuquota + in: query + description: Microseconds of CPU time that the container can get in a CPU period. + schema: + type: integer + format: int64 + - name: buildargs + in: query + description: | + JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values. + + For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded. + + [Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg) + schema: + type: string + - name: shmsize + in: query + description: Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. + schema: + type: integer + format: int64 + - name: squash + in: query + description: Squash the resulting images layers into a single layer. *(Experimental release only.)* + schema: + type: boolean + - name: labels + in: query + description: Arbitrary key/value labels to set on the image, as a JSON map of string pairs. + schema: + type: string + - name: networkmode + in: query + description: | + Sets the networking mode for the run commands during build. Supported + standard values are: `bridge`, `host`, `none`, and `container:`. + Any other value is taken as a custom network's name or ID to which this + container should connect to. + schema: + type: string + - name: Content-type + in: header + schema: + type: string + enum: + - application/x-tar + default: application/x-tar + - name: X-Registry-Config + in: header + description: | + This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to. + + The key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example: + + ``` + { + "docker.example.com": { + "username": "janedoe", + "password": "hunter2" + }, + "https://index.docker.io/v1/": { + "username": "mobydock", + "password": "conta1n3rize14" + } + } + ``` + + Only the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API. + schema: + type: string + - name: platform + in: query + description: Platform in the format os[/arch[/variant]] + schema: + type: string + default: "" + - name: target + in: query + description: Target build stage + schema: + type: string + default: "" + - name: outputs + in: query + description: | + BuildKit output configuration in the format of a stringified JSON array of objects. + Each object must have two top-level properties: `Type` and `Attrs`. + The `Type` property must be set to 'moby'. + The `Attrs` property is a map of attributes for the BuildKit output configuration. + See https://docs.docker.com/build/exporters/oci-docker/ for more information. + + Example: + + ``` + [{"Type":"moby","Attrs":{"type":"image","force-compression":"true","compression":"zstd"}}] + ``` + schema: + type: string + default: "" + - name: version + in: query + description: | + Version of the builder backend to use. + + - `1` is the first generation classic (deprecated) builder in the Docker daemon (default) + - `2` is [BuildKit](https://github.com/moby/buildkit) + schema: + type: string + enum: + - "1" + - "2" + default: "1" + requestBody: + content: + application/octet-stream: + schema: + type: string + format: binary + description: "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." + responses: + "200": + description: no error + "400": + description: Bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Image + /build/prune: + post: + summary: Delete builder cache + operationId: BuildPrune + parameters: + - name: reserved-space + in: query + description: Amount of disk space in bytes to keep for cache + schema: + type: integer + format: int64 + - name: max-used-space + in: query + description: Maximum amount of disk space allowed to keep for cache + schema: + type: integer + format: int64 + - name: min-free-space + in: query + description: Target amount of free disk space after pruning + schema: + type: integer + format: int64 + - name: all + in: query + description: Remove all types of build cache + schema: + type: boolean + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the list of build cache objects. + + Available filters: + + - `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time. + - `id=` + - `parent=` + - `type=` + - `description=` + - `inuse` + - `shared` + - `private` + schema: + type: string + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: BuildPruneResponse + properties: + CachesDeleted: + type: array + items: + description: ID of build cache object + type: string + SpaceReclaimed: + description: Disk space reclaimed in bytes + type: integer + format: int64 + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Image + description: Delete builder cache. + /images/create: + post: + summary: Create an image + description: Pull or import an image. + operationId: ImageCreate + responses: + "200": + description: no error + "404": + description: repository does not exist or no read access + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: fromImage + in: query + description: | + Name of the image to pull. If the name includes a tag or digest, specific behavior applies: + + - If only `fromImage` includes a tag, that tag is used. + - If both `fromImage` and `tag` are provided, `tag` takes precedence. + - If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored. + - If neither a tag nor digest is specified, all tags are pulled. + schema: + type: string + - name: fromSrc + in: query + description: Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image. + schema: + type: string + - name: repo + in: query + description: Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image. + schema: + type: string + - name: tag + in: query + description: Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled. + schema: + type: string + - name: message + in: query + description: Set commit message for imported image. + schema: + type: string + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. + schema: + type: string + - name: changes + in: query + description: | + Apply `Dockerfile` instructions to the image that is created, + for example: `changes=ENV DEBUG=true`. + Note that `ENV DEBUG=true` should be URI component encoded. + + Supported `Dockerfile` instructions: + `CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR` + style: form + explode: false + schema: + type: array + items: + type: string + - name: platform + in: query + description: | + Platform in the format os[/arch[/variant]]. + + When used in combination with the `fromImage` option, the daemon checks + if the given image is present in the local image cache with the given + OS and Architecture, and otherwise attempts to pull the image. If the + option is not set, the host's native OS and Architecture are used. + If the given image does not exist in the local image cache, the daemon + attempts to pull the image with the host's native OS and Architecture. + If the given image does exists in the local image cache, but its OS or + architecture does not match, a warning is produced. + + When used with the `fromSrc` option to import an image from an archive, + this option sets the platform information for the imported image. If + the option is not set, the host's native OS and Architecture are used + for the imported image. + schema: + type: string + default: "" + requestBody: + content: + text/plain: + schema: + type: string + application/octet-stream: + schema: + type: string + description: Image content if the value `-` has been specified in fromSrc query parameter + tags: + - Image + /images/{name}/json: + get: + summary: Inspect an image + description: Return low-level information about an image. + operationId: ImageInspect + responses: + "200": + description: No error + content: + application/json: + schema: + $ref: "#/components/schemas/ImageInspect" + "404": + description: No such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such image: someimage (tag: latest)" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or id + required: true + schema: + type: string + - name: manifests + in: query + description: |- + Include Manifests in the image summary. + + The `manifests` and `platform` options are mutually exclusive, and + an error is produced if both are set. + required: false + schema: + type: boolean + default: false + - name: platform + in: query + description: |- + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, + prioritizing the daemon's host platform. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to show inspect. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + The `platform` and `manifests` options are mutually exclusive, and + an error is produced if both are set. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + schema: + type: string + tags: + - Image + /images/{name}/attestations: + get: + summary: Get attestation statements for an image + description: | + Return the in-toto attestation statements attached to the image for the + given platform. The daemon locates the attestation manifest(s) that + reference the matching platform image manifest, reads their statement + layers, and returns the verbatim statement JSON together with layer + metadata. + + If the image has no attestations an empty array is returned. + operationId: ImageAttestations + responses: + "200": + description: No error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/AttestationStatement" + "400": + description: Bad parameter (e.g. malformed `platform` value) + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: No such image, or no manifest found for the requested platform + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "501": + description: | + The daemon's image backend does not support attestations. This + is returned by the legacy (graphdriver) image store, which does + not preserve OCI image indexes. + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or id + required: true + schema: + type: string + - name: platform + in: query + description: |- + JSON-encoded OCI platform to select the image variant whose + attestations to return. + If omitted, the daemon's default (host) platform is used. + + Only one platform value is currently accepted; passing more than + one returns an error. The parameter is declared as an array so the + wire shape can accept multiple values in the future without an + API version bump. + + Example: `{"os": "linux", "architecture": "amd64"}` + required: false + explode: true + schema: + type: array + items: + type: string + - name: type + in: query + description: |- + In-toto predicate type URI to filter returned statements. May be + repeated to accept any of several predicate types. If omitted, all + statements are returned. + + Example: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document` + required: false + explode: true + schema: + type: array + items: + type: string + - name: statement + in: query + description: |- + Include the verbatim in-toto statement body in each returned + entry. Defaults to false; when omitted or false, only the + descriptor and predicate type are returned and statement blobs + are not read. + required: false + schema: + type: boolean + default: false + tags: + - Image + /images/{name}/history: + get: + summary: Get the history of an image + description: Return parent layers of an image. + operationId: ImageHistory + responses: + "200": + description: List of image layers + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ImageHistoryResponseItem" + examples: + response: + value: + - Id: 3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710 + Created: 1398108230 + CreatedBy: "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /" + Tags: + - ubuntu:lucid + - ubuntu:10.04 + Size: 182964289 + Comment: "" + - Id: 6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8 + Created: 1398108222 + CreatedBy: "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/" + Tags: [] + Size: 0 + Comment: "" + - Id: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158 + Created: 1371157430 + CreatedBy: "" + Tags: + - scratch12:latest + - scratch:latest + Size: 0 + Comment: Imported from - + "404": + description: No such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or ID + required: true + schema: + type: string + - name: platform + in: query + description: | + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, + prioritizing the daemon's host platform. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to show the history for. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + schema: + type: string + tags: + - Image + /images/{name}/push: + post: + summary: Push an image + description: | + Push an image to a registry. + + If you wish to push an image on to a private registry, that image must + already have a tag which references the registry. For example, + `registry.example.com/myimage:latest`. + + The push is cancelled if the HTTP connection is closed. + operationId: ImagePush + responses: + "200": + description: No error + "404": + description: No such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + Name of the image to push. For example, `registry.example.com/myimage`. + The image must be present in the local image store with the same name. + + The name should be provided without tag; if a tag is provided, it + is ignored. For example, `registry.example.com/myimage:latest` is + considered equivalent to `registry.example.com/myimage`. + + Use the `tag` parameter to specify the tag to push. + required: true + schema: + type: string + - name: tag + in: query + description: | + Tag of the image to push. For example, `latest`. If no tag is provided, + all tags of the given image that are present in the local image store + are pushed. + schema: + type: string + - name: platform + in: query + description: | + JSON-encoded OCI platform to select the platform-variant to push. + If not provided, all available variants will attempt to be pushed. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to push to the registry. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + schema: + type: string + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. + required: true + schema: + type: string + tags: + - Image + /images/{name}/tag: + post: + summary: Tag an image + description: | + Create a tag that refers to a source image. + + This creates an additional reference (tag) to the source image. The tag + can include a different repository name and/or tag. If the repository + or tag already exists, it will be overwritten. + operationId: ImageTag + responses: + "201": + description: No error + "400": + description: Bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: No such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "409": + description: Conflict + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or ID to tag. + required: true + schema: + type: string + - name: repo + in: query + description: The repository to tag in. For example, `someuser/someimage`. + schema: + type: string + - name: tag + in: query + description: The name of the new tag. + schema: + type: string + tags: + - Image + /images/{name}: + delete: + summary: Remove an image + description: | + Remove an image, along with any untagged parent images that were + referenced by that image. + + Images can't be removed if they have descendant images, are being + used by a running container or are being used by a build. + operationId: ImageDelete + responses: + "200": + description: The image was deleted successfully + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ImageDeleteResponseItem" + examples: + response: + value: + - Untagged: 3e2f21a89f + - Deleted: 3e2f21a89f + - Deleted: 53b4f83ac9 + "404": + description: No such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "409": + description: Conflict + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or ID + required: true + schema: + type: string + - name: force + in: query + description: Remove the image even if it is being used by stopped containers or has other tags + schema: + type: boolean + default: false + - name: noprune + in: query + description: Do not delete untagged parent images + schema: + type: boolean + default: false + - name: platforms + in: query + description: | + Select platform-specific content to delete. + Multiple values are accepted. + Each platform is a OCI platform encoded as a JSON string. + style: form + explode: false + schema: + type: array + items: + type: string + tags: + - Image + /images/search: + get: + summary: Search images + description: Search for an image on Docker Hub. + operationId: ImageSearch + responses: + "200": + description: No error + content: + application/json: + schema: + type: array + items: + type: object + title: ImageSearchResponseItem + properties: + description: + type: string + is_official: + type: boolean + is_automated: + description: | + Whether this repository has automated builds enabled. + + + + + + + > **Deprecated**: This field is deprecated and will always be "false". + type: boolean + example: false + name: + type: string + star_count: + type: integer + examples: + response: + value: + - description: A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size! + is_official: true + is_automated: false + name: alpine + star_count: 10093 + - description: Busybox base image. + is_official: true + is_automated: false + name: Busybox base image. + star_count: 3037 + - description: The PostgreSQL object-relational database system provides reliability and data integrity. + is_official: true + is_automated: false + name: postgres + star_count: 12408 + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: term + in: query + description: Term to search + required: true + schema: + type: string + - name: limit + in: query + description: Maximum number of results to return + schema: + type: integer + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters: + + - `is-official=(true|false)` + - `stars=` Matches images that has at least 'number' stars. + schema: + type: string + tags: + - Image + /images/prune: + post: + summary: Delete unused images + operationId: ImagePrune + parameters: + - name: filters + in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters: + + - `dangling=` When set to `true` (or `1`), prune only + unused *and* untagged images. When set to `false` + (or `0`), all unused images are pruned. + - `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels. + schema: + type: string + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: ImagePruneResponse + properties: + ImagesDeleted: + description: Images that were deleted + type: array + items: + $ref: "#/components/schemas/ImageDeleteResponseItem" + SpaceReclaimed: + description: Disk space reclaimed in bytes + type: integer + format: int64 + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Image + description: Delete unused images. + /auth: + post: + summary: Check auth configuration + description: | + Validate credentials for a registry and, if available, get an identity + token for accessing the registry without password. + operationId: SystemAuth + responses: + "200": + description: An identity token was generated successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/AuthResponse" + "204": + description: No error + "401": + description: Auth error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/AuthConfig" + description: Authentication to check + tags: + - System + /info: + get: + summary: Get system information + operationId: SystemInfo + responses: + "200": + description: No error + content: + application/json: + schema: + $ref: "#/components/schemas/SystemInfo" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - System + description: Get system information. + /version: + get: + summary: Get version + description: Returns the version of Docker that is running and various information about the system that Docker is running on. + operationId: SystemVersion + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/SystemVersion" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - System + /_ping: + get: + summary: Ping + description: This is a dummy endpoint you can use to test if the server is accessible. + operationId: SystemPing + responses: + "200": + description: no error + headers: + Api-Version: + description: Max API Version the server supports + schema: + type: string + Builder-Version: + description: | + Default version of docker image builder + + The default on Linux is version "2" (BuildKit), but the daemon + can be configured to recommend version "1" (classic Builder). + Windows does not yet support BuildKit for native Windows images, + and uses "1" (classic builder) as a default. + + This value is a recommendation as advertised by the daemon, and + it is up to the client to choose which builder to use. + schema: + type: string + default: "2" + Docker-Experimental: + description: If the server is running with experimental mode enabled + schema: + type: boolean + Swarm: + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. + schema: + type: string + enum: + - inactive + - pending + - error + - locked + - active/worker + - active/manager + default: inactive + Cache-Control: + schema: + type: string + default: no-cache, no-store, must-revalidate + Pragma: + schema: + type: string + default: no-cache + content: + text/plain: + schema: + type: string + example: OK + "500": + description: server error + headers: + Cache-Control: + schema: + type: string + default: no-cache, no-store, must-revalidate + Pragma: + schema: + type: string + default: no-cache + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - System + head: + summary: Ping + description: This is a dummy endpoint you can use to test if the server is accessible. + operationId: SystemPingHead + responses: + "200": + description: no error + headers: + Api-Version: + description: Max API Version the server supports + schema: + type: string + Builder-Version: + description: Default version of docker image builder + schema: + type: string + Docker-Experimental: + description: If the server is running with experimental mode enabled + schema: + type: boolean + Swarm: + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. + schema: + type: string + enum: + - inactive + - pending + - error + - locked + - active/worker + - active/manager + default: inactive + Cache-Control: + schema: + type: string + default: no-cache, no-store, must-revalidate + Pragma: + schema: + type: string + default: no-cache + "500": + description: server error + tags: + - System + /commit: + post: + summary: Create a new image from a container + operationId: ImageCommit + responses: + "201": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/IDResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: container + in: query + description: The ID or name of the container to commit + schema: + type: string + - name: repo + in: query + description: Repository name for the created image + schema: + type: string + - name: tag + in: query + description: Tag name for the create image + schema: + type: string + - name: comment + in: query + description: Commit message + schema: + type: string + - name: author + in: query + description: Author of the image (e.g., `John Hannibal Smith `) + schema: + type: string + - name: pause + in: query + description: Whether to pause the container before committing + schema: + type: boolean + default: true + - name: changes + in: query + description: "`Dockerfile` instructions to apply while committing" + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerConfig" + description: The container configuration + tags: + - Image + description: Create a new image from a container. + /events: + get: + summary: Monitor events + description: | + Stream real-time events from the server. + + Various objects within Docker report events when something happens to them. + + Containers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune` + + Images report these events: `create`, `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune` + + Volumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune` + + Networks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune` + + The Docker daemon reports these events: `reload` + + Services report these events: `create`, `update`, and `remove` + + Nodes report these events: `create`, `update`, and `remove` + + Secrets report these events: `create`, `update`, and `remove` + + Configs report these events: `create`, `update`, and `remove` + + The Builder reports `prune` events + operationId: SystemEvents + responses: + "200": + description: no error + content: + application/jsonl: + schema: + $ref: "#/components/schemas/EventMessage" + application/x-ndjson: + schema: + $ref: "#/components/schemas/EventMessage" + application/json-seq: + schema: + $ref: "#/components/schemas/EventMessage" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: since + in: query + description: Show events created since this timestamp then stream new events. + schema: + type: string + - name: until + in: query + description: Show events created until this timestamp then stop streaming. + schema: + type: string + - name: filters + in: query + description: | + A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters: + + - `config=` config name or ID + - `container=` container name or ID + - `daemon=` daemon name or ID + - `event=` event type + - `image=` image name or ID + - `label=` image or container label + - `network=` network name or ID + - `node=` node ID + - `plugin`= plugin name or ID + - `scope`= local or swarm + - `secret=` secret name or ID + - `service=` service name or ID + - `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config` + - `volume=` volume name + schema: + type: string + tags: + - System + /system/df: + get: + summary: Get data usage information + operationId: SystemDataUsage + responses: + "200": + description: no error + content: + application/json: + schema: + type: object + title: SystemDataUsageResponse + properties: + ImageUsage: + $ref: "#/components/schemas/ImagesDiskUsage" + ContainerUsage: + $ref: "#/components/schemas/ContainersDiskUsage" + VolumeUsage: + $ref: "#/components/schemas/VolumesDiskUsage" + BuildCacheUsage: + $ref: "#/components/schemas/BuildCacheDiskUsage" + text/plain: + schema: + type: object + title: SystemDataUsageResponse + properties: + ImageUsage: + $ref: "#/components/schemas/ImagesDiskUsage" + ContainerUsage: + $ref: "#/components/schemas/ContainersDiskUsage" + VolumeUsage: + $ref: "#/components/schemas/VolumesDiskUsage" + BuildCacheUsage: + $ref: "#/components/schemas/BuildCacheDiskUsage" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: type + in: query + description: | + Object types, for which to compute and return data. + explode: true + schema: + type: array + items: + type: string + enum: + - container + - image + - volume + - build-cache + - name: verbose + in: query + description: | + Show detailed information on space usage. + schema: + type: boolean + default: false + tags: + - System + description: Get data usage information. + /images/{name}/get: + get: + summary: Export an image + description: | + Get a tarball containing all images and metadata for a repository. + + If `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced. + + ### Image tarball format + + An image tarball contains [Content as defined in the OCI Image Layout Specification](https://github.com/opencontainers/image-spec/blob/v1.1.1/image-layout.md#content). + + Additionally, includes the manifest.json file associated with a backwards compatible docker save format. + + If the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs. + + ```json + { + "hello-world": { + "latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1" + } + } + ``` + operationId: ImageGet + responses: + "200": + description: no error + content: + application/x-tar: + schema: + type: string + format: binary + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or ID + required: true + schema: + type: string + - name: platform + in: query + description: | + JSON encoded OCI platform describing a platform which will be used + to select a platform-specific image to be saved if the image is + multi-platform. + If not provided, the full multi-platform image will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + explode: true + schema: + type: array + items: + type: string + tags: + - Image + /images/get: + get: + summary: Export several images + description: | + Get a tarball containing all images and metadata for several image + repositories. + + For each value of the `names` parameter: if it is a specific name and + tag (e.g. `ubuntu:latest`), then only that image (and its parents) are + returned; if it is an image ID, similarly only that image (and its parents) + are returned and there would be no names referenced in the 'repositories' + file for this image ID. + + For details on the format, see the [export image endpoint](#operation/ImageGet). + operationId: ImageGetAll + responses: + "200": + description: no error + content: + application/x-tar: + schema: + type: string + format: binary + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: names + in: query + description: Image names to filter by + style: form + explode: false + schema: + type: array + items: + type: string + - name: platform + in: query + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to be saved if the image is + multi-platform. If not provided, the full multi-platform image + will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + explode: true + schema: + type: array + items: + type: string + tags: + - Image + /images/load: + post: + summary: Import images + description: | + Load a set of images and tags into a repository. + + For details on the format, see the [export image endpoint](#operation/ImageGet). + operationId: ImageLoad + responses: + "200": + description: no error + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: quiet + in: query + description: Suppress progress details during load. + schema: + type: boolean + default: false + - name: platform + in: query + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to load if the image is + multi-platform. If not provided, the full multi-platform image + will be loaded. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + explode: true + schema: + type: array + items: + type: string + requestBody: + content: + application/x-tar: + schema: + type: string + format: binary + description: Tar archive containing images + tags: + - Image + /containers/{id}/exec: + post: + summary: Create an exec instance + description: Run a command inside a running container. + operationId: ContainerExec + responses: + "201": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/IDResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "409": + description: container is paused + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: ID or name of container + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: object + title: ExecConfig + properties: + AttachStdin: + type: boolean + description: Attach to `stdin` of the exec command. + AttachStdout: + type: boolean + description: Attach to `stdout` of the exec command. + AttachStderr: + type: boolean + description: Attach to `stderr` of the exec command. + ConsoleSize: + type: + - array + - "null" + description: Initial console size, as an `[height, width]` array. + minItems: 2 + maxItems: 2 + items: + type: integer + minimum: 0 + example: + - 80 + - 64 + DetachKeys: + type: string + description: | + Override the key sequence for detaching a container. Format is + a single character `[a-Z]` or `ctrl-` where `` + is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. + Tty: + type: boolean + description: Allocate a pseudo-TTY. + Env: + description: | + A list of environment variables in the form `["VAR=value", ...]`. + type: array + items: + type: string + Cmd: + type: array + description: Command to run, as a string or array of strings. + items: + type: string + Privileged: + type: boolean + description: Runs the exec process with extended privileges. + default: false + User: + type: string + description: | + The user, and optionally, group to run the exec process inside + the container. Format is one of: `user`, `user:group`, `uid`, + or `uid:gid`. + WorkingDir: + type: string + description: | + The working directory for the exec process inside the container. + example: + AttachStdin: false + AttachStdout: true + AttachStderr: true + DetachKeys: ctrl-p,ctrl-q + Tty: false + Cmd: + - date + Env: + - FOO=bar + - BAZ=quux + description: Exec configuration + required: true + tags: + - Exec + /exec/{id}/start: + post: + summary: Start an exec instance + description: | + Starts a previously set up exec instance. If detach is true, this endpoint + returns immediately after starting the command. Otherwise, it sets up an + interactive session with the command. + operationId: ExecStart + responses: + "200": + description: No error + "404": + description: No such exec instance + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "409": + description: Container is stopped or paused + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Exec instance ID + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: object + title: ExecStartConfig + properties: + Detach: + type: boolean + description: Detach from the command. + example: false + Tty: + type: boolean + description: Allocate a pseudo-TTY. + example: true + ConsoleSize: + type: + - array + - "null" + description: Initial console size, as an `[height, width]` array. + minItems: 2 + maxItems: 2 + items: + type: integer + minimum: 0 + example: + - 80 + - 64 + tags: + - Exec + /exec/{id}/resize: + post: + summary: Resize an exec instance + description: | + Resize the TTY session used by an exec instance. This endpoint only works + if `tty` was specified as part of creating and starting the exec instance. + operationId: ExecResize + responses: + "200": + description: No error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: No such exec instance + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Exec instance ID + required: true + schema: + type: string + - name: h + in: query + required: true + description: Height of the TTY session in characters + schema: + type: integer + - name: w + in: query + required: true + description: Width of the TTY session in characters + schema: + type: integer + tags: + - Exec + /exec/{id}/json: + get: + summary: Inspect an exec instance + description: Return low-level information about an exec instance. + operationId: ExecInspect + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: ExecInspectResponse + properties: + CanRemove: + type: boolean + DetachKeys: + type: string + ID: + type: string + Running: + type: boolean + ExitCode: + type: integer + ProcessConfig: + $ref: "#/components/schemas/ProcessConfig" + OpenStdin: + type: boolean + OpenStderr: + type: boolean + OpenStdout: + type: boolean + ContainerID: + type: string + Pid: + type: integer + description: The system process ID for the exec process. + examples: + response: + value: + CanRemove: false + ContainerID: b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126 + DetachKeys: "" + ExitCode: 2 + ID: f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b + OpenStderr: true + OpenStdin: true + OpenStdout: true + ProcessConfig: + arguments: + - -c + - exit 2 + entrypoint: sh + privileged: false + tty: true + user: "1000" + Running: false + Pid: 42000 + "404": + description: No such exec instance + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Exec instance ID + required: true + schema: + type: string + tags: + - Exec + /volumes: + get: + summary: List volumes + operationId: VolumeList + responses: + "200": + description: Summary volume data that matches the query + content: + application/json: + schema: + $ref: "#/components/schemas/VolumeListResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + JSON encoded value of the filters (a `map[string][]string`) to + process on the volumes list. Available filters: + + - `dangling=` When set to `true` (or `1`), returns all + volumes that are not in use by a container. When set to `false` + (or `0`), only volumes that are in use by one or more + containers are returned. + - `driver=` Matches volumes based on their driver. + - `label=` or `label=:` Matches volumes based on + the presence of a `label` alone or a `label` and a value. + - `name=` Matches all or part of a volume name. + schema: + type: string + format: json + tags: + - Volume + description: List volumes. + /volumes/create: + post: + summary: Create a volume + operationId: VolumeCreate + responses: + "201": + description: The volume was created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/Volume" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/VolumeCreateRequest" + description: Volume configuration + required: true + tags: + - Volume + description: Create a volume. + /volumes/{name}: + get: + summary: Inspect a volume + operationId: VolumeInspect + responses: + "200": + description: No error + content: + application/json: + schema: + $ref: "#/components/schemas/Volume" + "404": + description: No such volume + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + required: true + description: Volume name or ID + schema: + type: string + tags: + - Volume + description: Inspect a volume. + put: + summary: | + "Update a volume. Valid only for Swarm cluster volumes" + operationId: VolumeUpdate + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such volume + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: The name or ID of the volume + required: true + schema: + type: string + - name: version + in: query + description: | + The version number of the volume being updated. This is required to + avoid conflicting writes. Found in the volume's `ClusterVolume` + field. + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + type: object + description: Volume configuration + properties: + Spec: + $ref: "#/components/schemas/ClusterVolumeSpec" + description: | + The spec of the volume to update. Currently, only Availability may + change. All other fields must remain unchanged. + tags: + - Volume + description: |- + "Update a volume. Valid only for Swarm cluster volumes" + . + delete: + summary: Remove a volume + description: Instruct the driver to remove the volume. + operationId: VolumeDelete + responses: + "204": + description: The volume was removed + "404": + description: No such volume or volume driver + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "409": + description: Volume is in use and cannot be removed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + required: true + description: Volume name or ID + schema: + type: string + - name: force + in: query + description: Force the removal of the volume + schema: + type: boolean + default: false + tags: + - Volume + /volumes/prune: + post: + summary: Delete unused volumes + operationId: VolumePrune + parameters: + - name: filters + in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels. + - `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes. + schema: + type: string + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: VolumePruneResponse + properties: + VolumesDeleted: + description: Volumes that were deleted + type: array + items: + type: string + SpaceReclaimed: + description: Disk space reclaimed in bytes + type: integer + format: int64 + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Volume + description: Delete unused volumes. + /networks: + get: + summary: List networks + description: | + Returns a list of networks. For details on the format, see the + [network inspect endpoint](#operation/NetworkInspect). + + Note that it uses a different, smaller representation of a network than + inspecting a single network. For example, the list of containers attached + to the network is not propagated in API versions 1.28 and up. + operationId: NetworkList + responses: + "200": + description: No error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/NetworkSummary" + examples: + response: + value: + - Name: bridge + Id: f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566 + Created: 2016-10-19T06:21:00.416543526Z + Scope: local + Driver: bridge + EnableIPv4: true + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: default + Config: + - Subnet: 172.17.0.0/16 + Options: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 + com.docker.network.bridge.name: docker0 + com.docker.network.driver.mtu: "1500" + - Name: none + Id: e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794 + Created: 0001-01-01T00:00:00Z + Scope: local + Driver: "null" + EnableIPv4: false + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: default + Config: [] + Containers: {} + Options: {} + - Name: host + Id: 13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e + Created: 0001-01-01T00:00:00Z + Scope: local + Driver: host + EnableIPv4: false + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: default + Config: [] + Containers: {} + Options: {} + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + JSON encoded value of the filters (a `map[string][]string`) to process + on the networks list. + + Available filters: + + - `dangling=` When set to `true` (or `1`), returns all + networks that are not in use by a container. When set to `false` + (or `0`), only networks that are in use by one or more + containers are returned. + - `driver=` Matches a network's driver. + - `id=` Matches all or part of a network ID. + - `label=` or `label==` of a network label. + - `name=` Matches all or part of a network name. + - `scope=["swarm"|"global"|"local"]` Filters networks by scope (`swarm`, `global`, or `local`). + - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. + schema: + type: string + tags: + - Network + /networks/{id}: + get: + summary: Inspect a network + operationId: NetworkInspect + responses: + "200": + description: No error + content: + application/json: + schema: + $ref: "#/components/schemas/NetworkInspect" + "404": + description: Network not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Network ID or name + required: true + schema: + type: string + - name: verbose + in: query + description: Detailed inspect output for troubleshooting + schema: + type: boolean + default: false + - name: scope + in: query + description: Filter the network by scope (swarm, global, or local) + schema: + type: string + tags: + - Network + description: Inspect a network. + delete: + summary: Remove a network + operationId: NetworkDelete + responses: + "204": + description: No error + "403": + description: operation not supported for pre-defined networks + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such network + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Network ID or name + required: true + schema: + type: string + tags: + - Network + description: Remove a network. + /networks/create: + post: + summary: Create a network + operationId: NetworkCreate + responses: + "201": + description: Network created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/NetworkCreateResponse" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "403": + description: | + Forbidden operation. This happens when trying to create a network named after a pre-defined network, + or when trying to create an overlay network on a daemon which is not part of a Swarm cluster. + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: plugin not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + type: object + title: NetworkCreateRequest + required: + - Name + properties: + Name: + description: The network's name. + type: string + example: my_network + Driver: + description: Name of the network driver plugin to use. + type: string + default: bridge + example: bridge + Scope: + description: | + The level at which the network exists (e.g. `swarm` for cluster-wide + or `local` for machine level). + type: string + Internal: + description: Restrict external access to the network. + type: boolean + Attachable: + description: | + Globally scoped network is manually attachable by regular + containers from workers in swarm mode. + type: boolean + example: true + Ingress: + description: | + Ingress network is the network which provides the routing-mesh + in swarm mode. + type: boolean + example: false + ConfigOnly: + description: | + Creates a config-only network. Config-only networks are placeholder + networks for network configurations to be used by other networks. + Config-only networks cannot be used directly to run containers + or services. + type: boolean + default: false + example: false + ConfigFrom: + allOf: + - $ref: "#/components/schemas/ConfigReference" + - description: | + Specifies the source which will provide the configuration for + this network. The specified network must be an existing + config-only network; see ConfigOnly. + IPAM: + allOf: + - $ref: "#/components/schemas/IPAM" + - description: Optional custom IP scheme for the network. + EnableIPv4: + description: Enable IPv4 on the network. + type: boolean + example: true + EnableIPv6: + description: Enable IPv6 on the network. + type: boolean + example: true + Options: + description: Network specific options to be used by the drivers. + type: object + additionalProperties: + type: string + example: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 + com.docker.network.bridge.name: docker0 + com.docker.network.driver.mtu: "1500" + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + description: Network configuration + required: true + tags: + - Network + description: Create a network. + /networks/{id}/connect: + post: + summary: Connect a container to a network + description: The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container + operationId: NetworkConnect + responses: + "200": + description: No error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "403": + description: Operation forbidden + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: Network or container not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Network ID or name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/NetworkConnectRequest" + required: true + tags: + - Network + /networks/{id}/disconnect: + post: + summary: Disconnect a container from a network + operationId: NetworkDisconnect + responses: + "200": + description: No error + "403": + description: Operation not supported for swarm scoped networks + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: Network or container not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Network ID or name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/NetworkDisconnectRequest" + required: true + tags: + - Network + description: Disconnect a container from a network. + /networks/prune: + post: + summary: Delete unused networks + operationId: NetworkPrune + parameters: + - name: filters + in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels. + schema: + type: string + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: NetworkPruneResponse + properties: + NetworksDeleted: + description: Networks that were deleted + type: array + items: + type: string + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Network + description: Delete unused networks. + /plugins: + get: + summary: List plugins + operationId: PluginList + description: Returns information about installed plugins. + responses: + "200": + description: No error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Plugin" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the plugin list. + + Available filters: + + - `capability=` + - `enable=|` + schema: + type: string + tags: + - Plugin + /plugins/privileges: + get: + summary: Get plugin privileges + operationId: GetPluginPrivileges + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/PluginPrivilege" + example: + - Name: network + Description: "" + Value: + - host + - Name: mount + Description: "" + Value: + - /data + - Name: device + Description: "" + Value: + - /dev/cpu_dma_latency + text/plain: + schema: + type: array + items: + $ref: "#/components/schemas/PluginPrivilege" + example: + - Name: network + Description: "" + Value: + - host + - Name: mount + Description: "" + Value: + - /data + - Name: device + Description: "" + Value: + - /dev/cpu_dma_latency + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: remote + in: query + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + tags: + - Plugin + description: Get plugin privileges. + /plugins/pull: + post: + summary: Install a plugin + operationId: PluginPull + description: | + Pulls and installs a plugin. After the plugin is installed, it can be + enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable). + responses: + "204": + description: no error + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: remote + in: query + description: | + Remote reference for plugin to install. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true + schema: + type: string + - name: name + in: query + description: | + Local name for the pulled plugin. + + The `:latest` tag is optional, and is used as the default if omitted. + required: false + schema: + type: string + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. + schema: + type: string + requestBody: + $ref: "#/components/requestBodies/PluginPrivilegeArray" + tags: + - Plugin + /plugins/{name}/json: + get: + summary: Inspect a plugin + operationId: PluginInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Plugin" + text/plain: + schema: + $ref: "#/components/schemas/Plugin" + "404": + description: plugin is not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + tags: + - Plugin + description: Inspect a plugin. + /plugins/{name}: + delete: + summary: Remove a plugin + operationId: PluginDelete + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Plugin" + text/plain: + schema: + $ref: "#/components/schemas/Plugin" + "404": + description: plugin is not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + - name: force + in: query + description: | + Disable the plugin before removing. This may result in issues if the + plugin is in use by a container. + schema: + type: boolean + default: false + tags: + - Plugin + description: Remove a plugin. + /plugins/{name}/enable: + post: + summary: Enable a plugin + operationId: PluginEnable + responses: + "200": + description: no error + "404": + description: plugin is not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + - name: timeout + in: query + description: Set the HTTP client timeout (in seconds) + schema: + type: integer + default: 0 + tags: + - Plugin + description: Enable a plugin. + /plugins/{name}/disable: + post: + summary: Disable a plugin + operationId: PluginDisable + responses: + "200": + description: no error + "404": + description: plugin is not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + - name: force + in: query + description: | + Force disable a plugin even if still in use. + required: false + schema: + type: boolean + tags: + - Plugin + description: Disable a plugin. + /plugins/{name}/upgrade: + post: + summary: Upgrade a plugin + operationId: PluginUpgrade + responses: + "204": + description: no error + "404": + description: plugin not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + - name: remote + in: query + description: | + Remote reference to upgrade to. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true + schema: + type: string + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. + schema: + type: string + requestBody: + $ref: "#/components/requestBodies/PluginPrivilegeArray" + tags: + - Plugin + description: Upgrade a plugin. + /plugins/create: + post: + summary: Create a plugin + operationId: PluginCreate + responses: + "204": + description: no error + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: query + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + requestBody: + content: + application/x-tar: + schema: + type: string + format: binary + description: Path to tar containing plugin rootfs and manifest + tags: + - Plugin + description: Create a plugin. + /plugins/{name}/push: + post: + summary: Push a plugin + operationId: PluginPush + description: | + Push a plugin to the registry. + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + responses: + "200": + description: no error + "404": + description: plugin not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Plugin + /plugins/{name}/set: + post: + summary: Configure a plugin + operationId: PluginSet + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + type: string + example: + - DEBUG=1 + responses: + "204": + description: No error + "404": + description: Plugin not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Plugin + description: Configure a plugin. + /nodes: + get: + summary: List nodes + operationId: NodeList + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Node" + text/plain: + schema: + type: array + items: + $ref: "#/components/schemas/Node" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + Filters to process on the nodes list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `id=` + - `label=` + - `membership=`(`accepted`|`pending`)` + - `name=` + - `node.label=` + - `role=`(`manager`|`worker`)` + schema: + type: string + tags: + - Node + description: List nodes. + /nodes/{id}: + get: + summary: Inspect a node + operationId: NodeInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Node" + text/plain: + schema: + $ref: "#/components/schemas/Node" + "404": + description: no such node + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: The ID or name of the node + required: true + schema: + type: string + tags: + - Node + description: Inspect a node. + delete: + summary: Delete a node + operationId: NodeDelete + responses: + "200": + description: no error + "404": + description: no such node + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: The ID or name of the node + required: true + schema: + type: string + - name: force + in: query + description: Force remove a node from the swarm + schema: + type: boolean + default: false + tags: + - Node + description: Delete a node. + /nodes/{id}/update: + post: + summary: Update a node + operationId: NodeUpdate + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such node + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: The ID of the node + required: true + schema: + type: string + - name: version + in: query + description: | + The version number of the node object being updated. This is required + to avoid conflicting writes. + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/NodeSpec" + text/plain: + schema: + $ref: "#/components/schemas/NodeSpec" + tags: + - Node + description: Update a node. + /swarm: + get: + summary: Inspect swarm + operationId: SwarmInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Swarm" + text/plain: + schema: + $ref: "#/components/schemas/Swarm" + "404": + description: no such swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Swarm + description: Inspect swarm. + /swarm/init: + post: + summary: Initialize a new swarm + operationId: SwarmInit + responses: + "200": + description: no error + content: + application/json: + schema: + description: The node ID + type: string + example: 7v2t30z9blmxuhnyo6s4cpenp + text/plain: + schema: + description: The node ID + type: string + example: 7v2t30z9blmxuhnyo6s4cpenp + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is already part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + type: object + title: SwarmInitRequest + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication, as well + as determining the networking interface used for the VXLAN + Tunnel Endpoint (VTEP). This can either be an address/port + combination in the form `192.168.1.1:4567`, or an interface + followed by a port number, like `eth0:4567`. If the port number + is omitted, the default swarm listening port is used. + type: string + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: string + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + type: string + DataPathPort: + description: | + DataPathPort specifies the data path port number for data traffic. + Acceptable port range is 1024 to 49151. + if no port is set or is set to 0, default port 4789 will be used. + type: integer + format: uint32 + DefaultAddrPool: + description: | + Default Address Pool specifies default subnet pools for global + scope networks. + type: array + items: + type: string + example: + - 10.10.0.0/16 + - 20.20.0.0/16 + ForceNewCluster: + description: Force creation of a new swarm. + type: boolean + SubnetSize: + description: | + SubnetSize specifies the subnet size of the networks created + from the default subnet pool. + type: integer + format: uint32 + Spec: + $ref: "#/components/schemas/SwarmSpec" + example: + ListenAddr: 0.0.0.0:2377 + AdvertiseAddr: 192.168.1.1:2377 + DataPathPort: 4789 + DefaultAddrPool: + - 10.10.0.0/8 + - 20.20.0.0/8 + SubnetSize: 24 + ForceNewCluster: false + Spec: + Orchestration: {} + Raft: {} + Dispatcher: {} + CAConfig: {} + EncryptionConfig: + AutoLockManagers: false + text/plain: + schema: + type: object + title: SwarmInitRequest + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication, as well + as determining the networking interface used for the VXLAN + Tunnel Endpoint (VTEP). This can either be an address/port + combination in the form `192.168.1.1:4567`, or an interface + followed by a port number, like `eth0:4567`. If the port number + is omitted, the default swarm listening port is used. + type: string + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: string + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + type: string + DataPathPort: + description: | + DataPathPort specifies the data path port number for data traffic. + Acceptable port range is 1024 to 49151. + if no port is set or is set to 0, default port 4789 will be used. + type: integer + format: uint32 + DefaultAddrPool: + description: | + Default Address Pool specifies default subnet pools for global + scope networks. + type: array + items: + type: string + example: + - 10.10.0.0/16 + - 20.20.0.0/16 + ForceNewCluster: + description: Force creation of a new swarm. + type: boolean + SubnetSize: + description: | + SubnetSize specifies the subnet size of the networks created + from the default subnet pool. + type: integer + format: uint32 + Spec: + $ref: "#/components/schemas/SwarmSpec" + example: + ListenAddr: 0.0.0.0:2377 + AdvertiseAddr: 192.168.1.1:2377 + DataPathPort: 4789 + DefaultAddrPool: + - 10.10.0.0/8 + - 20.20.0.0/8 + SubnetSize: 24 + ForceNewCluster: false + Spec: + Orchestration: {} + Raft: {} + Dispatcher: {} + CAConfig: {} + EncryptionConfig: + AutoLockManagers: false + required: true + tags: + - Swarm + description: Initialize a new swarm. + /swarm/join: + post: + summary: Join an existing swarm + operationId: SwarmJoin + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is already part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + type: object + title: SwarmJoinRequest + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication if the node + gets promoted to manager, as well as determining the networking + interface used for the VXLAN Tunnel Endpoint (VTEP). This is + required for joining a swarm. If the port number is omitted, + the default swarm listening port is used. + type: string + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: string + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + type: string + RemoteAddrs: + description: | + Addresses of manager nodes already participating in the swarm. + type: array + items: + type: string + JoinToken: + description: Secret token for joining this swarm. + type: string + required: + - ListenAddr + - RemoteAddrs + - JoinToken + example: + ListenAddr: 0.0.0.0:2377 + AdvertiseAddr: 192.168.1.1:2377 + DataPathAddr: 192.168.1.1 + RemoteAddrs: + - node1:2377 + JoinToken: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 + text/plain: + schema: + type: object + title: SwarmJoinRequest + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication if the node + gets promoted to manager, as well as determining the networking + interface used for the VXLAN Tunnel Endpoint (VTEP). This is + required for joining a swarm. If the port number is omitted, + the default swarm listening port is used. + type: string + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: string + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + type: string + RemoteAddrs: + description: | + Addresses of manager nodes already participating in the swarm. + type: array + items: + type: string + JoinToken: + description: Secret token for joining this swarm. + type: string + required: + - ListenAddr + - RemoteAddrs + - JoinToken + example: + ListenAddr: 0.0.0.0:2377 + AdvertiseAddr: 192.168.1.1:2377 + DataPathAddr: 192.168.1.1 + RemoteAddrs: + - node1:2377 + JoinToken: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 + required: true + tags: + - Swarm + description: Join an existing swarm. + /swarm/leave: + post: + summary: Leave a swarm + operationId: SwarmLeave + responses: + "200": + description: no error + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: force + description: | + Force leave swarm, even if this is the last manager or that it will + break the cluster. + in: query + schema: + type: boolean + default: false + tags: + - Swarm + description: Leave a swarm. + /swarm/update: + post: + summary: Update a swarm + operationId: SwarmUpdate + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: version + in: query + description: | + The version number of the swarm object being updated. This is + required to avoid conflicting writes. + required: true + schema: + type: integer + format: int64 + - name: rotateWorkerToken + in: query + description: Rotate the worker join token. + schema: + type: boolean + default: false + - name: rotateManagerToken + in: query + description: Rotate the manager join token. + schema: + type: boolean + default: false + - name: rotateManagerUnlockKey + in: query + description: Rotate the manager unlock key. + schema: + type: boolean + default: false + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/SwarmSpec" + text/plain: + schema: + $ref: "#/components/schemas/SwarmSpec" + required: true + tags: + - Swarm + description: Update a swarm. + /swarm/unlockkey: + get: + summary: Get the unlock key + operationId: SwarmUnlockkey + responses: + "200": + description: no error + content: + application/json: + schema: + type: object + title: UnlockKeyResponse + properties: + UnlockKey: + description: The swarm's unlock key. + type: string + example: + UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 + text/plain: + schema: + type: object + title: UnlockKeyResponse + properties: + UnlockKey: + description: The swarm's unlock key. + type: string + example: + UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Swarm + description: Get the unlock key. + /swarm/unlock: + post: + summary: Unlock a locked manager + operationId: SwarmUnlock + requestBody: + content: + application/json: + schema: + type: object + title: SwarmUnlockRequest + properties: + UnlockKey: + description: The swarm's unlock key. + type: string + example: + UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 + required: true + responses: + "200": + description: no error + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Swarm + description: Unlock a locked manager. + /services: + get: + summary: List services + operationId: ServiceList + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Service" + text/plain: + schema: + type: array + items: + $ref: "#/components/schemas/Service" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the services list. + + Available filters: + + - `id=` + - `label=` + - `mode=["replicated"|"global"]` + - `name=` + schema: + type: string + - name: status + in: query + description: | + Include service status, with count of running and desired tasks. + schema: + type: boolean + tags: + - Service + description: List services. + /services/create: + post: + summary: Create a service + operationId: ServiceCreate + responses: + "201": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/ServiceCreateResponse" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "403": + description: network is not eligible for services + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "409": + description: name conflicts with an existing service + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. + schema: + type: string + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/ServiceSpec" + - type: object + example: + Name: web + TaskTemplate: + ContainerSpec: + Image: nginx:alpine + Mounts: + - ReadOnly: true + Source: web-data + Target: /usr/share/nginx/html + Type: volume + VolumeOptions: + DriverConfig: {} + Labels: + com.example.something: something-value + Hosts: + - 10.10.10.10 host1 + - ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2 + User: "33" + DNSConfig: + Nameservers: + - 8.8.8.8 + Search: + - example.org + Options: + - timeout:3 + Secrets: + - File: + Name: www.example.org.key + UID: "33" + GID: "33" + Mode: 384 + SecretID: fpjqlhnwb19zds35k8wn80lq9 + SecretName: example_org_domain_key + OomScoreAdj: 0 + LogDriver: + Name: json-file + Options: + max-file: "3" + max-size: 10M + Placement: {} + Resources: + Limits: + MemoryBytes: 104857600 + Reservations: {} + RestartPolicy: + Condition: on-failure + Delay: 10000000000 + MaxAttempts: 10 + Mode: + Replicated: + Replicas: 4 + UpdateConfig: + Parallelism: 2 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Ports: + - Protocol: tcp + PublishedPort: 8080 + TargetPort: 80 + Labels: + foo: bar + required: true + tags: + - Service + description: Create a service. + /services/{id}: + get: + summary: Inspect a service + operationId: ServiceInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Service" + text/plain: + schema: + $ref: "#/components/schemas/Service" + "404": + description: no such service + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: ID or name of service. + required: true + schema: + type: string + - name: insertDefaults + in: query + description: Fill empty fields with default values. + schema: + type: boolean + default: false + tags: + - Service + description: Inspect a service. + delete: + summary: Delete a service + operationId: ServiceDelete + responses: + "200": + description: no error + "404": + description: no such service + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: ID or name of service. + required: true + schema: + type: string + tags: + - Service + description: Delete a service. + /services/{id}/update: + post: + summary: Update a service + operationId: ServiceUpdate + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/ServiceUpdateResponse" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such service + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: ID or name of service. + required: true + schema: + type: string + - name: version + in: query + description: | + The version number of the service object being updated. This is + required to avoid conflicting writes. + This version number should be the value as currently set on the + service *before* the update. You can find the current version by + calling `GET /services/{id}` + required: true + schema: + type: integer + - name: registryAuthFrom + in: query + description: | + If the `X-Registry-Auth` header is not specified, this parameter + indicates where to find registry authorization credentials. + schema: + type: string + enum: + - spec + - previous-spec + default: spec + - name: rollback + in: query + description: | + Set to this parameter to `previous` to cause a server-side rollback + to the previous service spec. The supplied spec will be ignored in + this case. + schema: + type: string + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. + schema: + type: string + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/ServiceSpec" + - type: object + example: + Name: top + TaskTemplate: + ContainerSpec: + Image: busybox + Args: + - top + OomScoreAdj: 0 + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: any + MaxAttempts: 0 + Placement: {} + ForceUpdate: 0 + Mode: + Replicated: + Replicas: 1 + UpdateConfig: + Parallelism: 2 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Mode: vip + required: true + tags: + - Service + description: Update a service. + /services/{id}/logs: + get: + summary: Get service logs + description: | + Get `stdout` and `stderr` logs from a service. See also + [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. + operationId: ServiceLogs + responses: + "200": + description: logs returned as a stream in response body + content: + application/vnd.docker.raw-stream: + schema: + type: string + format: binary + application/vnd.docker.multiplexed-stream: + schema: + type: string + format: binary + "404": + description: no such service + content: + application/vnd.docker.raw-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/vnd.docker.multiplexed-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such service: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the service + schema: + type: string + - name: details + in: query + description: Show service context and extra details provided to logs. + schema: + type: boolean + default: false + - name: follow + in: query + description: Keep connection after returning logs. + schema: + type: boolean + default: false + - name: stdout + in: query + description: Return logs from `stdout` + schema: + type: boolean + default: false + - name: stderr + in: query + description: Return logs from `stderr` + schema: + type: boolean + default: false + - name: since + in: query + description: Only return logs since this time, as a UNIX timestamp + schema: + type: integer + default: 0 + - name: timestamps + in: query + description: Add timestamps to every log line + schema: + type: boolean + default: false + - name: tail + in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + schema: + type: string + default: all + tags: + - Service + /tasks: + get: + summary: List tasks + operationId: TaskList + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Task" + example: + - ID: 0kzzo1i0y4jz6027t0k7aezc7 + Version: + Index: 71 + CreatedAt: 2016-06-07T21:07:31.171892745Z + UpdatedAt: 2016-06-07T21:07:31.376370513Z + Spec: + ContainerSpec: + Image: redis + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: any + MaxAttempts: 0 + Placement: {} + ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz + Slot: 1 + NodeID: 60gvrl6tm78dmak4yl7srz94v + Status: + Timestamp: 2016-06-07T21:07:31.290032978Z + State: running + Message: started + ContainerStatus: + ContainerID: e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035 + PID: 677 + DesiredState: running + NetworksAttachments: + - Network: + ID: 4qvuz4ko70xaltuqbt8956gd1 + Version: + Index: 18 + CreatedAt: 2016-06-07T20:31:11.912919752Z + UpdatedAt: 2016-06-07T21:07:29.955277358Z + Spec: + Name: ingress + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + DriverState: + Name: overlay + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: default + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + Addresses: + - 10.255.0.10/16 + - ID: 1yljwbmlr8er2waf8orvqpwms + Version: + Index: 30 + CreatedAt: 2016-06-07T21:07:30.019104782Z + UpdatedAt: 2016-06-07T21:07:30.231958098Z + Name: hopeful_cori + Spec: + ContainerSpec: + Image: redis + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: any + MaxAttempts: 0 + Placement: {} + ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz + Slot: 1 + NodeID: 60gvrl6tm78dmak4yl7srz94v + Status: + Timestamp: 2016-06-07T21:07:30.202183143Z + State: shutdown + Message: shutdown + ContainerStatus: + ContainerID: 1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213 + DesiredState: shutdown + NetworksAttachments: + - Network: + ID: 4qvuz4ko70xaltuqbt8956gd1 + Version: + Index: 18 + CreatedAt: 2016-06-07T20:31:11.912919752Z + UpdatedAt: 2016-06-07T21:07:29.955277358Z + Spec: + Name: ingress + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + DriverState: + Name: overlay + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: default + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + Addresses: + - 10.255.0.5/16 + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the tasks list. + + Available filters: + + - `desired-state=(running | shutdown | accepted)` + - `id=` + - `label=key` or `label="key=value"` + - `name=` + - `node=` + - `service=` + schema: + type: string + tags: + - Task + description: List tasks. + /tasks/{id}: + get: + summary: Inspect a task + operationId: TaskInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Task" + "404": + description: no such task + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: ID of the task + required: true + schema: + type: string + tags: + - Task + description: Inspect a task. + /tasks/{id}/logs: + get: + summary: Get task logs + description: | + Get `stdout` and `stderr` logs from a task. + See also [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. + operationId: TaskLogs + responses: + "200": + description: logs returned as a stream in response body + content: + application/vnd.docker.raw-stream: + schema: + type: string + format: binary + application/vnd.docker.multiplexed-stream: + schema: + type: string + format: binary + "404": + description: no such task + content: + application/vnd.docker.raw-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/vnd.docker.multiplexed-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such task: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID of the task + schema: + type: string + - name: details + in: query + description: Show task context and extra details provided to logs. + schema: + type: boolean + default: false + - name: follow + in: query + description: Keep connection after returning logs. + schema: + type: boolean + default: false + - name: stdout + in: query + description: Return logs from `stdout` + schema: + type: boolean + default: false + - name: stderr + in: query + description: Return logs from `stderr` + schema: + type: boolean + default: false + - name: since + in: query + description: Only return logs since this time, as a UNIX timestamp + schema: + type: integer + default: 0 + - name: timestamps + in: query + description: Add timestamps to every log line + schema: + type: boolean + default: false + - name: tail + in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + schema: + type: string + default: all + tags: + - Task + /secrets: + get: + summary: List secrets + operationId: SecretList + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Secret" + example: + - ID: blt1owaxmitz71s9v5zh81zun + Version: + Index: 85 + CreatedAt: 2017-07-20T13:55:28.678958722Z + UpdatedAt: 2017-07-20T13:55:28.678958722Z + Spec: + Name: mysql-passwd + Labels: + some.label: some.value + Driver: + Name: secret-bucket + Options: + OptionA: value for driver option A + OptionB: value for driver option B + - ID: ktnbjxoalbkvbvedmg1urrz8h + Version: + Index: 11 + CreatedAt: 2016-11-05T01:20:17.327670065Z + UpdatedAt: 2016-11-05T01:20:17.327670065Z + Spec: + Name: app-dev.crt + Labels: + foo: bar + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the secrets list. + + Available filters: + + - `id=` + - `label= or label==value` + - `name=` matches all or part of a secret name (prefix match) + - `names=` matches a secret name (exact match) + schema: + type: string + tags: + - Secret + description: List secrets. + /secrets/create: + post: + summary: Create a secret + operationId: SecretCreate + responses: + "201": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/IDResponse" + "409": + description: name conflicts with an existing object + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/SecretSpec" + - type: object + example: + Name: app-key.crt + Labels: + foo: bar + Data: VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg== + Driver: + Name: secret-bucket + Options: + OptionA: value for driver option A + OptionB: value for driver option B + tags: + - Secret + description: Create a secret. + /secrets/{id}: + get: + summary: Inspect a secret + operationId: SecretInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Secret" + examples: + response: + value: + ID: ktnbjxoalbkvbvedmg1urrz8h + Version: + Index: 11 + CreatedAt: 2016-11-05T01:20:17.327670065Z + UpdatedAt: 2016-11-05T01:20:17.327670065Z + Spec: + Name: app-dev.crt + Labels: + foo: bar + Driver: + Name: secret-bucket + Options: + OptionA: value for driver option A + OptionB: value for driver option B + "404": + description: secret not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID of the secret + schema: + type: string + tags: + - Secret + description: Inspect a secret. + delete: + summary: Delete a secret + operationId: SecretDelete + responses: + "204": + description: no error + "404": + description: secret not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID of the secret + schema: + type: string + tags: + - Secret + description: Delete a secret. + /secrets/{id}/update: + post: + summary: Update a Secret + operationId: SecretUpdate + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such secret + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: The ID or name of the secret + required: true + schema: + type: string + - name: version + in: query + description: | + The version number of the secret object being updated. This is + required to avoid conflicting writes. + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/SecretSpec" + text/plain: + schema: + $ref: "#/components/schemas/SecretSpec" + description: | + The spec of the secret to update. Currently, only the Labels field + can be updated. All other fields must remain unchanged from the + [SecretInspect endpoint](#operation/SecretInspect) response values. + tags: + - Secret + description: Update a Secret. + /configs: + get: + summary: List configs + operationId: ConfigList + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Config" + example: + - ID: ktnbjxoalbkvbvedmg1urrz8h + Version: + Index: 11 + CreatedAt: 2016-11-05T01:20:17.327670065Z + UpdatedAt: 2016-11-05T01:20:17.327670065Z + Spec: + Name: server.conf + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the configs list. + + Available filters: + + - `id=` + - `label= or label==value` + - `name=` matches all or part of a config name (prefix match) + schema: + type: string + tags: + - Config + description: List configs. + /configs/create: + post: + summary: Create a config + operationId: ConfigCreate + responses: + "201": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/IDResponse" + "409": + description: name conflicts with an existing object + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/ConfigSpec" + - type: object + example: + Name: server.conf + Labels: + foo: bar + Data: VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg== + tags: + - Config + description: Create a config. + /configs/{id}: + get: + summary: Inspect a config + operationId: ConfigInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Config" + examples: + response: + value: + ID: ktnbjxoalbkvbvedmg1urrz8h + Version: + Index: 11 + CreatedAt: 2016-11-05T01:20:17.327670065Z + UpdatedAt: 2016-11-05T01:20:17.327670065Z + Spec: + Name: app-dev.crt + "404": + description: config not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID of the config + schema: + type: string + tags: + - Config + description: Inspect a config. + delete: + summary: Delete a config + operationId: ConfigDelete + responses: + "204": + description: no error + "404": + description: config not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID of the config + schema: + type: string + tags: + - Config + description: Delete a config. + /configs/{id}/update: + post: + summary: Update a Config + operationId: ConfigUpdate + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such config + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: The ID or name of the config + required: true + schema: + type: string + - name: version + in: query + description: | + The version number of the config object being updated. This is + required to avoid conflicting writes. + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ConfigSpec" + text/plain: + schema: + $ref: "#/components/schemas/ConfigSpec" + description: | + The spec of the config to update. Currently, only the Labels field + can be updated. All other fields must remain unchanged from the + [ConfigInspect endpoint](#operation/ConfigInspect) response values. + tags: + - Config + description: Update a Config. + /distribution/{name}/json: + get: + summary: Get image information from the registry + description: | + Return image digest and platform information by contacting the registry. + operationId: DistributionInspect + responses: + "200": + description: descriptor and platform information + content: + application/json: + schema: + $ref: "#/components/schemas/DistributionInspect" + "401": + description: Failed authentication or no image found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such image: someimage (tag: latest)" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or id + required: true + schema: + type: string + tags: + - Distribution + /session: + post: + summary: Initialize interactive session + description: | + Start a new interactive session with a server. Session allows server to + call back to the client for advanced capabilities. + + > **Deprecated**: This endpoint is deprecated and will be removed in a future version. + > Server should support gRPC directly on the listening socket. + + ### Hijacking + + This endpoint hijacks the HTTP connection to HTTP2 transport that allows + the client to expose gPRC services on that connection. + + For example, the client sends this request to upgrade the connection: + + ``` + POST /session HTTP/1.1 + Upgrade: h2c + Connection: Upgrade + ``` + + The Docker daemon responds with a `101 UPGRADED` response follow with + the raw stream: + + ``` + HTTP/1.1 101 UPGRADED + Connection: Upgrade + Upgrade: h2c + ``` + operationId: Session + responses: + "101": + description: no error, hijacking successful + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Session +servers: + - url: /v1.55 +components: + requestBodies: + PluginPrivilegeArray: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/PluginPrivilege" + example: + - Name: network + Description: "" + Value: + - host + - Name: mount + Description: "" + Value: + - /data + - Name: device + Description: "" + Value: + - /dev/cpu_dma_latency + text/plain: + schema: + type: array + items: + $ref: "#/components/schemas/PluginPrivilege" + example: + - Name: network + Description: "" + Value: + - host + - Name: mount + Description: "" + Value: + - /data + - Name: device + Description: "" + Value: + - /dev/cpu_dma_latency + schemas: + ImageHistoryResponseItem: + type: object + x-go-name: HistoryResponseItem + title: HistoryResponseItem + description: individual image layer information in response to ImageHistory operation + required: + - Id + - Created + - CreatedBy + - Tags + - Size + - Comment + properties: + Id: + type: string + Created: + type: integer + format: int64 + CreatedBy: + type: string + Tags: + type: array + items: + type: string + Size: + type: integer + format: int64 + Comment: + type: string + PortSummary: + type: object + description: | + Describes a port-mapping between the container and the host. + required: + - PrivatePort + - Type + properties: + IP: + type: string + format: ip-address + description: Host IP address that the container's port is mapped to + x-go-type: + type: Addr + import: + package: net/netip + PrivatePort: + type: integer + format: uint16 + description: Port on the container + PublicPort: + type: integer + format: uint16 + description: Port exposed on the host + Type: + type: string + enum: + - tcp + - udp + - sctp + example: + PrivatePort: 8080 + PublicPort: 80 + Type: tcp + MountType: + description: |- + The mount type. Available types: + + - `bind` a mount of a file or directory from the host into the container. + - `cluster` a Swarm cluster volume. + - `image` an OCI image. + - `npipe` a named pipe from the host into the container. + - `tmpfs` a `tmpfs`. + - `volume` a docker volume with the given `Name`. + type: string + enum: + - bind + - cluster + - image + - npipe + - tmpfs + - volume + example: volume + MountPoint: + type: object + description: | + MountPoint represents a mount point configuration inside the container. + This is used for reporting the mountpoints in use by a container. + properties: + Type: + description: | + The mount type: + + - `bind` a mount of a file or directory from the host into the container. + - `cluster` a Swarm cluster volume. + - `image` an OCI image. + - `npipe` a named pipe from the host into the container. + - `tmpfs` a `tmpfs`. + - `volume` a docker volume with the given `Name`. + allOf: + - $ref: "#/components/schemas/MountType" + example: volume + Name: + description: | + Name is the name reference to the underlying data defined by `Source` + e.g., the volume name. + type: string + example: myvolume + Source: + description: | + Source location of the mount. + + For volumes, this contains the storage location of the volume (within + `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains + the source (host) part of the bind-mount. For `tmpfs` mount points, this + field is empty. + type: string + example: /var/lib/docker/volumes/myvolume/_data + Destination: + description: | + Destination is the path relative to the container root (`/`) where + the `Source` is mounted inside the container. + type: string + example: /usr/share/nginx/html/ + Driver: + description: | + Driver is the volume driver used to create the volume (if it is a volume). + type: string + example: local + Mode: + description: | + Mode is a comma separated list of options supplied by the user when + creating the bind/volume mount. + + The default is platform-specific (`"z"` on Linux, empty on Windows). + type: string + example: z + RW: + description: | + Whether the mount is mounted writable (read-write). + type: boolean + example: true + Propagation: + description: | + Propagation describes how mounts are propagated from the host into the + mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) + for details. This field is not used on Windows. + type: string + example: "" + DeviceMapping: + type: object + description: A device mapping between the host and container + properties: + PathOnHost: + type: string + PathInContainer: + type: string + CgroupPermissions: + type: string + example: + PathOnHost: /dev/deviceName + PathInContainer: /dev/deviceName + CgroupPermissions: mrw + DeviceRequest: + type: object + description: A request for devices to be sent to device drivers + properties: + Driver: + description: | + The name of the device driver to use for this request. + + Note that if this is specified the capabilities are ignored when + selecting a device driver. + type: string + example: nvidia + Count: + type: integer + example: -1 + DeviceIDs: + type: array + items: + type: string + example: + - "0" + - "1" + - GPU-fef8089b-4820-abfc-e83e-94318197576e + Capabilities: + description: | + A list of capabilities; an OR list of AND lists of capabilities. + + Note that if a driver is specified the capabilities have no effect on + selecting a driver as the driver name is used directly. + + Note that if no driver is specified the capabilities are used to + select a driver with the required capabilities. + type: array + items: + type: array + items: + type: string + example: + - - gpu + - nvidia + - compute + Options: + description: | + Driver-specific options, specified as a key/value pairs. These options + are passed directly to the driver. + type: object + additionalProperties: + type: string + ThrottleDevice: + type: object + properties: + Path: + description: Device path + type: string + Rate: + description: Rate + type: integer + format: int64 + minimum: 0 + Mount: + type: object + properties: + Target: + description: Container path. + type: string + Source: + description: |- + Mount source (e.g. a volume name, a host path). The source cannot be + specified when using `Type=tmpfs`. For `Type=bind`, the source path + must either exist, or the `CreateMountpoint` must be set to `true` to + create the source path on the host if missing. + + For `Type=npipe`, the pipe must exist prior to creating the container. + type: string + Type: + description: | + The mount type. Available types: + + - `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container. + - `cluster` a Swarm cluster volume + - `image` Mounts an image. + - `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container. + - `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs. + - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. + allOf: + - $ref: "#/components/schemas/MountType" + ReadOnly: + description: Whether the mount should be read-only. + type: boolean + Consistency: + description: "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." + type: string + BindOptions: + description: Optional configuration for the `bind` type. + type: object + properties: + Propagation: + description: A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`. + type: string + enum: + - private + - rprivate + - shared + - rshared + - slave + - rslave + NonRecursive: + description: Disable recursive bind mount. + type: boolean + default: false + CreateMountpoint: + description: Create mount point on host if missing + type: boolean + default: false + ReadOnlyNonRecursive: + description: | + Make the mount non-recursively read-only, but still leave the mount recursive + (unless NonRecursive is set to `true` in conjunction). + + Added in v1.44, before that version all read-only mounts were + non-recursive by default. To match the previous behaviour this + will default to `true` for clients on versions prior to v1.44. + type: boolean + default: false + ReadOnlyForceRecursive: + description: Raise an error if the mount cannot be made recursively read-only. + type: boolean + default: false + VolumeOptions: + description: Optional configuration for the `volume` type. + type: object + properties: + NoCopy: + description: Populate volume with data from the target. + type: boolean + default: false + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + DriverConfig: + description: Map of driver specific options + type: object + properties: + Name: + description: Name of the driver to use to create the volume. + type: string + Options: + description: key/value map of driver specific options. + type: object + additionalProperties: + type: string + Subpath: + description: Source path inside the volume. Must be relative without any back traversals. + type: string + example: dir-inside-volume/subdirectory + ImageOptions: + description: Optional configuration for the `image` type. + type: object + properties: + Subpath: + description: Source path inside the image. Must be relative without any back traversals. + type: string + example: dir-inside-image/subdirectory + TmpfsOptions: + description: Optional configuration for the `tmpfs` type. + type: object + properties: + SizeBytes: + description: The size for the tmpfs mount in bytes. + type: integer + format: int64 + Mode: + description: | + The permission mode for the tmpfs mount in an integer. + The value must not be in octal format (e.g. 755) but rather + the decimal representation of the octal value (e.g. 493). + type: integer + Options: + description: | + The options to be passed to the tmpfs mount. An array of arrays. + Flag options should be provided as 1-length arrays. Other types + should be provided as as 2-length arrays, where the first item is + the key and the second the value. + type: array + items: + type: array + minItems: 1 + maxItems: 2 + items: + type: string + example: + - - noexec + RestartPolicy: + description: | + The behavior to apply when the container exits. The default is not to + restart. + + An ever increasing delay (double the previous delay, starting at 100ms) is + added before each restart to prevent flooding the server. + type: object + properties: + Name: + type: string + description: | + - Empty string means not to restart + - `no` Do not automatically restart + - `always` Always restart + - `unless-stopped` Restart always except when the user has manually stopped the container + - `on-failure` Restart only when the container exit code is non-zero + enum: + - "" + - no + - always + - unless-stopped + - on-failure + MaximumRetryCount: + type: integer + description: | + If `on-failure` is used, the number of times to retry before giving up. + Resources: + description: A container's resources (cgroups config, ulimits, etc) + type: object + properties: + CpuShares: + description: | + An integer value representing this container's relative CPU weight + versus other containers. + type: integer + Memory: + description: Memory limit in bytes. + type: integer + format: int64 + default: 0 + CgroupParent: + description: | + Path to `cgroups` under which the container's `cgroup` is created. If + the path is not absolute, the path is considered to be relative to the + `cgroups` path of the init process. Cgroups are created if they do not + already exist. + type: string + BlkioWeight: + description: Block IO weight (relative weight). + type: integer + minimum: 0 + maximum: 1000 + BlkioWeightDevice: + description: | + Block IO weight (relative device weight) in the form: + + ``` + [{"Path": "device_path", "Weight": weight}] + ``` + type: array + items: + type: object + properties: + Path: + type: string + Weight: + type: integer + minimum: 0 + BlkioDeviceReadBps: + description: | + Limit read rate (bytes per second) from a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: array + items: + $ref: "#/components/schemas/ThrottleDevice" + BlkioDeviceWriteBps: + description: | + Limit write rate (bytes per second) to a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: array + items: + $ref: "#/components/schemas/ThrottleDevice" + BlkioDeviceReadIOps: + description: | + Limit read rate (IO per second) from a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: array + items: + $ref: "#/components/schemas/ThrottleDevice" + BlkioDeviceWriteIOps: + description: | + Limit write rate (IO per second) to a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: array + items: + $ref: "#/components/schemas/ThrottleDevice" + CpuPeriod: + description: The length of a CPU period in microseconds. + type: integer + format: int64 + CpuQuota: + description: | + Microseconds of CPU time that the container can get in a CPU period. + type: integer + format: int64 + CpuRealtimePeriod: + description: | + The length of a CPU real-time period in microseconds. Set to 0 to + allocate no time allocated to real-time tasks. + type: integer + format: int64 + CpuRealtimeRuntime: + description: | + The length of a CPU real-time runtime in microseconds. Set to 0 to + allocate no time allocated to real-time tasks. + type: integer + format: int64 + CpusetCpus: + description: | + CPUs in which to allow execution (e.g., `0-3`, `0,1`). + type: string + example: 0-3 + CpusetMems: + description: | + Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + effective on NUMA systems. + type: string + Devices: + description: A list of devices to add to the container. + type: array + items: + $ref: "#/components/schemas/DeviceMapping" + DeviceCgroupRules: + description: a list of cgroup rules to apply to the container + type: array + items: + type: string + example: c 13:* rwm + DeviceRequests: + description: | + A list of requests for devices to be sent to device drivers. + type: array + items: + $ref: "#/components/schemas/DeviceRequest" + MemoryReservation: + description: Memory soft limit in bytes. + type: integer + format: int64 + MemorySwap: + description: | + Total memory limit (memory + swap). Set as `-1` to enable unlimited + swap. + type: integer + format: int64 + MemorySwappiness: + description: | + Tune a container's memory swappiness behavior. Accepts an integer + between 0 and 100. + type: integer + format: int64 + minimum: 0 + maximum: 100 + NanoCpus: + description: CPU quota in units of 10-9 CPUs. + type: integer + format: int64 + OomKillDisable: + description: Disable OOM Killer for the container. + type: boolean + Init: + description: | + Run an init inside the container that forwards signals and reaps + processes. This field is omitted if empty, and the default (as + configured on the daemon) is used. + type: + - boolean + - "null" + PidsLimit: + description: | + Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + to not change. + type: + - integer + - "null" + format: int64 + Ulimits: + description: | + A list of resource limits to set in the container. For example: + + ``` + {"Name": "nofile", "Soft": 1024, "Hard": 2048} + ``` + type: array + items: + type: object + properties: + Name: + description: Name of ulimit + type: string + Soft: + description: Soft limit + type: integer + Hard: + description: Hard limit + type: integer + CpuCount: + description: | + The number of usable CPUs (Windows only). + + On Windows Server containers, the processor resource controls are + mutually exclusive. The order of precedence is `CPUCount` first, then + `CPUShares`, and `CPUPercent` last. + type: integer + format: int64 + CpuPercent: + description: | + The usable percentage of the available CPUs (Windows only). + + On Windows Server containers, the processor resource controls are + mutually exclusive. The order of precedence is `CPUCount` first, then + `CPUShares`, and `CPUPercent` last. + type: integer + format: int64 + IOMaximumIOps: + description: Maximum IOps for the container system drive (Windows only) + type: integer + format: int64 + IOMaximumBandwidth: + description: | + Maximum IO in bytes per second for the container system drive + (Windows only). + type: integer + format: int64 + Limit: + description: | + An object describing a limit on resources which can be requested by a task. + type: object + properties: + NanoCPUs: + type: integer + format: int64 + example: 4000000000 + MemoryBytes: + type: integer + format: int64 + example: 8272408576 + Pids: + description: | + Limits the maximum number of PIDs in the container. Set `0` for unlimited. + type: integer + format: int64 + default: 0 + example: 100 + ResourceObject: + description: | + An object describing the resources which can be advertised by a node and + requested by a task. + type: object + properties: + NanoCPUs: + type: integer + format: int64 + example: 4000000000 + MemoryBytes: + type: integer + format: int64 + example: 8272408576 + GenericResources: + $ref: "#/components/schemas/GenericResources" + GenericResources: + description: | + User-defined resources can be either Integer resources (e.g, `SSD=3`) or + String resources (e.g, `GPU=UUID1`). + type: array + items: + type: object + properties: + NamedResourceSpec: + type: object + properties: + Kind: + type: string + Value: + type: string + DiscreteResourceSpec: + type: object + properties: + Kind: + type: string + Value: + type: integer + format: int64 + example: + - DiscreteResourceSpec: + Kind: SSD + Value: 3 + - NamedResourceSpec: + Kind: GPU + Value: UUID1 + - NamedResourceSpec: + Kind: GPU + Value: UUID2 + HealthConfig: + description: | + A test to perform to check that the container is healthy. + Healthcheck commands should be side-effect free. + type: object + properties: + Test: + description: | + The test to perform. Possible values are: + + - `[]` inherit healthcheck from image or parent image + - `["NONE"]` disable healthcheck + - `["CMD", args...]` exec arguments directly + - `["CMD-SHELL", command]` run command with system's default shell + + A non-zero exit code indicates a failed healthcheck: + - `0` healthy + - `1` unhealthy + - `2` reserved (treated as unhealthy) + - other values: error running probe + type: array + items: + type: string + Interval: + description: | + The time to wait between checks in nanoseconds. It should be 0 or at + least 1000000 (1 ms). 0 means inherit. + type: integer + format: int64 + Timeout: + description: | + The time to wait before considering the check to have hung. It should + be 0 or at least 1000000 (1 ms). 0 means inherit. + + If the health check command does not complete within this timeout, + the check is considered failed and the health check process is + forcibly terminated without a graceful shutdown. + type: integer + format: int64 + Retries: + description: | + The number of consecutive failures needed to consider a container as + unhealthy. 0 means inherit. + type: integer + StartPeriod: + description: | + Start period for the container to initialize before starting + health-retries countdown in nanoseconds. It should be 0 or at least + 1000000 (1 ms). 0 means inherit. + type: integer + format: int64 + StartInterval: + description: | + The time to wait between checks in nanoseconds during the start period. + It should be 0 or at least 1000000 (1 ms). 0 means inherit. + type: integer + format: int64 + Health: + description: | + Health stores information about the container's healthcheck results. + type: + - object + - "null" + properties: + Status: + description: | + Status is one of `none`, `starting`, `healthy` or `unhealthy` + + - "none" Indicates there is no healthcheck + - "starting" Starting indicates that the container is not yet ready + - "healthy" Healthy indicates that the container is running correctly + - "unhealthy" Unhealthy indicates that the container has a problem + type: string + enum: + - none + - starting + - healthy + - unhealthy + example: healthy + FailingStreak: + description: FailingStreak is the number of consecutive failures + type: integer + example: 0 + Log: + type: array + description: | + Log contains the last few results (oldest first) + items: + $ref: "#/components/schemas/HealthcheckResult" + HealthcheckResult: + description: | + HealthcheckResult stores information about a single run of a healthcheck probe + type: + - object + - "null" + properties: + Start: + description: | + Date and time at which this check started in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: date-time + example: 2020-01-04T10:44:24.496525531Z + End: + description: | + Date and time at which this check ended in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2020-01-04T10:45:21.364524523Z + ExitCode: + description: | + ExitCode meanings: + + - `0` healthy + - `1` unhealthy + - `2` reserved (considered unhealthy) + - other values: error running probe + type: integer + example: 0 + Output: + description: Output from last check + type: string + HostConfig: + description: Container configuration that depends on the host we are running on + allOf: + - $ref: "#/components/schemas/Resources" + - type: object + properties: + Binds: + type: array + description: | + A list of volume bindings for this container. Each volume binding + is a string in one of these forms: + + - `host-src:container-dest[:options]` to bind-mount a host path + into the container. Both `host-src`, and `container-dest` must + be an _absolute_ path. + - `volume-name:container-dest[:options]` to bind-mount a volume + managed by a volume driver into the container. `container-dest` + must be an _absolute_ path. + + `options` is an optional, comma-delimited list of: + + - `nocopy` disables automatic copying of data from the container + path to the volume. The `nocopy` flag only applies to named volumes. + - `[ro|rw]` mounts a volume read-only or read-write, respectively. + If omitted or set to `rw`, volumes are mounted read-write. + - `[z|Z]` applies SELinux labels to allow or deny multiple containers + to read and write to the same volume. + - `z`: a _shared_ content label is applied to the content. This + label indicates that multiple containers can share the volume + content, for both reading and writing. + - `Z`: a _private unshared_ label is applied to the content. + This label indicates that only the current container can use + a private volume. Labeling systems such as SELinux require + proper labels to be placed on volume content that is mounted + into a container. Without a label, the security system can + prevent a container's processes from using the content. By + default, the labels set by the host operating system are not + modified. + - `[[r]shared|[r]slave|[r]private]` specifies mount + [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). + This only applies to bind-mounted volumes, not internal volumes + or named volumes. Mount propagation requires the source mount + point (the location where the source directory is mounted in the + host operating system) to have the correct propagation properties. + For shared volumes, the source mount point must be set to `shared`. + For slave volumes, the mount must be set to either `shared` or + `slave`. + items: + type: string + ContainerIDFile: + type: string + description: Path to a file where the container ID is written + example: "" + LogConfig: + type: object + description: The logging configuration for this container + properties: + Type: + description: |- + Name of the logging driver used for the container or "none" + if logging is disabled. + type: string + enum: + - local + - json-file + - syslog + - journald + - gelf + - fluentd + - awslogs + - splunk + - etwlogs + - none + Config: + description: Driver-specific configuration options for the logging driver. + type: object + additionalProperties: + type: string + example: + max-file: "5" + max-size: 10m + NetworkMode: + type: string + description: | + Network mode to use for this container. Supported standard values + are: `bridge`, `host`, `none`, and `container:`. Any + other value is taken as a custom network's name to which this + container should connect to. + PortBindings: + $ref: "#/components/schemas/PortMap" + RestartPolicy: + $ref: "#/components/schemas/RestartPolicy" + AutoRemove: + type: boolean + description: | + Automatically remove the container when the container's process + exits. This has no effect if `RestartPolicy` is set. + VolumeDriver: + type: string + description: Driver that this container uses to mount volumes. + VolumesFrom: + type: array + description: | + A list of volumes to inherit from another container, specified in + the form `[:]`. + items: + type: string + Mounts: + description: | + Specification for mounts to be added to the container. + type: array + items: + $ref: "#/components/schemas/Mount" + ConsoleSize: + type: + - array + - "null" + description: | + Initial console size, as an `[height, width]` array. + minItems: 2 + maxItems: 2 + items: + type: integer + minimum: 0 + example: + - 80 + - 64 + Annotations: + type: object + description: | + Arbitrary non-identifying metadata attached to container and + provided to the runtime when the container is started. + additionalProperties: + type: string + CapAdd: + type: array + description: | + A list of kernel capabilities to add to the container. Conflicts + with option 'Capabilities'. + items: + type: string + CapDrop: + type: array + description: | + A list of kernel capabilities to drop from the container. Conflicts + with option 'Capabilities'. + items: + type: string + CgroupnsMode: + type: string + enum: + - private + - host + description: | + cgroup namespace mode for the container. Possible values are: + + - `"private"`: the container runs in its own private cgroup namespace + - `"host"`: use the host system's cgroup namespace + + If not specified, the daemon default is used, which can either be `"private"` + or `"host"`, depending on daemon version, kernel support and configuration. + Dns: + type: array + description: A list of DNS servers for the container to use. + items: + type: string + format: ip-address + x-go-type: + type: Addr + import: + package: net/netip + DnsOptions: + type: array + description: A list of DNS options. + items: + type: string + DnsSearch: + type: array + description: A list of DNS search domains. + items: + type: string + ExtraHosts: + type: array + description: | + A list of hostnames/IP mappings to add to the container's `/etc/hosts` + file. Specified in the form `["hostname:IP"]`. + items: + type: string + GroupAdd: + type: array + description: | + A list of additional groups that the container process will run as. + items: + type: string + IpcMode: + type: string + description: | + IPC sharing mode for the container. Possible values are: + + - `"none"`: own private IPC namespace, with /dev/shm not mounted + - `"private"`: own private IPC namespace + - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers + - `"container:"`: join another (shareable) container's IPC namespace + - `"host"`: use the host system's IPC namespace + + If not specified, daemon default is used, which can either be `"private"` + or `"shareable"`, depending on daemon version and configuration. + Cgroup: + type: string + description: Cgroup to use for the container. + Links: + type: array + description: | + A list of links for the container in the form `container_name:alias`. + items: + type: string + OomScoreAdj: + type: integer + description: | + An integer value containing the score given to the container in + order to tune OOM killer preferences. + example: 500 + PidMode: + type: string + description: | + Set the PID (Process) Namespace mode for the container. It can be + either: + + - `"container:"`: joins another container's PID namespace + - `"host"`: use the host's PID namespace inside the container + Privileged: + type: boolean + description: Gives the container full access to the host. + PublishAllPorts: + type: boolean + description: | + Allocates an ephemeral host port for all of a container's + exposed ports. + + Ports are de-allocated when the container stops and allocated when + the container starts. The allocated port might be changed when + restarting the container. + + The port is selected from the ephemeral port range that depends on + the kernel. For example, on Linux the range is defined by + `/proc/sys/net/ipv4/ip_local_port_range`. + ReadonlyRootfs: + type: boolean + description: Mount the container's root filesystem as read only. + SecurityOpt: + type: array + description: | + A list of string values to customize labels for MLS systems, such + as SELinux. + items: + type: string + StorageOpt: + type: object + description: | + Storage driver options for this container, in the form `{"size": "120G"}`. + additionalProperties: + type: string + Tmpfs: + type: object + description: | + A map of container directories which should be replaced by tmpfs + mounts, and their corresponding mount options. For example: + + ``` + { "/run": "rw,noexec,nosuid,size=65536k" } + ``` + additionalProperties: + type: string + UTSMode: + type: string + description: UTS namespace to use for the container. + UsernsMode: + type: string + description: | + Sets the usernamespace mode for the container when usernamespace + remapping option is enabled. + ShmSize: + type: integer + format: int64 + description: | + Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. + minimum: 0 + Sysctls: + type: + - object + - "null" + description: |- + A list of kernel parameters (sysctls) to set in the container. + + This field is omitted if not set. + additionalProperties: + type: string + example: + net.ipv4.ip_forward: "1" + Runtime: + type: + - string + - "null" + description: Runtime to use with this container. + Isolation: + type: string + description: | + Isolation technology of the container. (Windows only) + enum: + - default + - process + - hyperv + - "" + MaskedPaths: + type: array + description: | + The list of paths to be masked inside the container (this overrides + the default set of paths). + items: + type: string + example: + - /proc/asound + - /proc/acpi + - /proc/kcore + - /proc/keys + - /proc/latency_stats + - /proc/timer_list + - /proc/timer_stats + - /proc/sched_debug + - /proc/scsi + - /sys/firmware + - /sys/devices/virtual/powercap + ReadonlyPaths: + type: array + description: | + The list of paths to be set as read-only inside the container + (this overrides the default set of paths). + items: + type: string + example: + - /proc/bus + - /proc/fs + - /proc/irq + - /proc/sys + - /proc/sysrq-trigger + ContainerConfig: + description: | + Configuration for a container that is portable between hosts. + type: object + properties: + Hostname: + description: | + The hostname to use for the container, as a valid RFC 1123 hostname. + type: string + example: 439f4e91bd1d + Domainname: + description: | + The domain name to use for the container. + type: string + User: + description: |- + Commands run as this user inside the container. If omitted, commands + run as the user specified in the image the container was started from. + + Can be either user-name or UID, and optional group-name or GID, + separated by a colon (`[<:group-name|GID>]`). + type: string + example: 123:456 + AttachStdin: + description: Whether to attach to `stdin`. + type: boolean + default: false + AttachStdout: + description: Whether to attach to `stdout`. + type: boolean + default: true + AttachStderr: + description: Whether to attach to `stderr`. + type: boolean + default: true + ExposedPorts: + description: | + An object mapping ports to an empty object in the form: + + `{"/": {}}` + type: + - object + - "null" + additionalProperties: + type: object + enum: + - {} + default: {} + example: + 80/tcp: {} + 443/tcp: {} + Tty: + description: | + Attach standard streams to a TTY, including `stdin` if it is not closed. + type: boolean + default: false + OpenStdin: + description: Open `stdin` + type: boolean + default: false + StdinOnce: + description: Close `stdin` after one attached client disconnects + type: boolean + default: false + Env: + description: | + A list of environment variables to set inside the container in the + form `["VAR=value", ...]`. A variable without `=` is removed from the + environment, rather than to have an empty value. + type: array + items: + type: string + example: + - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + Cmd: + description: | + Command to run specified as a string or an array of strings. + type: array + items: + type: string + example: + - /bin/sh + Healthcheck: + $ref: "#/components/schemas/HealthConfig" + ArgsEscaped: + description: Command is already escaped (Windows only) + type: + - boolean + - "null" + default: false + example: false + Image: + description: | + The name (or reference) of the image to use when creating the container, + or which was used when the container was created. + type: string + example: example-image:1.0 + Volumes: + description: | + An object mapping mount point paths inside the container to empty + objects. + type: object + additionalProperties: + type: object + enum: + - {} + default: {} + WorkingDir: + description: The working directory for commands to run in. + type: string + example: /public/ + Entrypoint: + description: | + The entry point for the container as a string or an array of strings. + + If the array consists of exactly one empty string (`[""]`) then the + entry point is reset to system default (i.e., the entry point used by + docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + type: array + items: + type: string + example: [] + NetworkDisabled: + description: Disable networking for the container. + type: + - boolean + - "null" + OnBuild: + description: | + `ONBUILD` metadata that were defined in the image's `Dockerfile`. + type: + - array + - "null" + items: + type: string + example: [] + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + StopSignal: + description: | + Signal to stop a container as a string or unsigned integer. + type: + - string + - "null" + example: SIGTERM + StopTimeout: + description: | + Timeout to stop a container in seconds. If omitted, the daemon-wide + default (`default-stop-timeout`) is used. + type: + - integer + - "null" + Shell: + description: | + Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + type: + - array + - "null" + items: + type: string + example: + - /bin/sh + - -c + ImageConfig: + description: | + Configuration of the image. These fields are used as defaults + when starting a container from the image. + type: object + properties: + User: + description: The user that commands are run as inside the container. + type: string + example: web:web + ExposedPorts: + description: | + An object mapping ports to an empty object in the form: + + `{"/": {}}` + type: + - object + - "null" + additionalProperties: + type: object + enum: + - {} + default: {} + example: + 80/tcp: {} + 443/tcp: {} + Env: + description: | + A list of environment variables to set inside the container in the + form `["VAR=value", ...]`. A variable without `=` is removed from the + environment, rather than to have an empty value. + type: array + items: + type: string + example: + - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + Cmd: + description: | + Command to run specified as a string or an array of strings. + type: array + items: + type: string + example: + - /bin/sh + Healthcheck: + $ref: "#/components/schemas/HealthConfig" + ArgsEscaped: + description: Command is already escaped (Windows only) + type: + - boolean + - "null" + default: false + example: false + Volumes: + description: | + An object mapping mount point paths inside the container to empty + objects. + type: object + additionalProperties: + type: object + enum: + - {} + default: {} + example: + /app/data: {} + /app/config: {} + WorkingDir: + description: The working directory for commands to run in. + type: string + example: /public/ + Entrypoint: + description: | + The entry point for the container as a string or an array of strings. + + If the array consists of exactly one empty string (`[""]`) then the + entry point is reset to system default (i.e., the entry point used by + docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + type: array + items: + type: string + example: [] + OnBuild: + description: | + `ONBUILD` metadata that were defined in the image's `Dockerfile`. + type: + - array + - "null" + items: + type: string + example: [] + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + StopSignal: + description: | + Signal to stop a container as a string or unsigned integer. + type: + - string + - "null" + example: SIGTERM + Shell: + description: | + Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + type: + - array + - "null" + items: + type: string + example: + - /bin/sh + - -c + NetworkingConfig: + description: | + NetworkingConfig represents the container's networking configuration for + each of its interfaces. + It is used for the networking configs specified in the `docker create` + and `docker network connect` commands. + type: object + properties: + EndpointsConfig: + description: | + A mapping of network name to endpoint configuration for that network. + The endpoint configuration can be left empty to connect to that + network with no particular endpoint configuration. + type: object + additionalProperties: + $ref: "#/components/schemas/EndpointSettings" + example: + EndpointsConfig: + isolated_nw: + IPAMConfig: + IPv4Address: 172.20.30.33 + IPv6Address: 2001:db8:abcd::3033 + LinkLocalIPs: + - 169.254.34.68 + - fe80::3468 + MacAddress: 02:42:ac:12:05:02 + Links: + - container_1 + - container_2 + Aliases: + - server_x + - server_y + database_nw: {} + NetworkSettings: + description: NetworkSettings exposes the network settings in the API + type: object + properties: + SandboxID: + description: SandboxID uniquely represents a container's network stack. + type: string + example: 9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3 + SandboxKey: + description: SandboxKey is the full path of the netns handle + type: string + example: /var/run/docker/netns/8ab54b426c38 + Ports: + $ref: "#/components/schemas/PortMap" + Networks: + description: | + Information about all networks that the container is connected to. + type: object + additionalProperties: + $ref: "#/components/schemas/EndpointSettings" + Address: + description: Address represents an IPv4 or IPv6 IP address. + type: object + properties: + Addr: + description: IP address. + type: string + PrefixLen: + description: Mask length of the IP address. + type: integer + PortMap: + description: | + PortMap describes the mapping of container ports to host ports, using the + container's port-number and protocol as key in the format `/`, + for example, `80/udp`. + + If a container's port is mapped for multiple protocols, separate entries + are added to the mapping table. + type: object + additionalProperties: + type: + - array + - "null" + items: + $ref: "#/components/schemas/PortBinding" + example: + 443/tcp: + - HostIp: 127.0.0.1 + HostPort: "4443" + 80/tcp: + - HostIp: 0.0.0.0 + HostPort: "80" + - HostIp: 0.0.0.0 + HostPort: "8080" + 80/udp: + - HostIp: 0.0.0.0 + HostPort: "80" + 53/udp: + - HostIp: 0.0.0.0 + HostPort: "53" + 2377/tcp: null + PortBinding: + description: | + PortBinding represents a binding between a host IP address and a host + port. + type: object + properties: + HostIp: + description: Host IP address that the container's port is mapped to. + type: string + example: 127.0.0.1 + x-go-type: + type: Addr + import: + package: net/netip + HostPort: + description: Host port number that the container's port is mapped to. + type: string + example: "4443" + DriverData: + description: | + Information about the storage driver used to store the container's and + image's filesystem. + type: object + required: + - Name + - Data + properties: + Name: + description: Name of the storage driver. + type: string + example: overlay2 + Data: + description: | + Low-level storage metadata, provided as key/value pairs. + + This information is driver-specific, and depends on the storage-driver + in use, and should be used for informational purposes only. + type: object + additionalProperties: + type: string + example: + MergedDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged + UpperDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff + WorkDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work + Storage: + description: | + Information about the storage used by the container. + type: object + properties: + RootFS: + allOf: + - $ref: "#/components/schemas/RootFSStorage" + - anyOf: + - description: | + Information about the storage used for the container's root filesystem. + type: object + - type: "null" + RootFSStorage: + description: | + Information about the storage used for the container's root filesystem. + type: object + x-go-name: RootFSStorage + properties: + Snapshot: + allOf: + - $ref: "#/components/schemas/RootFSStorageSnapshot" + - anyOf: + - description: | + Information about the snapshot used for the container's root filesystem. + type: object + - type: "null" + RootFSStorageSnapshot: + description: | + Information about a snapshot backend of the container's root filesystem. + type: object + x-go-name: RootFSStorageSnapshot + properties: + Name: + description: Name of the snapshotter. + type: string + FilesystemChange: + description: | + Change in the container's filesystem. + type: object + required: + - Path + - Kind + properties: + Path: + description: | + Path to file or directory that has changed. + type: string + Kind: + $ref: "#/components/schemas/ChangeType" + ChangeType: + description: | + Kind of change + + Can be one of: + + - `0`: Modified ("C") + - `1`: Added ("A") + - `2`: Deleted ("D") + type: integer + format: uint8 + enum: + - 0 + - 1 + - 2 + ImageInspect: + description: | + Information about an image in the local image cache. + type: object + properties: + Id: + description: | + ID is the content-addressable ID of an image. + + This identifier is a content-addressable digest calculated from the + image's configuration (which includes the digests of layers used by + the image). + + Note that this digest differs from the `RepoDigests` below, which + holds digests of image manifests that reference the image. + type: string + example: sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710 + Descriptor: + allOf: + - $ref: "#/components/schemas/OCIDescriptor" + - anyOf: + - description: | + Descriptor is an OCI descriptor of the image target. + In case of a multi-platform image, this descriptor points to the OCI index + or a manifest list. + + This field is only present if the daemon provides a multi-platform image store. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + - type: "null" + Manifests: + description: | + Manifests is a list of image manifests available in this image. It + provides a more detailed view of the platform-specific image manifests or + other image-attached data like build attestations. + + Only available if the daemon provides a multi-platform image store + and the `manifests` option is set in the inspect request. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ImageManifestSummary" + Identity: + allOf: + - $ref: "#/components/schemas/Identity" + - anyOf: + - description: |- + Identity holds information about the identity and origin of the image. + This is trusted information verified by the daemon and cannot be modified + by tagging an image to a different name. + - type: "null" + RepoTags: + description: | + List of image names/tags in the local image cache that reference this + image. + + Multiple image tags can refer to the same image, and this list may be + empty if no tags reference the image, in which case the image is + "untagged", in which case it can still be referenced by its ID. + type: array + items: + type: string + example: + - example:1.0 + - example:latest + - example:stable + - internal.registry.example.com:5000/example:1.0 + RepoDigests: + description: | + List of content-addressable digests of locally available image manifests + that the image is referenced from. Multiple manifests can refer to the + same image. + + These digests are usually only available if the image was either pulled + from a registry, or if the image was pushed to a registry, which is when + the manifest is generated and its digest calculated. + type: array + items: + type: string + example: + - example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb + - internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578 + Comment: + description: | + Optional message that was set when committing or importing the image. + type: + - string + - "null" + example: "" + Created: + description: | + Date and time at which the image was created, formatted in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + + This information is only available if present in the image, + and omitted otherwise. + type: + - string + - "null" + format: dateTime + example: 2022-02-04T21:20:12.497794809Z + Author: + description: | + Name of the author that was specified when committing the image, or as + specified through MAINTAINER (deprecated) in the Dockerfile. + type: + - string + - "null" + example: "" + Config: + $ref: "#/components/schemas/ImageConfig" + Architecture: + description: | + Hardware CPU architecture that the image runs on. + type: string + example: arm + Variant: + description: | + CPU architecture variant (presently ARM-only). + type: + - string + - "null" + example: v7 + Os: + description: | + Operating System the image is built to run on. + type: string + example: linux + OsVersion: + description: | + Operating System version the image is built to run on (especially + for Windows). + type: + - string + - "null" + example: "" + Size: + description: | + Total size of the image including all layers it is composed of. + type: integer + format: int64 + example: 1239828 + GraphDriver: + allOf: + - $ref: "#/components/schemas/DriverData" + - anyOf: + - {} + - type: "null" + RootFS: + description: | + Information about the image's RootFS, including the layer IDs. + type: object + required: + - Type + properties: + Type: + type: string + example: layers + Layers: + type: array + items: + type: string + example: + - sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6 + - sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef + Metadata: + description: | + Additional metadata of the image in the local cache. This information + is local to the daemon, and not part of the image itself. + type: object + properties: + LastTagTime: + description: | + Date and time at which the image was last tagged in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + + This information is only available if the image was tagged locally, + and omitted otherwise. + type: + - string + - "null" + format: dateTime + example: 2022-02-28T14:40:02.623929178Z + Identity: + description: |- + Identity holds information about the identity and origin of the image. + This is trusted information verified by the daemon and cannot be modified + by tagging an image to a different name. + type: object + properties: + Signature: + description: Signature contains the properties of verified signatures for the image. + type: array + items: + $ref: "#/components/schemas/SignatureIdentity" + Pull: + description: |- + Pull contains remote location information if image was created via pull. + If image was pulled via mirror, this contains the original repository location. + After successful push this images also contains the pushed repository location. + type: array + items: + $ref: "#/components/schemas/PullIdentity" + Build: + description: Build contains build reference information if image was created via build. + type: array + items: + $ref: "#/components/schemas/BuildIdentity" + BuildIdentity: + description: BuildIdentity contains build reference information if image was created via build. + type: object + properties: + Ref: + description: |- + Ref is the identifier for the build request. This reference can be used to + look up the build details in BuildKit history API. + type: string + CreatedAt: + description: CreatedAt is the time when the build ran. + type: string + format: date-time + PullIdentity: + description: |- + PullIdentity contains remote location information if image was created via pull. + If image was pulled via mirror, this contains the original repository location. + type: object + properties: + Repository: + description: Repository is the remote repository location the image was pulled from. + type: string + SignatureIdentity: + description: SignatureIdentity contains the properties of verified signatures for the image. + type: object + properties: + Name: + description: Name is a textual description summarizing the type of signature. + type: string + Timestamps: + description: Timestamps contains a list of verified signed timestamps for the signature. + type: array + items: + $ref: "#/components/schemas/SignatureTimestamp" + KnownSigner: + allOf: + - $ref: "#/components/schemas/KnownSignerIdentity" + - description: KnownSigner is an identifier for a special signer identity that is known to the implementation. + DockerReference: + description: |- + DockerReference is the Docker image reference associated with the signature. + This is an optional field only present in older hashedrecord signatures. + type: string + Signer: + allOf: + - $ref: "#/components/schemas/SignerIdentity" + - description: Signer contains information about the signer certificate used to sign the image. + SignatureType: + allOf: + - $ref: "#/components/schemas/SignatureType" + - description: SignatureType is the type of signature format. E.g. "bundle-v0.3" or "hashedrecord". + Error: + description: |- + Error contains error information if signature verification failed. + Other fields will be empty in this case. + type: string + Warnings: + description: |- + Warnings contains any warnings that occurred during signature verification. + For example, if there was no internet connectivity and cached trust roots were used. + Warning does not indicate a failed verification but may point to configuration issues. + type: array + items: + type: string + SignatureTimestamp: + description: SignatureTimestamp contains information about a verified signed timestamp for an image signature. + type: object + properties: + Type: + $ref: "#/components/schemas/SignatureTimestampType" + URI: + type: string + Timestamp: + type: string + format: date-time + SignatureTimestampType: + description: SignatureTimestampType is the type of timestamp used in the signature. + type: string + enum: + - Tlog + - TimestampAuthority + SignatureType: + description: SignatureType is the type of signature format. + type: string + enum: + - bundle-v0.3 + - simplesigning-v1 + KnownSignerIdentity: + description: KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation. + type: string + enum: + - DHI + SignerIdentity: + description: SignerIdentity contains information about the signer certificate used to sign the image. + type: object + properties: + CertificateIssuer: + type: string + description: CertificateIssuer is the certificate issuer. + SubjectAlternativeName: + type: string + description: SubjectAlternativeName is the certificate subject alternative name. + Issuer: + type: string + description: |- + The OIDC issuer. Should match `iss` claim of ID token or, in the case of + a federated login like Dex it should match the issuer URL of the + upstream issuer. The issuer is not set the extensions are invalid and + will fail to render. + BuildSignerURI: + type: string + description: Reference to specific build instructions that are responsible for signing. + BuildSignerDigest: + type: string + description: Immutable reference to the specific version of the build instructions that is responsible for signing. + RunnerEnvironment: + type: string + description: Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure. + SourceRepositoryURI: + type: string + description: Source repository URL that the build was based on. + SourceRepositoryDigest: + type: string + description: Immutable reference to a specific version of the source code that the build was based upon. + SourceRepositoryRef: + type: string + description: Source Repository Ref that the build run was based upon. + SourceRepositoryIdentifier: + type: string + description: Immutable identifier for the source repository the workflow was based upon. + SourceRepositoryOwnerURI: + type: string + description: Source repository owner URL of the owner of the source repository that the build was based on. + SourceRepositoryOwnerIdentifier: + type: string + description: Immutable identifier for the owner of the source repository that the workflow was based upon. + BuildConfigURI: + type: string + description: Build Config URL to the top-level/initiating build instructions. + BuildConfigDigest: + type: string + description: Immutable reference to the specific version of the top-level/initiating build instructions. + BuildTrigger: + type: string + description: Event or action that initiated the build. + RunInvocationURI: + type: string + description: Run Invocation URL to uniquely identify the build execution. + SourceRepositoryVisibilityAtSigning: + type: string + description: Source repository visibility at the time of signing the certificate. + ImageSummary: + type: object + x-go-name: Summary + required: + - Id + - ParentId + - RepoTags + - RepoDigests + - Created + - Size + - SharedSize + - Labels + - Containers + properties: + Id: + description: | + ID is the content-addressable ID of an image. + + This identifier is a content-addressable digest calculated from the + image's configuration (which includes the digests of layers used by + the image). + + Note that this digest differs from the `RepoDigests` below, which + holds digests of image manifests that reference the image. + type: string + example: sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710 + ParentId: + description: | + ID of the parent image. + + Depending on how the image was created, this field may be empty and + is only set for images that were built/created locally. This field + is empty if the image was pulled from an image registry. + type: string + example: "" + RepoTags: + description: | + List of image names/tags in the local image cache that reference this + image. + + Multiple image tags can refer to the same image, and this list may be + empty if no tags reference the image, in which case the image is + "untagged", in which case it can still be referenced by its ID. + type: array + items: + type: string + example: + - example:1.0 + - example:latest + - example:stable + - internal.registry.example.com:5000/example:1.0 + RepoDigests: + description: | + List of content-addressable digests of locally available image manifests + that the image is referenced from. Multiple manifests can refer to the + same image. + + These digests are usually only available if the image was either pulled + from a registry, or if the image was pushed to a registry, which is when + the manifest is generated and its digest calculated. + type: array + items: + type: string + example: + - example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb + - internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578 + Created: + description: | + Date and time at which the image was created as a Unix timestamp + (number of seconds since EPOCH). + type: integer + example: "1644009612" + Size: + description: | + Total size of the image including all layers it is composed of. + type: integer + format: int64 + example: 172064416 + SharedSize: + description: | + Total size of image layers that are shared between this image and other + images. + + This size is not calculated by default. `-1` indicates that the value + has not been set / calculated. + type: integer + format: int64 + example: 1239828 + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + Containers: + description: | + Number of containers using this image. Includes both stopped and running + containers. + + `-1` indicates that the value has not been set / calculated. + type: integer + example: 2 + Manifests: + description: | + Manifests is a list of manifests available in this image. + It provides a more detailed view of the platform-specific image manifests + or other image-attached data like build attestations. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + type: array + x-omitempty: true + items: + $ref: "#/components/schemas/ImageManifestSummary" + Descriptor: + allOf: + - $ref: "#/components/schemas/OCIDescriptor" + - anyOf: + - description: | + Descriptor is an OCI descriptor of the image target. + In case of a multi-platform image, this descriptor points to the OCI index + or a manifest list. + + This field is only present if the daemon provides a multi-platform image store. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + - type: "null" + ImagesDiskUsage: + type: object + x-go-name: DiskUsage + x-go-package: github.com/moby/moby/api/types/image + description: | + represents system data usage for image resources. + properties: + ActiveCount: + description: | + Count of active images. + type: integer + format: int64 + example: 1 + TotalCount: + description: | + Count of all images. + type: integer + format: int64 + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing unused images. + type: integer + format: int64 + example: 12345678 + TotalSize: + description: | + Disk space in use by images. + type: integer + format: int64 + example: 98765432 + Items: + description: | + List of image summaries. + type: array + x-omitempty: true + items: + x-go-type: + type: Summary + AuthConfig: + type: object + properties: + username: + type: string + password: + type: string + serveraddress: + type: string + example: + username: hannibal + password: xxxx + serveraddress: https://index.docker.io/v1/ + AuthResponse: + description: | + An identity token was generated successfully. + type: object + required: + - Status + properties: + Status: + description: The status of the authentication + type: string + example: Login Succeeded + IdentityToken: + description: An opaque token used to authenticate a user after a successful login + type: string + example: 9cbaf023786cd7... + ProcessConfig: + type: object + properties: + privileged: + type: boolean + user: + type: string + tty: + type: boolean + entrypoint: + type: string + arguments: + type: array + items: + type: string + Volume: + type: object + required: + - Name + - Driver + - Mountpoint + - Labels + - Scope + - Options + properties: + Name: + type: string + description: Name of the volume. + example: tardis + Driver: + type: string + description: Name of the volume driver used by the volume. + example: custom + Mountpoint: + type: string + description: Mount path of the volume on the host. + example: /var/lib/docker/volumes/tardis + CreatedAt: + type: string + format: dateTime + description: Date/Time the volume was created. + example: 2016-06-07T20:31:11.853781916Z + Status: + type: object + description: | + Low-level details about the volume, provided by the volume driver. + Details are returned as a map with key/value pairs: + `{"key":"value","key2":"value2"}`. + + The `Status` field is optional, and is omitted if the volume driver + does not support this feature. + additionalProperties: + type: object + example: + hello: world + Labels: + type: object + description: User-defined key/value metadata. + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + Scope: + type: string + description: | + The level at which the volume exists. Either `global` for cluster-wide, + or `local` for machine level. + default: local + enum: + - local + - global + example: local + ClusterVolume: + $ref: "#/components/schemas/ClusterVolume" + Options: + type: object + description: | + The driver specific options used when creating the volume. + additionalProperties: + type: string + example: + device: tmpfs + o: size=100m,uid=1000 + type: tmpfs + UsageData: + type: + - object + - "null" + x-go-name: UsageData + required: + - Size + - RefCount + description: | + Usage details about the volume. This information is used by the + `GET /system/df` endpoint, and omitted in other endpoints. + properties: + Size: + type: integer + format: int64 + default: -1 + description: | + Amount of disk space used by the volume (in bytes). This information + is only available for volumes created with the `"local"` volume + driver. For volumes created with other volume drivers, this field + is set to `-1` ("not available") + RefCount: + type: integer + format: int64 + default: -1 + description: | + The number of containers referencing this volume. This field + is set to `-1` if the reference-count is not available. + VolumesDiskUsage: + type: object + x-go-name: DiskUsage + x-go-package: github.com/moby/moby/api/types/volume + description: | + represents system data usage for volume resources. + properties: + ActiveCount: + description: | + Count of active volumes. + type: integer + format: int64 + example: 1 + TotalCount: + description: | + Count of all volumes. + type: integer + format: int64 + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive volumes. + type: integer + format: int64 + example: 12345678 + TotalSize: + description: | + Disk space in use by volumes. + type: integer + format: int64 + example: 98765432 + Items: + description: | + List of volumes. + type: array + x-omitempty: true + items: + x-go-type: + type: Volume + VolumeCreateRequest: + description: Volume configuration + type: object + title: VolumeConfig + x-go-name: CreateRequest + properties: + Name: + description: | + The new volume's name. If not specified, Docker generates a name. + type: string + example: tardis + Driver: + description: Name of the volume driver to use. + type: string + default: local + example: custom + DriverOpts: + description: | + A mapping of driver options and values. These options are + passed directly to the driver and are driver specific. + type: object + additionalProperties: + type: string + example: + device: tmpfs + o: size=100m,uid=1000 + type: tmpfs + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + ClusterVolumeSpec: + $ref: "#/components/schemas/ClusterVolumeSpec" + VolumeListResponse: + type: object + title: VolumeListResponse + x-go-name: ListResponse + description: Volume list response + properties: + Volumes: + type: array + description: List of volumes + items: + $ref: "#/components/schemas/Volume" + Warnings: + type: array + description: | + Warnings that occurred when fetching the list of volumes. + items: + type: string + example: [] + Network: + type: object + properties: + Name: + description: | + Name of the network. + type: string + example: my_network + x-omitempty: false + Id: + description: | + ID that uniquely identifies a network on a single machine. + type: string + x-go-name: ID + x-omitempty: false + example: 7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99 + Created: + description: | + Date and time at which the network was created in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + x-omitempty: false + x-go-type: + type: Time + import: + package: time + hints: + nullable: false + example: 2016-10-19T04:33:30.360899459Z + Scope: + description: | + The level at which the network exists (e.g. `swarm` for cluster-wide + or `local` for machine level) + type: string + x-omitempty: false + example: local + Driver: + description: | + The name of the driver used to create the network (e.g. `bridge`, + `overlay`). + type: string + x-omitempty: false + example: overlay + EnableIPv4: + description: | + Whether the network was created with IPv4 enabled. + type: boolean + x-omitempty: false + example: true + EnableIPv6: + description: | + Whether the network was created with IPv6 enabled. + type: boolean + x-omitempty: false + example: false + IPAM: + allOf: + - $ref: "#/components/schemas/IPAM" + - description: | + The network's IP Address Management. + x-nullable: false + x-omitempty: false + Internal: + description: | + Whether the network is created to only allow internal networking + connectivity. + type: boolean + x-omitempty: false + default: false + example: false + Attachable: + description: | + Whether a global / swarm scope network is manually attachable by regular + containers from workers in swarm mode. + type: boolean + x-omitempty: false + default: false + example: false + Ingress: + description: | + Whether the network is providing the routing-mesh for the swarm cluster. + type: boolean + x-omitempty: false + default: false + example: false + ConfigFrom: + allOf: + - $ref: "#/components/schemas/ConfigReference" + - x-nullable: false + x-omitempty: false + ConfigOnly: + description: | + Whether the network is a config-only network. Config-only networks are + placeholder networks for network configurations to be used by other + networks. Config-only networks cannot be used directly to run containers + or services. + type: boolean + x-omitempty: false + default: false + Options: + description: | + Network-specific options uses when creating the network. + type: object + x-omitempty: false + additionalProperties: + type: string + example: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 + com.docker.network.bridge.name: docker0 + com.docker.network.driver.mtu: "1500" + Labels: + description: | + Metadata specific to the network being created. + type: object + x-omitempty: false + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + Peers: + description: | + List of peer nodes for an overlay network. This field is only present + for overlay networks, and omitted for other network types. + type: array + x-omitempty: true + items: + $ref: "#/components/schemas/PeerInfo" + NetworkSummary: + description: Network list response item + x-go-name: Summary + type: object + allOf: + - $ref: "#/components/schemas/Network" + NetworkInspect: + description: The body of the "get network" http response message. + x-go-name: Inspect + type: object + allOf: + - $ref: "#/components/schemas/Network" + properties: + Containers: + description: | + Contains endpoints attached to the network. + type: object + x-omitempty: false + additionalProperties: + $ref: "#/components/schemas/EndpointResource" + example: + 19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c: + Name: test + EndpointID: 628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a + MacAddress: 02:42:ac:13:00:02 + IPv4Address: 172.19.0.2/16 + IPv6Address: "" + Services: + description: | + List of services using the network. This field is only present for + swarm scope networks, and omitted for local scope networks. + type: object + x-omitempty: true + additionalProperties: + x-go-type: + type: ServiceInfo + hints: + nullable: false + Status: + allOf: + - $ref: "#/components/schemas/NetworkStatus" + - description: | + provides runtime information about the network such as the number of allocated IPs. + NetworkStatus: + description: | + provides runtime information about the network such as the number of allocated IPs. + type: object + x-go-name: Status + properties: + IPAM: + $ref: "#/components/schemas/IPAMStatus" + ServiceInfo: + x-omitempty: false + description: | + represents service parameters with the list of service's tasks + type: object + properties: + VIP: + type: string + x-omitempty: false + x-go-type: + type: Addr + import: + package: net/netip + Ports: + type: array + x-omitempty: false + items: + type: string + LocalLBIndex: + type: integer + format: int + x-omitempty: false + x-go-type: + type: int + Tasks: + type: array + x-omitempty: false + items: + $ref: "#/components/schemas/NetworkTaskInfo" + NetworkTaskInfo: + x-omitempty: false + x-go-name: Task + description: | + carries the information about one backend task + type: object + properties: + Name: + type: string + x-omitempty: false + EndpointID: + type: string + x-omitempty: false + EndpointIP: + type: string + x-omitempty: false + x-go-type: + type: Addr + import: + package: net/netip + Info: + type: object + x-omitempty: false + additionalProperties: + type: string + ConfigReference: + x-omitempty: false + description: | + The config-only network source to provide the configuration for + this network. + type: object + properties: + Network: + description: | + The name of the config-only network that provides the network's + configuration. The specified network must be an existing config-only + network. Only network names are allowed, not network IDs. + type: string + x-omitempty: false + example: config_only_network_01 + IPAM: + type: object + x-omitempty: false + properties: + Driver: + description: Name of the IPAM driver to use. + type: string + default: default + example: default + Config: + description: | + List of IPAM configuration options, specified as a map: + + ``` + {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } + ``` + type: array + items: + $ref: "#/components/schemas/IPAMConfig" + Options: + description: Driver-specific options, specified as a map. + type: object + additionalProperties: + type: string + example: + foo: bar + IPAMConfig: + type: object + properties: + Subnet: + type: string + example: 172.20.0.0/16 + IPRange: + type: string + example: 172.20.10.0/24 + Gateway: + type: string + example: 172.20.10.11 + AuxiliaryAddresses: + type: object + additionalProperties: + type: string + IPAMStatus: + type: object + x-omitempty: false + properties: + Subnets: + type: object + additionalProperties: + $ref: "#/components/schemas/SubnetStatus" + example: + 172.16.0.0/16: + IPsInUse: 3 + DynamicIPsAvailable: 65533 + 2001:db8:abcd:0012::0/96: + IPsInUse: 5 + DynamicIPsAvailable: 4294967291 + x-go-type: + type: SubnetStatuses + kind: map + SubnetStatus: + type: object + x-omitempty: false + properties: + IPsInUse: + description: | + Number of IP addresses in the subnet that are in use or reserved and are therefore unavailable for allocation, saturating at 264 - 1. + type: integer + format: uint64 + x-omitempty: false + DynamicIPsAvailable: + description: | + Number of IP addresses within the network's IPRange for the subnet that are available for allocation, saturating at 264 - 1. + type: integer + format: uint64 + x-omitempty: false + EndpointResource: + type: object + description: | + contains network resources allocated and used for a container in a network. + properties: + Name: + type: string + x-omitempty: false + example: container_1 + EndpointID: + type: string + x-omitempty: false + example: 628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a + MacAddress: + type: string + x-omitempty: false + example: 02:42:ac:13:00:02 + x-go-type: + type: HardwareAddr + IPv4Address: + type: string + x-omitempty: false + example: 172.19.0.2/16 + x-go-type: + type: Prefix + import: + package: net/netip + IPv6Address: + type: string + x-omitempty: false + example: "" + x-go-type: + type: Prefix + import: + package: net/netip + PeerInfo: + description: | + represents one peer of an overlay network. + type: object + properties: + Name: + description: ID of the peer-node in the Swarm cluster. + type: string + x-omitempty: false + example: 6869d7c1732b + IP: + description: IP-address of the peer-node in the Swarm cluster. + type: string + x-omitempty: false + example: 10.133.77.91 + x-go-type: + type: Addr + import: + package: net/netip + NetworkCreateResponse: + description: OK response to NetworkCreate operation + type: object + title: NetworkCreateResponse + x-go-name: CreateResponse + required: + - Id + - Warning + properties: + Id: + description: The ID of the created network. + type: string + example: b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d + Warning: + description: Warnings encountered when creating the container + type: string + example: "" + BuildInfo: + type: object + properties: + id: + type: string + stream: + type: string + errorDetail: + $ref: "#/components/schemas/ErrorDetail" + status: + type: string + progressDetail: + $ref: "#/components/schemas/ProgressDetail" + aux: + $ref: "#/components/schemas/ImageID" + BuildCache: + type: object + description: | + BuildCache contains information about a build cache record. + properties: + ID: + type: string + description: | + Unique ID of the build cache record. + example: ndlpt0hhvkqcdfkputsk4cq9c + Parents: + description: | + List of parent build cache record IDs. + type: + - array + - "null" + items: + type: string + example: + - hw53o5aio51xtltp5xjp8v7fx + Type: + type: string + description: | + Cache record type. + example: regular + enum: + - internal + - frontend + - source.local + - source.git.checkout + - exec.cachemount + - regular + Description: + type: string + description: | + Description of the build-step that produced the build cache. + example: mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache + InUse: + type: boolean + description: | + Indicates if the build cache is in use. + example: false + Shared: + type: boolean + description: | + Indicates if the build cache is shared. + example: true + Size: + description: | + Amount of disk space used by the build cache (in bytes). + type: integer + example: 51 + CreatedAt: + description: | + Date and time at which the build cache was created in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2016-08-18T10:44:24.496525531Z + LastUsedAt: + description: | + Date and time at which the build cache was last used in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: + - string + - "null" + format: dateTime + example: 2017-08-09T07:09:37.632105588Z + UsageCount: + type: integer + example: 26 + BuildCacheDiskUsage: + type: object + x-go-name: DiskUsage + x-go-package: github.com/moby/moby/api/types/build + description: | + represents system data usage for build cache resources. + properties: + ActiveCount: + description: | + Count of active build cache records. + type: integer + format: int64 + example: 1 + TotalCount: + description: | + Count of all build cache records. + type: integer + format: int64 + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive build cache records. + type: integer + format: int64 + example: 12345678 + TotalSize: + description: | + Disk space in use by build cache records. + type: integer + format: int64 + example: 98765432 + Items: + description: | + List of build cache records. + type: array + x-omitempty: true + items: + x-go-type: + type: CacheRecord + ImageID: + type: object + description: Image ID or Digest + properties: + ID: + type: string + example: + ID: sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c + CreateImageInfo: + type: object + properties: + id: + type: string + errorDetail: + $ref: "#/components/schemas/ErrorDetail" + status: + type: string + progressDetail: + $ref: "#/components/schemas/ProgressDetail" + PushImageInfo: + type: object + properties: + errorDetail: + $ref: "#/components/schemas/ErrorDetail" + status: + type: string + progressDetail: + $ref: "#/components/schemas/ProgressDetail" + DeviceInfo: + type: object + description: | + DeviceInfo represents a device that can be used by a container. + properties: + Source: + type: string + example: cdi + description: | + The origin device driver. + ID: + type: string + example: vendor.com/gpu=0 + description: | + The unique identifier for the device within its source driver. + For CDI devices, this would be an FQDN like "vendor.com/gpu=0". + NRIInfo: + description: | + Information about the Node Resource Interface (NRI). + + This field is only present if NRI is enabled. + type: + - object + - "null" + properties: + Info: + description: | + Information about NRI, provided as "label" / "value" pairs. + + + + + + + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: array + items: + type: array + items: + type: string + example: + - - plugin-path + - /opt/docker/nri/plugins + ErrorDetail: + type: object + properties: + code: + type: integer + message: + type: string + ProgressDetail: + type: object + properties: + current: + type: integer + total: + type: integer + ErrorResponse: + description: Represents an error. + type: object + required: + - message + properties: + message: + description: The error message. + type: string + example: + message: Something went wrong. + IDResponse: + description: Response to an API call that returns just an Id + type: object + x-go-name: IDResponse + required: + - Id + properties: + Id: + description: The id of the newly created object. + type: string + NetworkConnectRequest: + description: | + NetworkConnectRequest represents the data to be used to connect a container to a network. + type: object + x-go-name: ConnectRequest + required: + - Container + properties: + Container: + type: string + description: The ID or name of the container to connect to the network. + example: 3613f73ba0e4 + EndpointConfig: + allOf: + - $ref: "#/components/schemas/EndpointSettings" + - anyOf: + - {} + - type: "null" + NetworkDisconnectRequest: + description: | + NetworkDisconnectRequest represents the data to be used to disconnect a container from a network. + type: object + x-go-name: DisconnectRequest + required: + - Container + properties: + Container: + type: string + description: The ID or name of the container to disconnect from the network. + example: 3613f73ba0e4 + Force: + type: boolean + description: Force the container to disconnect from the network. + default: false + x-omitempty: false + example: false + EndpointSettings: + description: Configuration for a network endpoint. + type: object + properties: + IPAMConfig: + $ref: "#/components/schemas/EndpointIPAMConfig" + Links: + type: array + items: + type: string + example: + - container_1 + - container_2 + MacAddress: + description: | + MAC address for the endpoint on this network. The network driver might ignore this parameter. + type: string + example: 02:42:ac:11:00:04 + x-go-type: + type: HardwareAddr + Aliases: + type: array + items: + type: string + example: + - server_x + - server_y + DriverOpts: + description: | + DriverOpts is a mapping of driver options and values. These options + are passed directly to the driver and are driver specific. + type: + - object + - "null" + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + GwPriority: + description: | + This property determines which endpoint will provide the default + gateway for a container. The endpoint with the highest priority will + be used. If multiple endpoints have the same priority, endpoints are + lexicographically sorted based on their network name, and the one + that sorts first is picked. + type: integer + format: int64 + example: + - 10 + NetworkID: + description: | + Unique ID of the network. + type: string + example: 08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a + EndpointID: + description: | + Unique ID for the service endpoint in a Sandbox. + type: string + example: b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b + Gateway: + description: | + Gateway address for this network. + type: string + example: 172.17.0.1 + IPAddress: + description: | + IPv4 address. + type: string + example: 172.17.0.4 + x-go-type: + type: Addr + import: + package: net/netip + IPPrefixLen: + description: | + Mask length of the IPv4 address. + type: integer + example: 16 + IPv6Gateway: + description: | + IPv6 gateway address. + type: string + example: 2001:db8:2::100 + x-go-type: + type: Addr + import: + package: net/netip + GlobalIPv6Address: + description: | + Global IPv6 address. + type: string + example: 2001:db8::5689 + x-go-type: + type: Addr + import: + package: net/netip + GlobalIPv6PrefixLen: + description: | + Mask length of the global IPv6 address. + type: integer + format: int64 + example: 64 + DNSNames: + description: | + List of all DNS names an endpoint has on a specific network. This + list is based on the container name, network aliases, container short + ID, and hostname. + + These DNS names are non-fully qualified but can contain several dots. + You can get fully qualified DNS names by appending `.`. + For instance, if container name is `my.ctr` and the network is named + `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be + `my.ctr.testnet`. + type: array + items: + type: string + example: + - foobar + - server_x + - server_y + - my.ctr + EndpointIPAMConfig: + description: | + EndpointIPAMConfig represents an endpoint's IPAM configuration. + type: + - object + - "null" + properties: + IPv4Address: + type: string + example: 172.20.30.33 + x-go-type: + type: Addr + import: + package: net/netip + IPv6Address: + type: string + example: 2001:db8:abcd::3033 + x-go-type: + type: Addr + import: + package: net/netip + LinkLocalIPs: + type: array + items: + type: string + x-go-type: + type: Addr + import: + package: net/netip + example: + - 169.254.34.68 + - fe80::3468 + PluginMount: + type: object + x-go-name: Mount + required: + - Name + - Description + - Settable + - Source + - Destination + - Type + - Options + properties: + Name: + type: string + example: some-mount + Description: + type: string + example: This is a mount that's used by the plugin. + Settable: + type: array + items: + type: string + Source: + type: string + example: /var/lib/docker/plugins/ + Destination: + type: string + example: /mnt/state + Type: + type: string + example: bind + Options: + type: array + items: + type: string + example: + - rbind + - rw + PluginDevice: + type: object + x-go-name: Device + required: + - Name + - Description + - Settable + - Path + properties: + Name: + type: string + Description: + type: string + Settable: + type: array + items: + type: string + Path: + type: string + example: /dev/fuse + PluginEnv: + type: object + x-go-name: Env + required: + - Name + - Description + - Settable + - Value + properties: + Name: + type: string + Description: + type: string + Settable: + type: array + items: + type: string + Value: + type: string + PluginPrivilege: + description: | + Describes a permission the user has to accept upon installing + the plugin. + type: object + x-go-name: Privilege + properties: + Name: + type: string + example: network + Description: + type: string + Value: + type: array + items: + type: string + example: + - host + Plugin: + description: A plugin for the Engine API + type: object + x-go-name: Plugin + required: + - Settings + - Enabled + - Config + - Name + properties: + Id: + type: string + example: 5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078 + Name: + type: string + example: tiborvass/sample-volume-plugin + Enabled: + description: True if the plugin is running. False if the plugin is not running, only installed. + type: boolean + example: true + Settings: + description: user-configurable settings for the plugin. + type: object + x-go-name: Settings + required: + - Args + - Devices + - Env + - Mounts + properties: + Mounts: + type: array + items: + $ref: "#/components/schemas/PluginMount" + Env: + type: array + items: + type: string + example: + - DEBUG=0 + Args: + type: array + items: + type: string + Devices: + type: array + items: + $ref: "#/components/schemas/PluginDevice" + PluginReference: + description: plugin remote reference used to push/pull the plugin + type: string + x-go-name: PluginReference + example: localhost:5000/tiborvass/sample-volume-plugin:latest + Config: + description: The config of a plugin. + type: object + x-go-name: Config + required: + - Description + - Documentation + - Interface + - Entrypoint + - WorkDir + - Network + - Linux + - PidHost + - PropagatedMount + - IpcHost + - Mounts + - Env + - Args + properties: + Description: + type: string + example: A sample volume plugin for Docker + Documentation: + type: string + example: https://docs.docker.com/engine/extend/plugins/ + Interface: + description: The interface between Docker and the plugin + type: object + x-go-name: Interface + required: + - Types + - Socket + properties: + Types: + type: array + items: + type: string + x-go-type: + type: CapabilityID + example: + - docker.volumedriver/1.0 + Socket: + type: string + example: plugins.sock + ProtocolScheme: + type: string + example: some.protocol/v1.0 + description: Protocol to use for clients connecting to the plugin. + enum: + - "" + - moby.plugins.http/v1 + Entrypoint: + type: array + items: + type: string + example: + - /usr/bin/sample-volume-plugin + - /data + WorkDir: + type: string + example: /bin/ + User: + type: object + x-go-name: User + properties: + UID: + type: integer + format: uint32 + example: 1000 + GID: + type: integer + format: uint32 + example: 1000 + Network: + type: object + x-go-name: NetworkConfig + required: + - Type + properties: + Type: + type: string + example: host + Linux: + type: object + x-go-name: LinuxConfig + required: + - Capabilities + - AllowAllDevices + - Devices + properties: + Capabilities: + type: array + items: + type: string + example: + - CAP_SYS_ADMIN + - CAP_SYSLOG + AllowAllDevices: + type: boolean + example: false + Devices: + type: array + items: + $ref: "#/components/schemas/PluginDevice" + PropagatedMount: + type: string + example: /mnt/volumes + IpcHost: + type: boolean + example: false + PidHost: + type: boolean + example: false + Mounts: + type: array + items: + $ref: "#/components/schemas/PluginMount" + Env: + type: array + items: + $ref: "#/components/schemas/PluginEnv" + example: + - Name: DEBUG + Description: If set, prints debug messages + Settable: null + Value: "0" + Args: + type: object + x-go-name: Args + required: + - Name + - Description + - Settable + - Value + properties: + Name: + type: string + example: args + Description: + type: string + example: command line arguments + Settable: + type: array + items: + type: string + Value: + type: array + items: + type: string + rootfs: + type: object + x-go-name: RootFS + properties: + type: + type: string + example: layers + diff_ids: + type: array + items: + type: string + example: + - sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887 + - sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8 + ObjectVersion: + description: | + The version number of the object such as node, service, etc. This is needed + to avoid conflicting writes. The client must send the version number along + with the modified specification when updating these objects. + + This approach ensures safe concurrency and determinism in that the change + on the object may not be applied if the version number has changed from the + last read. In other words, if two update requests specify the same base + version, only one of the requests can succeed. As a result, two separate + update requests that happen at the same time will not unintentionally + overwrite each other. + type: object + properties: + Index: + type: integer + format: uint64 + example: 373531 + NodeSpec: + type: object + properties: + Name: + description: Name for the node. + type: string + example: my-node + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + Role: + description: Role of the node. + type: string + enum: + - worker + - manager + example: manager + Availability: + description: Availability of the node. + type: string + enum: + - active + - pause + - drain + example: active + example: + Availability: active + Name: node-name + Role: manager + Labels: + foo: bar + Node: + type: object + properties: + ID: + type: string + example: 24ifsmvkjbyhk + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + description: | + Date and time at which the node was added to the swarm in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2016-08-18T10:44:24.496525531Z + UpdatedAt: + description: | + Date and time at which the node was last updated in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2017-08-09T07:09:37.632105588Z + Spec: + $ref: "#/components/schemas/NodeSpec" + Description: + $ref: "#/components/schemas/NodeDescription" + Status: + $ref: "#/components/schemas/NodeStatus" + ManagerStatus: + $ref: "#/components/schemas/ManagerStatus" + NodeDescription: + description: | + NodeDescription encapsulates the properties of the Node as reported by the + agent. + type: object + properties: + Hostname: + type: string + example: bf3067039e47 + Platform: + $ref: "#/components/schemas/Platform" + Resources: + $ref: "#/components/schemas/ResourceObject" + Engine: + $ref: "#/components/schemas/EngineDescription" + TLSInfo: + $ref: "#/components/schemas/TLSInfo" + Platform: + description: | + Platform represents the platform (Arch/OS). + type: object + properties: + Architecture: + description: | + Architecture represents the hardware architecture (for example, + `x86_64`). + type: string + example: x86_64 + OS: + description: | + OS represents the Operating System (for example, `linux` or `windows`). + type: string + example: linux + EngineDescription: + description: EngineDescription provides information about an engine. + type: object + properties: + EngineVersion: + type: string + example: 17.06.0 + Labels: + type: object + additionalProperties: + type: string + example: + foo: bar + Plugins: + type: array + items: + type: object + properties: + Type: + type: string + Name: + type: string + example: + - Type: Log + Name: awslogs + - Type: Log + Name: fluentd + - Type: Log + Name: gcplogs + - Type: Log + Name: gelf + - Type: Log + Name: journald + - Type: Log + Name: json-file + - Type: Log + Name: splunk + - Type: Log + Name: syslog + - Type: Network + Name: bridge + - Type: Network + Name: host + - Type: Network + Name: ipvlan + - Type: Network + Name: macvlan + - Type: Network + Name: "null" + - Type: Network + Name: overlay + - Type: Volume + Name: local + - Type: Volume + Name: localhost:5000/vieux/sshfs:latest + - Type: Volume + Name: vieux/sshfs:latest + TLSInfo: + description: | + Information about the issuer of leaf TLS certificates and the trusted root + CA certificate. + type: object + properties: + TrustRoot: + description: | + The root CA certificate(s) that are used to validate leaf TLS + certificates. + type: string + CertIssuerSubject: + description: The base64-url-safe-encoded raw subject bytes of the issuer. + type: string + CertIssuerPublicKey: + description: | + The base64-url-safe-encoded raw public key bytes of the issuer. + type: string + example: + TrustRoot: | + -----BEGIN CERTIFICATE----- + MIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw + EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0 + MzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH + A0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf + 3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB + Af8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO + PQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz + pxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H + -----END CERTIFICATE----- + CertIssuerSubject: MBMxETAPBgNVBAMTCHN3YXJtLWNh + CertIssuerPublicKey: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A== + NodeStatus: + description: | + NodeStatus represents the status of a node. + + It provides the current status of the node, as seen by the manager. + type: object + properties: + State: + $ref: "#/components/schemas/NodeState" + Message: + type: string + example: "" + Addr: + description: IP address of the node. + type: string + example: 172.17.0.2 + NodeState: + description: NodeState represents the state of a node. + type: string + enum: + - unknown + - down + - ready + - disconnected + example: ready + ManagerStatus: + description: | + ManagerStatus represents the status of a manager. + + It provides the current status of a node's manager component, if the node + is a manager. + type: + - object + - "null" + properties: + Leader: + type: boolean + default: false + example: true + Reachability: + $ref: "#/components/schemas/Reachability" + Addr: + description: | + The IP address and port at which the manager is reachable. + type: string + example: 10.0.0.46:2377 + Reachability: + description: Reachability represents the reachability of a node. + type: string + enum: + - unknown + - unreachable + - reachable + example: reachable + SwarmSpec: + description: User modifiable swarm configuration. + type: object + properties: + Name: + description: Name of the swarm. + type: string + example: default + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.corp.type: production + com.example.corp.department: engineering + Orchestration: + description: Orchestration configuration. + type: + - object + - "null" + properties: + TaskHistoryRetentionLimit: + description: | + The number of historic tasks to keep per instance or node. If + negative, never remove completed or failed tasks. + type: integer + format: int64 + example: 10 + Raft: + description: Raft configuration. + type: object + properties: + SnapshotInterval: + description: The number of log entries between snapshots. + type: integer + format: uint64 + example: 10000 + KeepOldSnapshots: + description: | + The number of snapshots to keep beyond the current snapshot. + type: integer + format: uint64 + LogEntriesForSlowFollowers: + description: | + The number of log entries to keep around to sync up slow followers + after a snapshot is created. + type: integer + format: uint64 + example: 500 + ElectionTick: + description: | + The number of ticks that a follower will wait for a message from + the leader before becoming a candidate and starting an election. + `ElectionTick` must be greater than `HeartbeatTick`. + + A tick currently defaults to one second, so these translate + directly to seconds currently, but this is NOT guaranteed. + type: integer + example: 3 + HeartbeatTick: + description: | + The number of ticks between heartbeats. Every HeartbeatTick ticks, + the leader will send a heartbeat to the followers. + + A tick currently defaults to one second, so these translate + directly to seconds currently, but this is NOT guaranteed. + type: integer + example: 1 + Dispatcher: + description: Dispatcher configuration. + type: + - object + - "null" + properties: + HeartbeatPeriod: + description: | + The delay for an agent to send a heartbeat to the dispatcher. + type: integer + format: int64 + example: 5000000000 + CAConfig: + description: CA configuration. + type: + - object + - "null" + properties: + NodeCertExpiry: + description: The duration node certificates are issued for. + type: integer + format: int64 + example: 7776000000000000 + ExternalCAs: + description: | + Configuration for forwarding signing requests to an external + certificate authority. + type: array + items: + type: object + properties: + Protocol: + description: | + Protocol for communication with the external CA (currently + only `cfssl` is supported). + type: string + enum: + - cfssl + default: cfssl + URL: + description: | + URL where certificate signing requests should be sent. + type: string + Options: + description: | + An object with key/value pairs that are interpreted as + protocol-specific options for the external CA driver. + type: object + additionalProperties: + type: string + CACert: + description: | + The root CA certificate (in PEM format) this external CA uses + to issue TLS certificates (assumed to be to the current swarm + root CA certificate if not provided). + type: string + SigningCACert: + description: | + The desired signing CA certificate for all swarm node TLS leaf + certificates, in PEM format. + type: string + SigningCAKey: + description: | + The desired signing CA key for all swarm node TLS leaf certificates, + in PEM format. + type: string + ForceRotate: + description: | + An integer whose purpose is to force swarm to generate a new + signing CA certificate and key, if none have been specified in + `SigningCACert` and `SigningCAKey` + format: uint64 + type: integer + EncryptionConfig: + description: Parameters related to encryption-at-rest. + type: object + properties: + AutoLockManagers: + description: | + If set, generate a key and use it to lock data stored on the + managers. + type: boolean + example: false + TaskDefaults: + description: Defaults for creating tasks in this cluster. + type: object + properties: + LogDriver: + description: | + The log driver to use for tasks created in the orchestrator if + unspecified by a service. + + Updating this value only affects new tasks. Existing tasks continue + to use their previously configured log driver until recreated. + type: object + properties: + Name: + description: | + The log driver to use as a default for new tasks. + type: string + example: json-file + Options: + description: | + Driver-specific options for the selected log driver, specified + as key/value pairs. + type: object + additionalProperties: + type: string + example: + max-file: "10" + max-size: 100m + ClusterInfo: + description: | + ClusterInfo represents information about the swarm as is returned by the + "/info" endpoint. Join-tokens are not included. + type: + - object + - "null" + properties: + ID: + description: The ID of the swarm. + type: string + example: abajmipo7b4xz5ip2nrla6b11 + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + description: | + Date and time at which the swarm was initialised in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2016-08-18T10:44:24.496525531Z + UpdatedAt: + description: | + Date and time at which the swarm was last updated in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2017-08-09T07:09:37.632105588Z + Spec: + $ref: "#/components/schemas/SwarmSpec" + TLSInfo: + $ref: "#/components/schemas/TLSInfo" + RootRotationInProgress: + description: | + Whether there is currently a root CA rotation in progress for the swarm + type: boolean + example: false + DataPathPort: + description: | + DataPathPort specifies the data path port number for data traffic. + Acceptable port range is 1024 to 49151. + If no port is set or is set to 0, the default port (4789) is used. + type: integer + format: uint32 + default: 4789 + example: 4789 + DefaultAddrPool: + description: | + Default Address Pool specifies default subnet pools for global scope + networks. + type: array + items: + type: string + format: CIDR + example: + - 10.10.0.0/16 + - 20.20.0.0/16 + SubnetSize: + description: | + SubnetSize specifies the subnet size of the networks created from the + default subnet pool. + type: integer + format: uint32 + maximum: 29 + default: 24 + example: 24 + JoinTokens: + description: | + JoinTokens contains the tokens workers and managers need to join the swarm. + type: object + properties: + Worker: + description: | + The token workers can use to join the swarm. + type: string + example: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx + Manager: + description: | + The token managers can use to join the swarm. + type: string + example: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 + Swarm: + type: object + allOf: + - $ref: "#/components/schemas/ClusterInfo" + - type: object + properties: + JoinTokens: + $ref: "#/components/schemas/JoinTokens" + TaskSpec: + description: User modifiable task configuration. + type: object + properties: + PluginSpec: + type: object + description: | + Plugin spec for the service. *(Experimental release only.)* + + + + + + + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + properties: + Name: + description: The name or 'alias' to use for the plugin. + type: string + Remote: + description: The plugin image reference to use. + type: string + Disabled: + description: Disable the plugin once scheduled. + type: boolean + PluginPrivilege: + type: array + items: + $ref: "#/components/schemas/PluginPrivilege" + ContainerSpec: + type: object + description: | + Container spec for the service. + + + + + + + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + properties: + Image: + description: The image name to use for the container + type: string + Labels: + description: User-defined key/value data. + type: object + additionalProperties: + type: string + Command: + description: The command to be run in the image. + type: array + items: + type: string + Args: + description: Arguments to the command. + type: array + items: + type: string + Hostname: + description: | + The hostname to use for the container, as a valid + [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. + type: string + Env: + description: | + A list of environment variables in the form `VAR=value`. + type: array + items: + type: string + Dir: + description: The working directory for commands to run in. + type: string + User: + description: The user inside the container. + type: string + Groups: + type: array + description: | + A list of additional groups that the container process will run as. + items: + type: string + Privileges: + type: object + description: Security options for the container + properties: + CredentialSpec: + type: object + description: CredentialSpec for managed service account (Windows only) + properties: + Config: + type: string + example: 0bt9dmxjvjiqermk6xrop3ekq + description: | + Load credential spec from a Swarm Config with the given ID. + The specified config must also be present in the Configs + field with the Runtime property set. + + + + + + + + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + File: + type: string + example: spec.json + description: | + Load credential spec from this file. The file is read by + the daemon, and must be present in the `CredentialSpecs` + subdirectory in the docker data directory, which defaults + to `C:\ProgramData\Docker\` on Windows. + + For example, specifying `spec.json` loads + `C:\ProgramData\Docker\CredentialSpecs\spec.json`. + + + + + + + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + Registry: + type: string + description: | + Load credential spec from this value in the Windows + registry. The specified registry value must be located in: + + `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` + + + + + + + + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + SELinuxContext: + type: object + description: SELinux labels of the container + properties: + Disable: + type: boolean + description: Disable SELinux + User: + type: string + description: SELinux user label + Role: + type: string + description: SELinux role label + Type: + type: string + description: SELinux type label + Level: + type: string + description: SELinux level label + Seccomp: + type: object + description: Options for configuring seccomp on the container + properties: + Mode: + type: string + enum: + - default + - unconfined + - custom + Profile: + description: The custom seccomp profile as a json object + type: string + AppArmor: + type: object + description: Options for configuring AppArmor on the container + properties: + Mode: + type: string + enum: + - default + - disabled + NoNewPrivileges: + type: boolean + description: Configuration of the no_new_privs bit in the container + TTY: + description: Whether a pseudo-TTY should be allocated. + type: boolean + OpenStdin: + description: Open `stdin` + type: boolean + ReadOnly: + description: Mount the container's root filesystem as read only. + type: boolean + Mounts: + description: | + Specification for mounts to be added to containers created as part + of the service. + type: array + items: + $ref: "#/components/schemas/Mount" + StopSignal: + description: Signal to stop the container. + type: string + StopGracePeriod: + description: | + Amount of time to wait for the container to terminate before + forcefully killing it. + type: integer + format: int64 + Healthcheck: + $ref: "#/components/schemas/HealthConfig" + Hosts: + type: array + description: | + A list of hostname/IP mappings to add to the container's `hosts` + file. The format of extra hosts is specified in the + [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) + man page: + + IP_address canonical_hostname [aliases...] + items: + type: string + DNSConfig: + description: | + Specification for DNS related configurations in resolver configuration + file (`resolv.conf`). + type: object + properties: + Nameservers: + description: The IP addresses of the name servers. + type: array + items: + type: string + Search: + description: A search list for host-name lookup. + type: array + items: + type: string + Options: + description: | + A list of internal resolver variables to be modified (e.g., + `debug`, `ndots:3`, etc.). + type: array + items: + type: string + Secrets: + description: | + Secrets contains references to zero or more secrets that will be + exposed to the service. + type: array + items: + type: object + properties: + File: + description: | + File represents a specific target that is backed by a file. + type: object + properties: + Name: + description: | + Name represents the final filename in the filesystem. + type: string + UID: + description: UID represents the file UID. + type: string + GID: + description: GID represents the file GID. + type: string + Mode: + description: Mode represents the FileMode of the file. + type: integer + format: uint32 + SecretID: + description: | + SecretID represents the ID of the specific secret that we're + referencing. + type: string + SecretName: + description: | + SecretName is the name of the secret that this references, + but this is just provided for lookup/display purposes. The + secret in the reference will be identified by its ID. + type: string + OomScoreAdj: + type: integer + format: int64 + description: | + An integer value containing the score given to the container in + order to tune OOM killer preferences. + example: 0 + Configs: + description: | + Configs contains references to zero or more configs that will be + exposed to the service. + type: array + items: + type: object + properties: + File: + description: | + File represents a specific target that is backed by a file. + + + + + + + > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive + type: object + properties: + Name: + description: | + Name represents the final filename in the filesystem. + type: string + UID: + description: UID represents the file UID. + type: string + GID: + description: GID represents the file GID. + type: string + Mode: + description: Mode represents the FileMode of the file. + type: integer + format: uint32 + Runtime: + description: | + Runtime represents a target that is not mounted into the + container but is used by the task + + + + + + + > **Note**: `Configs.File` and `Configs.Runtime` are mutually + > exclusive + type: object + ConfigID: + description: | + ConfigID represents the ID of the specific config that we're + referencing. + type: string + ConfigName: + description: | + ConfigName is the name of the config that this references, + but this is just provided for lookup/display purposes. The + config in the reference will be identified by its ID. + type: string + Isolation: + type: string + description: | + Isolation technology of the containers running the service. + (Windows only) + enum: + - default + - process + - hyperv + - "" + Init: + description: | + Run an init inside the container that forwards signals and reaps + processes. This field is omitted if empty, and the default (as + configured on the daemon) is used. + type: + - boolean + - "null" + Sysctls: + description: | + Set kernel namedspaced parameters (sysctls) in the container. + The Sysctls option on services accepts the same sysctls as the + are supported on containers. Note that while the same sysctls are + supported, no guarantees or checks are made about their + suitability for a clustered environment, and it's up to the user + to determine whether a given sysctl will work properly in a + Service. + type: object + additionalProperties: + type: string + CapabilityAdd: + type: array + description: | + A list of kernel capabilities to add to the default set + for the container. + items: + type: string + example: + - CAP_NET_RAW + - CAP_SYS_ADMIN + - CAP_SYS_CHROOT + - CAP_SYSLOG + CapabilityDrop: + type: array + description: | + A list of kernel capabilities to drop from the default set + for the container. + items: + type: string + example: + - CAP_NET_RAW + Ulimits: + description: | + A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`" + type: array + items: + type: object + properties: + Name: + description: Name of ulimit + type: string + Soft: + description: Soft limit + type: integer + Hard: + description: Hard limit + type: integer + NetworkAttachmentSpec: + description: | + Read-only spec type for non-swarm containers attached to swarm overlay + networks. + + + + + + + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + type: object + properties: + ContainerID: + description: ID of the container represented by this task + type: string + Resources: + description: | + Resource requirements which apply to each individual container created + as part of the service. + type: object + properties: + Limits: + allOf: + - $ref: "#/components/schemas/Limit" + - description: Define resources limits. + Reservations: + allOf: + - $ref: "#/components/schemas/ResourceObject" + - description: Define resources reservation. + SwapBytes: + description: | + Amount of swap in bytes - can only be used together with a memory limit. + If not specified, the default behaviour is to grant a swap space twice + as big as the memory limit. + Set to -1 to enable unlimited swap. + type: + - integer + - "null" + format: int64 + minimum: -1 + x-omitempty: true + MemorySwappiness: + description: | + Tune the service's containers' memory swappiness (0 to 100). + If not specified, defaults to the containers' OS' default, generally 60, + or whatever value was predefined in the image. + Set to -1 to unset a previously set value. + type: + - integer + - "null" + format: int64 + minimum: -1 + maximum: 100 + x-omitempty: true + RestartPolicy: + description: | + Specification for the restart policy which applies to containers + created as part of this service. + type: object + properties: + Condition: + description: Condition for restart. + type: string + enum: + - none + - on-failure + - any + Delay: + description: Delay between restart attempts. + type: integer + format: int64 + MaxAttempts: + description: | + Maximum attempts to restart a given container before giving up + (default value is 0, which is ignored). + type: integer + format: int64 + default: 0 + Window: + description: | + Windows is the time window used to evaluate the restart policy + (default value is 0, which is unbounded). + type: integer + format: int64 + default: 0 + Placement: + type: object + properties: + Constraints: + description: | + An array of constraint expressions to limit the set of nodes where + a task can be scheduled. Constraint expressions can either use a + _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find + nodes that satisfy every expression (AND match). Constraints can + match node or Docker Engine labels as follows: + + node attribute | matches | example + ---------------------|--------------------------------|----------------------------------------------- + `node.id` | Node ID | `node.id==2ivku8v2gvtg4` + `node.hostname` | Node hostname | `node.hostname!=node-2` + `node.role` | Node role (`manager`/`worker`) | `node.role==manager` + `node.platform.os` | Node operating system | `node.platform.os==windows` + `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` + `node.labels` | User-defined node labels | `node.labels.security==high` + `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04` + + `engine.labels` apply to Docker Engine labels like operating system, + drivers, etc. Swarm administrators add `node.labels` for operational + purposes by using the [`node update endpoint`](#operation/NodeUpdate). + type: array + items: + type: string + example: + - node.hostname!=node3.corp.example.com + - node.role!=manager + - node.labels.type==production + - node.platform.os==linux + - node.platform.arch==x86_64 + Preferences: + description: | + Preferences provide a way to make the scheduler aware of factors + such as topology. They are provided in order from highest to + lowest precedence. + type: array + items: + type: object + properties: + Spread: + type: object + properties: + SpreadDescriptor: + description: | + label descriptor, such as `engine.labels.az`. + type: string + example: + - Spread: + SpreadDescriptor: node.labels.datacenter + - Spread: + SpreadDescriptor: node.labels.rack + MaxReplicas: + description: | + Maximum number of replicas for per node (default value is 0, which + is unlimited) + type: integer + format: int64 + default: 0 + Platforms: + description: | + Platforms stores all the platforms that the service's image can + run on. This field is used in the platform filter for scheduling. + If empty, then the platform filter is off, meaning there are no + scheduling restrictions. + type: array + items: + $ref: "#/components/schemas/Platform" + ForceUpdate: + description: | + A counter that triggers an update even if no relevant parameters have + been changed. + type: integer + format: uint64 + Runtime: + description: | + Runtime is the type of runtime specified for the task executor. + type: string + Networks: + description: Specifies which networks the service should attach to. + type: array + items: + $ref: "#/components/schemas/NetworkAttachmentConfig" + LogDriver: + description: | + Specifies the log driver to use for tasks created from this spec. If + not present, the default one for the swarm will be used, finally + falling back to the engine default if not specified. + type: object + properties: + Name: + type: string + Options: + type: object + additionalProperties: + type: string + TaskState: + type: string + enum: + - new + - allocated + - pending + - assigned + - accepted + - preparing + - ready + - starting + - running + - complete + - shutdown + - failed + - rejected + - remove + - orphaned + ContainerStatus: + type: object + description: represents the status of a container. + properties: + ContainerID: + type: string + PID: + type: integer + ExitCode: + type: integer + PortStatus: + type: object + description: represents the port status of a task's host ports whose service has published host ports + properties: + Ports: + type: array + items: + $ref: "#/components/schemas/EndpointPortConfig" + TaskStatus: + type: object + description: represents the status of a task. + properties: + Timestamp: + type: string + format: dateTime + State: + $ref: "#/components/schemas/TaskState" + Message: + type: string + Err: + type: string + ContainerStatus: + $ref: "#/components/schemas/ContainerStatus" + PortStatus: + $ref: "#/components/schemas/PortStatus" + NetworkAttachment: + description: | + Specifies how a task is attached to a network, and the addresses the + task was assigned on that network. + type: object + properties: + Network: + $ref: "#/components/schemas/Network" + Addresses: + description: | + The IP addresses (in CIDR notation) assigned to the task on this + network. To maintain backward compatibility this field accepts CIDR + notation, but only the IP address is used. + type: array + items: + type: string + format: cidr + example: + Network: + ID: 4qvuz4ko70xaltuqbt8956gd1 + Addresses: + - 10.255.0.10/16 + Task: + type: object + properties: + ID: + description: The ID of the task. + type: string + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + type: string + format: dateTime + UpdatedAt: + type: string + format: dateTime + Name: + description: Name of the task. + type: string + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + Spec: + $ref: "#/components/schemas/TaskSpec" + ServiceID: + description: The ID of the service this task is part of. + type: string + Slot: + type: integer + NodeID: + description: The ID of the node that this task is on. + type: string + AssignedGenericResources: + $ref: "#/components/schemas/GenericResources" + Status: + $ref: "#/components/schemas/TaskStatus" + DesiredState: + $ref: "#/components/schemas/TaskState" + JobIteration: + allOf: + - $ref: "#/components/schemas/ObjectVersion" + - description: | + If the Service this Task belongs to is a job-mode service, contains + the JobIteration of the Service this Task was created for. Absent if + the Task was created for a Replicated or Global Service. + NetworksAttachments: + description: | + The networks that this task is attached to, and the addresses the + task was assigned on each of them. + type: array + items: + $ref: "#/components/schemas/NetworkAttachment" + example: + ID: 0kzzo1i0y4jz6027t0k7aezc7 + Version: + Index: 71 + CreatedAt: 2016-06-07T21:07:31.171892745Z + UpdatedAt: 2016-06-07T21:07:31.376370513Z + Spec: + ContainerSpec: + Image: redis + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: any + MaxAttempts: 0 + Placement: {} + ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz + Slot: 1 + NodeID: 60gvrl6tm78dmak4yl7srz94v + Status: + Timestamp: 2016-06-07T21:07:31.290032978Z + State: running + Message: started + ContainerStatus: + ContainerID: e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035 + PID: 677 + DesiredState: running + NetworksAttachments: + - Network: + ID: 4qvuz4ko70xaltuqbt8956gd1 + Version: + Index: 18 + CreatedAt: 2016-06-07T20:31:11.912919752Z + UpdatedAt: 2016-06-07T21:07:29.955277358Z + Spec: + Name: ingress + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + DriverState: + Name: overlay + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: default + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + Addresses: + - 10.255.0.10/16 + AssignedGenericResources: + - DiscreteResourceSpec: + Kind: SSD + Value: 3 + - NamedResourceSpec: + Kind: GPU + Value: UUID1 + - NamedResourceSpec: + Kind: GPU + Value: UUID2 + ServiceSpec: + description: User modifiable configuration for a service. + type: object + properties: + Name: + description: Name of the service. + type: string + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + TaskTemplate: + $ref: "#/components/schemas/TaskSpec" + Mode: + description: Scheduling mode for the service. + type: object + properties: + Replicated: + type: object + properties: + Replicas: + type: integer + format: int64 + Global: + type: object + ReplicatedJob: + description: | + The mode used for services with a finite number of tasks that run + to a completed state. + type: object + properties: + MaxConcurrent: + description: | + The maximum number of replicas to run simultaneously. + type: integer + format: int64 + default: 1 + TotalCompletions: + description: | + The total number of replicas desired to reach the Completed + state. If unset, will default to the value of `MaxConcurrent` + type: integer + format: int64 + GlobalJob: + description: | + The mode used for services which run a task to the completed state + on each valid node. + type: object + UpdateConfig: + description: Specification for the update strategy of the service. + type: object + properties: + Parallelism: + description: | + Maximum number of tasks to be updated in one iteration (0 means + unlimited parallelism). + type: integer + format: int64 + Delay: + description: Amount of time between updates, in nanoseconds. + type: integer + format: int64 + FailureAction: + description: | + Action to take if an updated task fails to run, or stops running + during the update. + type: string + enum: + - continue + - pause + - rollback + Monitor: + description: | + Amount of time to monitor each updated task for failures, in + nanoseconds. + type: integer + format: int64 + MaxFailureRatio: + description: | + The fraction of tasks that may fail during an update before the + failure action is invoked, specified as a floating point number + between 0 and 1. + type: number + default: 0 + Order: + description: | + The order of operations when rolling out an updated task. Either + the old task is shut down before the new task is started, or the + new task is started before the old task is shut down. + type: string + enum: + - stop-first + - start-first + RollbackConfig: + description: Specification for the rollback strategy of the service. + type: object + properties: + Parallelism: + description: | + Maximum number of tasks to be rolled back in one iteration (0 means + unlimited parallelism). + type: integer + format: int64 + Delay: + description: | + Amount of time between rollback iterations, in nanoseconds. + type: integer + format: int64 + FailureAction: + description: | + Action to take if an rolled back task fails to run, or stops + running during the rollback. + type: string + enum: + - continue + - pause + Monitor: + description: | + Amount of time to monitor each rolled back task for failures, in + nanoseconds. + type: integer + format: int64 + MaxFailureRatio: + description: | + The fraction of tasks that may fail during a rollback before the + failure action is invoked, specified as a floating point number + between 0 and 1. + type: number + default: 0 + Order: + description: | + The order of operations when rolling back a task. Either the old + task is shut down before the new task is started, or the new task + is started before the old task is shut down. + type: string + enum: + - stop-first + - start-first + Networks: + description: | + Specifies which networks the service should attach to. + + Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + type: array + items: + $ref: "#/components/schemas/NetworkAttachmentConfig" + EndpointSpec: + $ref: "#/components/schemas/EndpointSpec" + EndpointPortConfig: + type: object + properties: + Name: + type: string + Protocol: + type: string + enum: + - tcp + - udp + - sctp + TargetPort: + description: The port inside the container. + type: integer + PublishedPort: + description: The port on the swarm hosts. + type: integer + PublishMode: + description: | + The mode in which port is published. + + + + + + + - "ingress" makes the target port accessible on every node, + regardless of whether there is a task for the service running on + that node or not. + - "host" bypasses the routing mesh and publish the port directly on + the swarm node where that service is running. + type: string + enum: + - ingress + - host + default: ingress + example: ingress + EndpointSpec: + description: Properties that can be configured to access and load balance a service. + type: object + properties: + Mode: + description: | + The mode of resolution to use for internal load balancing between tasks. + type: string + enum: + - vip + - dnsrr + default: vip + Ports: + description: | + List of exposed ports that this service is accessible on from the + outside. Ports can only be provided if `vip` resolution mode is used. + type: array + items: + $ref: "#/components/schemas/EndpointPortConfig" + Service: + type: object + properties: + ID: + type: string + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + type: string + format: dateTime + UpdatedAt: + type: string + format: dateTime + Spec: + $ref: "#/components/schemas/ServiceSpec" + Endpoint: + type: object + properties: + Spec: + $ref: "#/components/schemas/EndpointSpec" + Ports: + type: array + items: + $ref: "#/components/schemas/EndpointPortConfig" + VirtualIPs: + type: array + items: + type: object + properties: + NetworkID: + type: string + Addr: + type: string + UpdateStatus: + description: The status of a service update. + type: object + properties: + State: + type: string + enum: + - updating + - paused + - completed + StartedAt: + type: string + format: dateTime + CompletedAt: + type: string + format: dateTime + Message: + type: string + ServiceStatus: + description: | + The status of the service's tasks. Provided only when requested as + part of a ServiceList operation. + type: object + properties: + RunningTasks: + description: | + The number of tasks for the service currently in the Running state. + type: integer + format: uint64 + example: 7 + DesiredTasks: + description: | + The number of tasks for the service desired to be running. + For replicated services, this is the replica count from the + service spec. For global services, this is computed by taking + count of all tasks for the service with a Desired State other + than Shutdown. + type: integer + format: uint64 + example: 10 + CompletedTasks: + description: | + The number of tasks for a job that are in the Completed state. + This field must be cross-referenced with the service type, as the + value of 0 may mean the service is not in a job mode, or it may + mean the job-mode service has no tasks yet Completed. + type: integer + format: uint64 + JobStatus: + description: | + The status of the service when it is in one of ReplicatedJob or + GlobalJob modes. Absent on Replicated and Global mode services. The + JobIteration is an ObjectVersion, but unlike the Service's version, + does not need to be sent with an update request. + type: object + properties: + JobIteration: + allOf: + - $ref: "#/components/schemas/ObjectVersion" + - description: | + JobIteration is a value increased each time a Job is executed, + successfully or otherwise. "Executed", in this case, means the + job as a whole has been started, not that an individual Task has + been launched. A job is "Executed" when its ServiceSpec is + updated. JobIteration can be used to disambiguate Tasks belonging + to different executions of a job. Though JobIteration will + increase with each subsequent execution, it may not necessarily + increase by 1, and so JobIteration should not be used to + LastExecution: + description: | + The last time, as observed by the server, that this job was + started. + type: string + format: dateTime + example: + ID: 9mnpnzenvg8p8tdbtq4wvbkcz + Version: + Index: 19 + CreatedAt: 2016-06-07T21:05:51.880065305Z + UpdatedAt: 2016-06-07T21:07:29.962229872Z + Spec: + Name: hopeful_cori + TaskTemplate: + ContainerSpec: + Image: redis + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: any + MaxAttempts: 0 + Placement: {} + ForceUpdate: 0 + Mode: + Replicated: + Replicas: 1 + UpdateConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Mode: vip + Ports: + - Protocol: tcp + TargetPort: 6379 + PublishedPort: 30001 + Endpoint: + Spec: + Mode: vip + Ports: + - Protocol: tcp + TargetPort: 6379 + PublishedPort: 30001 + Ports: + - Protocol: tcp + TargetPort: 6379 + PublishedPort: 30001 + VirtualIPs: + - NetworkID: 4qvuz4ko70xaltuqbt8956gd1 + Addr: 10.255.0.2/16 + - NetworkID: 4qvuz4ko70xaltuqbt8956gd1 + Addr: 10.255.0.3/16 + ImageDeleteResponseItem: + type: object + x-go-name: DeleteResponse + properties: + Untagged: + description: The image ID of an image that was untagged + type: string + Deleted: + description: The image ID of an image that was deleted + type: string + ServiceCreateResponse: + type: object + description: | + contains the information returned to a client on the + creation of a new service. + properties: + ID: + description: The ID of the created service. + type: string + example: ak7w3gjqoa3kuz8xcpnyy0pvl + Warnings: + description: | + Optional warning message. + + FIXME(thaJeztah): this should have "omitempty" in the generated type. + type: + - array + - "null" + items: + type: string + example: + - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ServiceUpdateResponse: + type: object + properties: + Warnings: + description: Optional warning messages + type: array + items: + type: string + example: + Warnings: + - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ContainerInspectResponse: + type: object + title: ContainerInspectResponse + x-go-name: InspectResponse + properties: + Id: + description: The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). + type: string + x-go-name: ID + minLength: 64 + maxLength: 64 + pattern: ^[0-9a-fA-F]{64}$ + example: aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf + Created: + description: |- + Date and time at which the container was created, formatted in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: + - string + - "null" + format: dateTime + example: 2025-02-17T17:43:39.64001363Z + Path: + description: The path to the command being run + type: string + example: /bin/sh + Args: + description: The arguments to the command being run + type: array + items: + type: string + example: + - -c + - exit 9 + State: + $ref: "#/components/schemas/ContainerState" + Image: + description: The ID (digest) of the image that this container was created from. + type: string + example: sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 + ResolvConfPath: + description: |- + Location of the `/etc/resolv.conf` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: string + example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf + HostnamePath: + description: |- + Location of the `/etc/hostname` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: string + example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname + HostsPath: + description: |- + Location of the `/etc/hosts` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: string + example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts + LogPath: + description: |- + Location of the file used to buffer the container's logs. Depending on + the logging-driver used for the container, this field may be omitted. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: + - string + - "null" + example: /var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log + Name: + description: |- + The name associated with this container. + + For historic reasons, the name may be prefixed with a forward-slash (`/`). + type: string + example: /funny_chatelet + RestartCount: + description: |- + Number of times the container was restarted since it was created, + or since daemon was started. + type: integer + example: 0 + Driver: + description: |- + The storage-driver used for the container's filesystem (graph-driver + or snapshotter). + type: string + example: overlayfs + Platform: + description: |- + The platform (operating system) for which the container was created. + + This field was introduced for the experimental "LCOW" (Linux Containers + On Windows) features, which has been removed. In most cases, this field + is equal to the host's operating system (`linux` or `windows`). + type: string + example: linux + ImageManifestDescriptor: + allOf: + - $ref: "#/components/schemas/OCIDescriptor" + - description: |- + OCI descriptor of the platform-specific manifest of the image + the container was created from. + + Note: Only available if the daemon provides a multi-platform + image store. + MountLabel: + description: SELinux mount label set for the container. + type: string + example: "" + ProcessLabel: + description: SELinux process label set for the container. + type: string + example: "" + AppArmorProfile: + description: The AppArmor profile set for the container. + type: string + example: "" + ExecIDs: + description: IDs of exec instances that are running in the container. + type: + - array + - "null" + items: + type: string + example: + - b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca + - 3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4 + HostConfig: + $ref: "#/components/schemas/HostConfig" + GraphDriver: + allOf: + - $ref: "#/components/schemas/DriverData" + - anyOf: + - {} + - type: "null" + Storage: + allOf: + - $ref: "#/components/schemas/Storage" + - anyOf: + - {} + - type: "null" + SizeRw: + description: |- + The size of files that have been created or changed by this container. + + This field is omitted by default, and only set when size is requested + in the API request. + type: + - integer + - "null" + format: int64 + example: "122880" + SizeRootFs: + description: |- + The total size of all files in the read-only layers from the image + that the container uses. These layers can be shared between containers. + + This field is omitted by default, and only set when size is requested + in the API request. + type: + - integer + - "null" + format: int64 + example: "1653948416" + Mounts: + description: List of mounts used by the container. + type: array + items: + $ref: "#/components/schemas/MountPoint" + Config: + $ref: "#/components/schemas/ContainerConfig" + NetworkSettings: + $ref: "#/components/schemas/NetworkSettings" + ContainerSummary: + type: object + properties: + Id: + description: The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). + type: string + x-go-name: ID + minLength: 64 + maxLength: 64 + pattern: ^[0-9a-fA-F]{64}$ + example: aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf + Names: + description: |- + The names associated with this container. Most containers have a single + name, but when using legacy "links", the container can have multiple + names. + + For historic reasons, names are prefixed with a forward-slash (`/`). + type: array + items: + type: string + example: + - /funny_chatelet + Image: + description: |- + The name or ID of the image used to create the container. + + This field shows the image reference as was specified when creating the container, + which can be in its canonical form (e.g., `docker.io/library/ubuntu:latest` + or `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`), + short form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`). + + The content of this field can be updated at runtime if the image used to + create the container is untagged, in which case the field is updated to + contain the the image ID (digest) it was resolved to in its canonical, + non-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`). + type: string + example: docker.io/library/ubuntu:latest + ImageID: + description: The ID (digest) of the image that this container was created from. + type: string + example: sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 + ImageManifestDescriptor: + allOf: + - $ref: "#/components/schemas/OCIDescriptor" + - anyOf: + - description: | + OCI descriptor of the platform-specific manifest of the image + the container was created from. + + Note: Only available if the daemon provides a multi-platform + image store. + + This field is not populated in the `GET /system/df` endpoint. + - type: "null" + Command: + description: Command to run when starting the container + type: string + example: /bin/bash + Created: + description: |- + Date and time at which the container was created as a Unix timestamp + (number of seconds since EPOCH). + type: integer + format: int64 + example: "1739811096" + Ports: + description: Port-mappings for the container. + type: array + items: + $ref: "#/components/schemas/PortSummary" + SizeRw: + description: |- + The size of files that have been created or changed by this container. + + This field is omitted by default, and only set when size is requested + in the API request. + type: + - integer + - "null" + format: int64 + example: "122880" + SizeRootFs: + description: |- + The total size of all files in the read-only layers from the image + that the container uses. These layers can be shared between containers. + + This field is omitted by default, and only set when size is requested + in the API request. + type: + - integer + - "null" + format: int64 + example: "1653948416" + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.vendor: Acme + com.example.license: GPL + com.example.version: "1.0" + State: + description: | + The state of this container. + type: string + enum: + - created + - running + - paused + - restarting + - exited + - removing + - dead + example: running + Status: + description: Additional human-readable status of this container (e.g. `Exit 0`) + type: string + example: Up 4 days + HostConfig: + type: object + description: |- + Summary of host-specific runtime information of the container. This + is a reduced set of information in the container's "HostConfig" as + available in the container "inspect" response. + properties: + NetworkMode: + description: |- + Networking mode (`host`, `none`, `container:`) or name of the + primary network the container is using. + + This field is primarily for backward compatibility. The container + can be connected to multiple networks for which information can be + found in the `NetworkSettings.Networks` field, which enumerates + settings per network. + type: string + example: mynetwork + Annotations: + description: Arbitrary key-value metadata attached to the container. + type: + - object + - "null" + additionalProperties: + type: string + example: + io.kubernetes.docker.type: container + io.kubernetes.sandbox.id: 3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3 + NetworkSettings: + description: Summary of the container's network settings + type: object + properties: + Networks: + type: object + description: |- + Summary of network-settings for each network the container is + attached to. + additionalProperties: + $ref: "#/components/schemas/EndpointSettings" + Mounts: + type: array + description: List of mounts used by the container. + items: + $ref: "#/components/schemas/MountPoint" + Health: + type: object + description: |- + Summary of health status + + Added in v1.52, before that version all container summary not include Health. + After this attribute introduced, it includes containers with no health checks configured, + or containers that are not running with none + properties: + Status: + type: string + description: the health status of the container + enum: + - none + - starting + - healthy + - unhealthy + example: healthy + FailingStreak: + description: FailingStreak is the number of consecutive failures + type: integer + example: 0 + ContainersDiskUsage: + type: object + x-go-name: DiskUsage + x-go-package: github.com/moby/moby/api/types/container + description: | + represents system data usage information for container resources. + properties: + ActiveCount: + description: | + Count of active containers. + type: integer + format: int64 + example: 1 + TotalCount: + description: | + Count of all containers. + type: integer + format: int64 + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive containers. + type: integer + format: int64 + example: 12345678 + TotalSize: + description: | + Disk space in use by containers. + type: integer + format: int64 + example: 98765432 + Items: + description: | + List of container summaries. + type: array + x-omitempty: true + items: + x-go-type: + type: Summary + Driver: + description: Driver represents a driver (network, logging, secrets). + type: object + required: + - Name + properties: + Name: + description: Name of the driver. + type: string + example: some-driver + Options: + description: Key/value map of driver-specific options. + type: object + additionalProperties: + type: string + example: + OptionA: value for driver-specific option A + OptionB: value for driver-specific option B + SecretSpec: + type: object + properties: + Name: + description: User-defined name of the secret. + type: string + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + Data: + description: | + Data is the data to store as a secret, formatted as a standard base64-encoded + ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. + It must be empty if the Driver field is set, in which case the data is + loaded from an external secret store. The maximum allowed size is 500KB, + as defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize). + + This field is only used to _create_ a secret, and is not returned by + other endpoints. + type: string + example: "" + Driver: + allOf: + - $ref: "#/components/schemas/Driver" + - description: | + Name of the secrets driver used to fetch the secret's value from an + external secret store. + Templating: + allOf: + - $ref: "#/components/schemas/Driver" + - description: | + Templating driver, if applicable + + Templating controls whether and how to evaluate the config payload as + a template. If no driver is set, no templating is used. + Secret: + type: object + properties: + ID: + type: string + example: blt1owaxmitz71s9v5zh81zun + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + type: string + format: dateTime + example: 2017-07-20T13:55:28.678958722Z + UpdatedAt: + type: string + format: dateTime + example: 2017-07-20T13:55:28.678958722Z + Spec: + $ref: "#/components/schemas/SecretSpec" + ConfigSpec: + type: object + properties: + Name: + description: User-defined name of the config. + type: string + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + Data: + description: | + Data is the data to store as a config, formatted as a standard base64-encoded + ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. + The maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize). + type: string + Templating: + allOf: + - $ref: "#/components/schemas/Driver" + - description: | + Templating driver, if applicable + + Templating controls whether and how to evaluate the config payload as + a template. If no driver is set, no templating is used. + Config: + type: object + properties: + ID: + type: string + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + type: string + format: dateTime + UpdatedAt: + type: string + format: dateTime + Spec: + $ref: "#/components/schemas/ConfigSpec" + ContainerState: + description: | + ContainerState stores container's running state. It's part of ContainerJSONBase + and will be returned by the "inspect" command. + type: + - object + - "null" + properties: + Status: + description: | + String representation of the container state. Can be one of "created", + "running", "paused", "restarting", "removing", "exited", or "dead". + type: string + enum: + - created + - running + - paused + - restarting + - removing + - exited + - dead + example: running + Running: + description: | + Whether this container is running. + + Note that a running container can be _paused_. The `Running` and `Paused` + booleans are not mutually exclusive: + + When pausing a container (on Linux), the freezer cgroup is used to suspend + all processes in the container. Freezing the process requires the process to + be running. As a result, paused containers are both `Running` _and_ `Paused`. + + Use the `Status` field instead to determine if a container's state is "running". + type: boolean + example: true + Paused: + description: Whether this container is paused. + type: boolean + example: false + Restarting: + description: Whether this container is restarting. + type: boolean + example: false + OOMKilled: + description: | + Whether a process within this container has been killed because it ran + out of memory since the container was last started. + type: boolean + example: false + Dead: + type: boolean + example: false + Pid: + description: The process ID of this container + type: integer + example: 1234 + ExitCode: + description: The last exit code of this container + type: integer + example: 0 + Error: + type: string + StartedAt: + description: The time when this container was last started. + type: string + example: 2020-01-06T09:06:59.461876391Z + FinishedAt: + description: The time when this container last exited. + type: string + example: 2020-01-06T09:07:59.461876391Z + Health: + $ref: "#/components/schemas/Health" + ContainerCreateResponse: + description: OK response to ContainerCreate operation + type: object + title: ContainerCreateResponse + x-go-name: CreateResponse + required: + - Id + - Warnings + properties: + Id: + description: The ID of the created container + type: string + example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 + Warnings: + description: Warnings encountered when creating the container + type: array + items: + type: string + example: [] + ContainerUpdateResponse: + type: object + title: ContainerUpdateResponse + x-go-name: UpdateResponse + description: Response for a successful container-update. + properties: + Warnings: + type: array + description: Warnings encountered when updating the container. + items: + type: string + example: + - Published ports are discarded when using host network mode + ContainerStatsResponse: + description: | + Statistics sample for a container. + type: object + x-go-name: StatsResponse + title: ContainerStatsResponse + properties: + id: + description: | + ID of the container for which the stats were collected. + type: + - string + - "null" + example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 + name: + description: | + Name of the container for which the stats were collected. + type: + - string + - "null" + example: boring_wozniak + os_type: + description: | + OSType is the OS of the container ("linux" or "windows") to allow + platform-specific handling of stats. + type: + - string + - "null" + example: linux + read: + description: | + Date and time at which this sample was collected. + The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + with nano-seconds. + type: string + format: date-time + example: 2025-01-16T13:55:22.165243637Z + cpu_stats: + $ref: "#/components/schemas/ContainerCPUStats" + memory_stats: + $ref: "#/components/schemas/ContainerMemoryStats" + networks: + description: | + Network statistics for the container per interface. + + This field is omitted if the container has no networking enabled. + additionalProperties: + $ref: "#/components/schemas/ContainerNetworkStats" + example: + eth0: + rx_bytes: 5338 + rx_dropped: 0 + rx_errors: 0 + rx_packets: 36 + tx_bytes: 648 + tx_dropped: 0 + tx_errors: 0 + tx_packets: 8 + eth5: + rx_bytes: 4641 + rx_dropped: 0 + rx_errors: 0 + rx_packets: 26 + tx_bytes: 690 + tx_dropped: 0 + tx_errors: 0 + tx_packets: 9 + pids_stats: + $ref: "#/components/schemas/ContainerPidsStats" + blkio_stats: + $ref: "#/components/schemas/ContainerBlkioStats" + num_procs: + description: | + The number of processors on the system. + + This field is Windows-specific and always zero for Linux containers. + type: integer + format: uint32 + example: 16 + storage_stats: + $ref: "#/components/schemas/ContainerStorageStats" + preread: + description: | + Date and time at which this first sample was collected. This field + is not propagated if the "one-shot" option is set. If the "one-shot" + option is set, this field may be omitted, empty, or set to a default + date (`0001-01-01T00:00:00Z`). + + The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + with nano-seconds. + type: string + format: date-time + example: 2025-01-16T13:55:21.160452595Z + precpu_stats: + $ref: "#/components/schemas/ContainerCPUStats" + ContainerBlkioStats: + description: | + BlkioStats stores all IO service stats for data read and write. + + This type is Linux-specific and holds many fields that are specific to cgroups v1. + On a cgroup v2 host, all fields other than `io_service_bytes_recursive` + are omitted or `null`. + + This type is only populated on Linux and omitted for Windows containers. + type: + - object + - "null" + x-go-name: BlkioStats + properties: + io_service_bytes_recursive: + type: array + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_serviced_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_queue_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_service_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_wait_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_merged_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + sectors_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + example: + io_service_bytes_recursive: + - major: 254 + minor: 0 + op: read + value: 7593984 + - major: 254 + minor: 0 + op: write + value: 100 + io_serviced_recursive: null + io_queue_recursive: null + io_service_time_recursive: null + io_wait_time_recursive: null + io_merged_recursive: null + io_time_recursive: null + sectors_recursive: null + ContainerBlkioStatEntry: + description: | + Blkio stats entry. + + This type is Linux-specific and omitted for Windows containers. + type: + - object + - "null" + x-go-name: BlkioStatEntry + properties: + major: + type: integer + format: uint64 + example: 254 + minor: + type: integer + format: uint64 + example: 0 + op: + type: string + example: read + value: + type: integer + format: uint64 + example: 7593984 + ContainerCPUStats: + description: | + CPU related info of the container + type: + - object + - "null" + x-go-name: CPUStats + properties: + cpu_usage: + $ref: "#/components/schemas/ContainerCPUUsage" + system_cpu_usage: + description: | + System Usage. + + This field is Linux-specific and omitted for Windows containers. + type: + - integer + - "null" + format: uint64 + example: 5 + online_cpus: + description: | + Number of online CPUs. + + This field is Linux-specific and omitted for Windows containers. + type: + - integer + - "null" + format: uint32 + example: 5 + throttling_data: + $ref: "#/components/schemas/ContainerThrottlingData" + ContainerCPUUsage: + description: | + All CPU stats aggregated since container inception. + type: + - object + - "null" + x-go-name: CPUUsage + properties: + total_usage: + description: | + Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows). + type: integer + format: uint64 + example: 29912000 + percpu_usage: + description: | + Total CPU time (in nanoseconds) consumed per core (Linux). + + This field is Linux-specific when using cgroups v1. It is omitted + when using cgroups v2 and Windows containers. + type: + - array + - "null" + items: + type: integer + format: uint64 + example: 29912000 + usage_in_kernelmode: + description: | + Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux), + or time spent (in 100's of nanoseconds) by all container processes in + kernel mode (Windows). + + Not populated for Windows containers using Hyper-V isolation. + type: integer + format: uint64 + example: 21994000 + usage_in_usermode: + description: | + Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux), + or time spent (in 100's of nanoseconds) by all container processes in + kernel mode (Windows). + + Not populated for Windows containers using Hyper-V isolation. + type: integer + format: uint64 + example: 7918000 + ContainerPidsStats: + description: | + PidsStats contains Linux-specific stats of a container's process-IDs (PIDs). + + This type is Linux-specific and omitted for Windows containers. + type: + - object + - "null" + x-go-name: PidsStats + properties: + current: + description: | + Current is the number of PIDs in the cgroup. + type: + - integer + - "null" + format: uint64 + example: 5 + limit: + description: | + Limit is the hard limit on the number of pids in the cgroup. + A "Limit" of 0 means that there is no limit. + type: + - integer + - "null" + format: uint64 + example: "18446744073709551615" + ContainerThrottlingData: + description: | + CPU throttling stats of the container. + + This type is Linux-specific and omitted for Windows containers. + type: + - object + - "null" + x-go-name: ThrottlingData + properties: + periods: + description: | + Number of periods with throttling active. + type: integer + format: uint64 + example: 0 + throttled_periods: + description: | + Number of periods when the container hit its throttling limit. + type: integer + format: uint64 + example: 0 + throttled_time: + description: | + Aggregated time (in nanoseconds) the container was throttled for. + type: integer + format: uint64 + example: 0 + ContainerMemoryStats: + description: | + Aggregates all memory stats since container inception on Linux. + Windows returns stats for commit and private working set only. + type: object + x-go-name: MemoryStats + properties: + usage: + description: | + Current `res_counter` usage for memory. + + This field is Linux-specific and omitted for Windows containers. + type: + - integer + - "null" + format: uint64 + example: 0 + max_usage: + description: | + Maximum usage ever recorded. + + This field is Linux-specific and only supported on cgroups v1. + It is omitted when using cgroups v2 and for Windows containers. + type: + - integer + - "null" + format: uint64 + example: 0 + stats: + description: | + All the stats exported via memory.stat. + + The fields in this object differ between cgroups v1 and v2. + On cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available. + On cgroups v2, fields such as `file`, `anon`, `inactive_file` are available. + + This field is Linux-specific and omitted for Windows containers. + type: object + additionalProperties: + type: + - integer + - "null" + format: uint64 + example: + active_anon: 1572864 + active_file: 5115904 + anon: 1572864 + anon_thp: 0 + file: 7626752 + file_dirty: 0 + file_mapped: 2723840 + file_writeback: 0 + inactive_anon: 0 + inactive_file: 2510848 + kernel_stack: 16384 + pgactivate: 0 + pgdeactivate: 0 + pgfault: 2042 + pglazyfree: 0 + pglazyfreed: 0 + pgmajfault: 45 + pgrefill: 0 + pgscan: 0 + pgsteal: 0 + shmem: 0 + slab: 1180928 + slab_reclaimable: 725576 + slab_unreclaimable: 455352 + sock: 0 + thp_collapse_alloc: 0 + thp_fault_alloc: 1 + unevictable: 0 + workingset_activate: 0 + workingset_nodereclaim: 0 + workingset_refault: 0 + failcnt: + description: | + Number of times memory usage hits limits. + + This field is Linux-specific and only supported on cgroups v1. + It is omitted when using cgroups v2 and for Windows containers. + type: + - integer + - "null" + format: uint64 + example: 0 + limit: + description: | + This field is Linux-specific and omitted for Windows containers. + type: + - integer + - "null" + format: uint64 + example: 8217579520 + commitbytes: + description: | + Committed bytes. + + This field is Windows-specific and omitted for Linux containers. + type: + - integer + - "null" + format: uint64 + example: 0 + commitpeakbytes: + description: | + Peak committed bytes. + + This field is Windows-specific and omitted for Linux containers. + type: + - integer + - "null" + format: uint64 + example: 0 + privateworkingset: + description: | + Private working set. + + This field is Windows-specific and omitted for Linux containers. + type: + - integer + - "null" + format: uint64 + example: 0 + ContainerNetworkStats: + description: | + Aggregates the network stats of one container + type: + - object + - "null" + x-go-name: NetworkStats + properties: + rx_bytes: + description: | + Bytes received. Windows and Linux. + type: integer + format: uint64 + example: 5338 + rx_packets: + description: | + Packets received. Windows and Linux. + type: integer + format: uint64 + example: 36 + rx_errors: + description: | + Received errors. Not used on Windows. + + This field is Linux-specific and always zero for Windows containers. + type: integer + format: uint64 + example: 0 + rx_dropped: + description: | + Incoming packets dropped. Windows and Linux. + type: integer + format: uint64 + example: 0 + tx_bytes: + description: | + Bytes sent. Windows and Linux. + type: integer + format: uint64 + example: 1200 + tx_packets: + description: | + Packets sent. Windows and Linux. + type: integer + format: uint64 + example: 12 + tx_errors: + description: | + Sent errors. Not used on Windows. + + This field is Linux-specific and always zero for Windows containers. + type: integer + format: uint64 + example: 0 + tx_dropped: + description: | + Outgoing packets dropped. Windows and Linux. + type: integer + format: uint64 + example: 0 + endpoint_id: + description: | + Endpoint ID. Not used on Linux. + + This field is Windows-specific and omitted for Linux containers. + type: + - string + - "null" + instance_id: + description: | + Instance ID. Not used on Linux. + + This field is Windows-specific and omitted for Linux containers. + type: + - string + - "null" + ContainerStorageStats: + description: | + StorageStats is the disk I/O stats for read/write on Windows. + + This type is Windows-specific and omitted for Linux containers. + type: + - object + - "null" + x-go-name: StorageStats + properties: + read_count_normalized: + type: + - integer + - "null" + format: uint64 + example: 7593984 + read_size_bytes: + type: + - integer + - "null" + format: uint64 + example: 7593984 + write_count_normalized: + type: + - integer + - "null" + format: uint64 + example: 7593984 + write_size_bytes: + type: + - integer + - "null" + format: uint64 + example: 7593984 + ContainerTopResponse: + type: object + x-go-name: TopResponse + title: ContainerTopResponse + description: Container "top" response. + properties: + Titles: + description: The ps column titles + type: array + items: + type: string + example: + Titles: + - UID + - PID + - PPID + - C + - STIME + - TTY + - TIME + - CMD + Processes: + description: |- + Each process running in the container, where each process + is an array of values corresponding to the titles. + type: array + items: + type: array + items: + type: string + example: + Processes: + - - root + - "13642" + - "882" + - "0" + - 17:03 + - pts/0 + - 00:00:00 + - /bin/bash + - - root + - "13735" + - "13642" + - "0" + - 17:06 + - pts/0 + - 00:00:00 + - sleep 10 + ContainerWaitResponse: + description: OK response to ContainerWait operation + type: object + x-go-name: WaitResponse + title: ContainerWaitResponse + required: + - StatusCode + properties: + StatusCode: + description: Exit code of the container + type: integer + format: int64 + Error: + $ref: "#/components/schemas/ContainerWaitExitError" + ContainerWaitExitError: + description: container waiting error, if any + type: object + x-go-name: WaitExitError + properties: + Message: + description: Details of an error + type: string + SystemVersion: + type: object + description: | + Response of Engine API: GET "/version" + properties: + Platform: + type: object + required: + - Name + properties: + Name: + type: string + Components: + type: array + description: | + Information about system components + items: + type: object + x-go-name: ComponentVersion + required: + - Name + - Version + properties: + Name: + description: | + Name of the component + type: string + example: Engine + Version: + description: | + Version of the component + type: string + example: 27.0.1 + Details: + description: | + Key/value pairs of strings with additional information about the + component. These values are intended for informational purposes + only, and their content is not defined, and not part of the API + specification. + + These messages can be printed by the client as information to the user. + type: + - object + - "null" + Version: + description: The version of the daemon + type: string + example: 27.0.1 + ApiVersion: + description: | + The default (and highest) API version that is supported by the daemon + type: string + example: "1.47" + MinAPIVersion: + description: | + The minimum API version that is supported by the daemon + type: string + example: "1.24" + GitCommit: + description: | + The Git commit of the source code that was used to build the daemon + type: string + example: 48a66213fe + GoVersion: + description: | + The version Go used to compile the daemon, and the version of the Go + runtime in use. + type: string + example: go1.22.7 + Os: + description: | + The operating system that the daemon is running on ("linux" or "windows") + type: string + example: linux + Arch: + description: | + Architecture of the daemon, as returned by the Go runtime (`GOARCH`). + + A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + type: string + example: amd64 + KernelVersion: + description: | + The kernel version (`uname -r`) that the daemon is running on. + + This field is omitted when empty. + type: string + example: 6.8.0-31-generic + Experimental: + description: | + Indicates if the daemon is started with experimental features enabled. + + This field is omitted when empty / false. + type: boolean + example: true + BuildTime: + description: | + The date and time that the daemon was compiled. + type: string + example: 2020-06-22T15:49:27.000000000+00:00 + SystemInfo: + type: object + properties: + ID: + description: | + Unique identifier of the daemon. + + + + + + + > **Note**: The format of the ID itself is not part of the API, and + > should not be considered stable. + type: string + example: 7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS + Containers: + description: Total number of containers on the host. + type: integer + example: 14 + ContainersRunning: + description: | + Number of containers with status `"running"`. + type: integer + example: 3 + ContainersPaused: + description: | + Number of containers with status `"paused"`. + type: integer + example: 1 + ContainersStopped: + description: | + Number of containers with status `"stopped"`. + type: integer + example: 10 + Images: + description: | + Total number of images on the host. + + Both _tagged_ and _untagged_ (dangling) images are counted. + type: integer + example: 508 + Driver: + description: Name of the storage driver in use. + type: string + example: overlay2 + DriverStatus: + description: | + Information specific to the storage driver, provided as + "label" / "value" pairs. + + This information is provided by the storage driver, and formatted + in a way consistent with the output of `docker info` on the command + line. + + + + + + + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: array + items: + type: array + items: + type: string + example: + - - Backing Filesystem + - extfs + - - Supports d_type + - "true" + - - Native Overlay Diff + - "true" + DockerRootDir: + description: | + Root directory of persistent Docker state. + + Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` + on Windows. + type: string + example: /var/lib/docker + Plugins: + $ref: "#/components/schemas/PluginsInfo" + MemoryLimit: + description: Indicates if the host has memory limit support enabled. + type: boolean + example: true + SwapLimit: + description: Indicates if the host has memory swap limit support enabled. + type: boolean + example: true + CpuCfsPeriod: + description: | + Indicates if CPU CFS(Completely Fair Scheduler) period is supported by + the host. + type: boolean + example: true + CpuCfsQuota: + description: | + Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by + the host. + type: boolean + example: true + CPUShares: + description: | + Indicates if CPU Shares limiting is supported by the host. + type: boolean + example: true + CPUSet: + description: | + Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. + + See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) + type: boolean + example: true + PidsLimit: + description: Indicates if the host kernel has PID limit support enabled. + type: boolean + example: true + OomKillDisable: + description: Indicates if OOM killer disable is supported on the host. + type: boolean + IPv4Forwarding: + description: Indicates IPv4 forwarding is enabled. + type: boolean + example: true + Debug: + description: | + Indicates if the daemon is running in debug-mode / with debug-level + logging enabled. + type: boolean + example: true + NFd: + description: | + The total number of file Descriptors in use by the daemon process. + + This information is only returned if debug-mode is enabled. + type: integer + example: 64 + NGoroutines: + description: | + The number of goroutines that currently exist. + + This information is only returned if debug-mode is enabled. + type: integer + example: 174 + SystemTime: + description: | + Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + format with nano-seconds. + type: string + example: 2017-08-08T20:28:29.06202363Z + LoggingDriver: + description: | + The logging driver to use as a default for new containers. + type: string + CgroupDriver: + description: | + The driver to use for managing cgroups. + type: string + enum: + - cgroupfs + - systemd + - none + default: cgroupfs + example: cgroupfs + CgroupVersion: + description: | + The version of the cgroup. + type: string + enum: + - "1" + - "2" + default: "1" + example: "1" + NEventsListener: + description: Number of event listeners subscribed. + type: integer + example: 30 + KernelVersion: + description: | + Kernel version of the host. + + On Linux, this information obtained from `uname`. On Windows this + information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ + registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. + type: string + example: 6.8.0-31-generic + OperatingSystem: + description: | + Name of the host's operating system, for example: "Ubuntu 24.04 LTS" + or "Windows Server 2016 Datacenter" + type: string + example: Ubuntu 24.04 LTS + OSVersion: + description: | + Version of the host's operating system + + + + + + + > **Note**: The information returned in this field, including its + > very existence, and the formatting of values, should not be considered + > stable, and may change without notice. + type: string + example: "24.04" + OSType: + description: | + Generic type of the operating system of the host, as returned by the + Go runtime (`GOOS`). + + Currently returned values are "linux" and "windows". A full list of + possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + type: string + example: linux + Architecture: + description: | + Hardware architecture of the host, as returned by the operating system. + This is equivalent to the output of `uname -m` on Linux. + + Unlike `Arch` (from `/version`), this reports the machine's native + architecture, which can differ from the Go runtime architecture when + running a binary compiled for a different architecture (for example, + a 32-bit binary running on 64-bit hardware). + type: string + example: x86_64 + NCPU: + description: | + The number of logical CPUs usable by the daemon. + + The number of available CPUs is checked by querying the operating + system when the daemon starts. Changes to operating system CPU + allocation after the daemon is started are not reflected. + type: integer + example: 4 + MemTotal: + description: | + Total amount of physical memory available on the host, in bytes. + type: integer + format: int64 + example: 2095882240 + IndexServerAddress: + description: | + Address / URL of the index server that is used for image search, + and as a default for user authentication for Docker Hub and Docker Cloud. + default: https://index.docker.io/v1/ + type: string + example: https://index.docker.io/v1/ + RegistryConfig: + $ref: "#/components/schemas/RegistryServiceConfig" + GenericResources: + $ref: "#/components/schemas/GenericResources" + HttpProxy: + description: | + HTTP-proxy configured for the daemon. This value is obtained from the + [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + are masked in the API response. + + Containers do not automatically inherit this configuration. + type: string + example: http://xxxxx:xxxxx@proxy.corp.example.com:8080 + HttpsProxy: + description: | + HTTPS-proxy configured for the daemon. This value is obtained from the + [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + are masked in the API response. + + Containers do not automatically inherit this configuration. + type: string + example: https://xxxxx:xxxxx@proxy.corp.example.com:4443 + NoProxy: + description: | + Comma-separated list of domain extensions for which no proxy should be + used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) + environment variable. + + Containers do not automatically inherit this configuration. + type: string + example: "*.local, 169.254/16" + Name: + description: Hostname of the host. + type: string + example: node5.corp.example.com + Labels: + description: | + User-defined labels (key/value metadata) as set on the daemon. + + + + + + + > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, + > set through the daemon configuration, and _node_ labels, set from a + > manager node in the Swarm. Node labels are not included in this + > field. Node labels can be retrieved using the `/nodes/(id)` endpoint + > on a manager node in the Swarm. + type: array + items: + type: string + example: + - storage=ssd + - production + ExperimentalBuild: + description: | + Indicates if experimental features are enabled on the daemon. + type: boolean + example: true + ServerVersion: + description: | + Version string of the daemon. + type: string + example: 27.0.1 + Runtimes: + description: | + List of [OCI compliant](https://github.com/opencontainers/runtime-spec) + runtimes configured on the daemon. Keys hold the "name" used to + reference the runtime. + + The Docker daemon relies on an OCI compliant runtime (invoked via the + `containerd` daemon) as its interface to the Linux kernel namespaces, + cgroups, and SELinux. + + The default runtime is `runc`, and automatically configured. Additional + runtimes can be configured by the user and will be listed here. + type: object + additionalProperties: + $ref: "#/components/schemas/Runtime" + default: + runc: + path: runc + example: + runc: + path: runc + runc-master: + path: /go/bin/runc + custom: + path: /usr/local/bin/my-oci-runtime + runtimeArgs: + - --debug + - --systemd-cgroup=false + DefaultRuntime: + description: | + Name of the default OCI runtime that is used when starting containers. + + The default can be overridden per-container at create time. + type: string + default: runc + example: runc + Swarm: + $ref: "#/components/schemas/SwarmInfo" + LiveRestoreEnabled: + description: | + Indicates if live restore is enabled. + + If enabled, containers are kept running when the daemon is shutdown + or upon daemon start if running containers are detected. + type: boolean + default: false + example: false + Isolation: + description: | + Represents the isolation technology to use as a default for containers. + The supported values are platform-specific. + + If no isolation value is specified on daemon start, on Windows client, + the default is `hyperv`, and on Windows server, the default is `process`. + + This option is currently not used on other platforms. + default: default + type: string + enum: + - default + - hyperv + - process + - "" + InitBinary: + description: | + Name and, optional, path of the `docker-init` binary. + + If the path is omitted, the daemon searches the host's `$PATH` for the + binary and uses the first result. + type: string + example: docker-init + ContainerdCommit: + $ref: "#/components/schemas/Commit" + RuncCommit: + $ref: "#/components/schemas/Commit" + InitCommit: + $ref: "#/components/schemas/Commit" + SecurityOptions: + description: | + List of security features that are enabled on the daemon, such as + apparmor, seccomp, SELinux, user-namespaces (userns), rootless and + no-new-privileges. + + Additional configuration options for each security feature may + be present, and are included as a comma-separated list of key/value + pairs. + type: array + items: + type: string + example: + - name=apparmor + - name=seccomp,profile=default + - name=selinux + - name=userns + - name=rootless + ProductLicense: + description: | + Reports a summary of the product license on the daemon. + + If a commercial license has been applied to the daemon, information + such as number of nodes, and expiration are included. + type: string + example: Community Engine + DefaultAddressPools: + description: | + List of custom default address pools for local networks, which can be + specified in the daemon.json file or dockerd option. + + Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 + 10.10.[0-255].0/24 address pools. + type: array + items: + type: object + properties: + Base: + description: The network address in CIDR format + type: string + example: 10.10.0.0/16 + Size: + description: The network pool size + type: integer + example: "24" + FirewallBackend: + $ref: "#/components/schemas/FirewallInfo" + DiscoveredDevices: + description: | + List of devices discovered by device drivers. + + Each device includes information about its source driver, kind, name, + and additional driver-specific attributes. + type: array + items: + $ref: "#/components/schemas/DeviceInfo" + NRI: + $ref: "#/components/schemas/NRIInfo" + Warnings: + description: | + List of warnings / informational messages about missing features, or + issues related to the daemon configuration. + + These messages can be printed by the client as information to the user. + type: array + items: + type: string + example: + - "WARNING: No memory limit support" + CDISpecDirs: + description: | + List of directories where (Container Device Interface) CDI + specifications are located. + + These specifications define vendor-specific modifications to an OCI + runtime specification for a container being created. + + An empty list indicates that CDI device injection is disabled. + + Note that since using CDI device injection requires the daemon to have + experimental enabled. For non-experimental daemons an empty list will + always be returned. + type: array + items: + type: string + example: + - /etc/cdi + - /var/run/cdi + Containerd: + $ref: "#/components/schemas/ContainerdInfo" + ContainerdInfo: + description: | + Information for connecting to the containerd instance that is used by the daemon. + This is included for debugging purposes only. + type: + - object + - "null" + properties: + Address: + description: The address of the containerd socket. + type: string + example: /run/containerd/containerd.sock + Namespaces: + description: | + The namespaces that the daemon uses for running containers and + plugins in containerd. These namespaces can be configured in the + daemon configuration, and are considered to be used exclusively + by the daemon, Tampering with the containerd instance may cause + unexpected behavior. + + As these namespaces are considered to be exclusively accessed + by the daemon, it is not recommended to change these values, + or to change them to a value that is used by other systems, + such as cri-containerd. + type: object + properties: + Containers: + description: | + The default containerd namespace used for containers managed + by the daemon. + + The default namespace for containers is "moby", but will be + suffixed with the `.` of the remapped `root` if + user-namespaces are enabled and the containerd image-store + is used. + type: string + default: moby + example: moby + Plugins: + description: | + The default containerd namespace used for plugins managed by + the daemon. + + The default namespace for plugins is "plugins.moby", but will be + suffixed with the `.` of the remapped `root` if + user-namespaces are enabled and the containerd image-store + is used. + type: string + default: plugins.moby + example: plugins.moby + FirewallInfo: + description: | + Information about the daemon's firewalling configuration. + + This field is currently only used on Linux, and omitted on other platforms. + type: + - object + - "null" + properties: + Driver: + description: | + The name of the firewall backend driver. + type: string + example: nftables + Info: + description: | + Information about the firewall backend, provided as + "label" / "value" pairs. + + + + + + + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: array + items: + type: array + items: + type: string + example: + - - ReloadedAt + - 2025-01-01T00:00:00Z + PluginsInfo: + description: | + Available plugins per type. + + + + + + + > **Note**: Only unmanaged (V1) plugins are included in this list. + > V1 plugins are "lazily" loaded, and are not returned in this list + > if there is no resource using the plugin. + type: object + properties: + Volume: + description: Names of available volume-drivers, and network-driver plugins. + type: array + items: + type: string + example: + - local + Network: + description: Names of available network-drivers, and network-driver plugins. + type: array + items: + type: string + example: + - bridge + - host + - ipvlan + - macvlan + - "null" + - overlay + Authorization: + description: Names of available authorization plugins. + type: array + items: + type: string + example: + - img-authz-plugin + - hbm + Log: + description: Names of available logging-drivers, and logging-driver plugins. + type: array + items: + type: string + example: + - awslogs + - fluentd + - gcplogs + - gelf + - journald + - json-file + - splunk + - syslog + RegistryServiceConfig: + description: | + RegistryServiceConfig stores daemon registry services configuration. + type: + - object + - "null" + properties: + InsecureRegistryCIDRs: + description: | + List of IP ranges of insecure registries, using the CIDR syntax + ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries + accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates + from unknown CAs) communication. + + By default, local registries (`::1/128` and `127.0.0.0/8`) are configured as + insecure. All other registries are secure. Communicating with an + insecure registry is not possible if the daemon assumes that registry + is secure. + + This configuration override this behavior, insecure communication with + registries whose resolved IP address is within the subnet described by + the CIDR syntax. + + Registries can also be marked insecure by hostname. Those registries + are listed under `IndexConfigs` and have their `Secure` field set to + `false`. + + > **Warning**: Using this option can be useful when running a local + > registry, but introduces security vulnerabilities. This option + > should therefore ONLY be used for testing purposes. For increased + > security, users should add their CA to their system's list of trusted + > CAs instead of enabling this option. + type: array + items: + type: string + example: + - ::1/128 + - 127.0.0.0/8 + IndexConfigs: + type: object + additionalProperties: + $ref: "#/components/schemas/IndexInfo" + example: + 127.0.0.1:5000: + Name: 127.0.0.1:5000 + Mirrors: [] + Secure: false + Official: false + "[2001:db8:a0b:12f0::1]:80": + Name: "[2001:db8:a0b:12f0::1]:80" + Mirrors: [] + Secure: false + Official: false + docker.io: + Name: docker.io + Mirrors: + - https://hub-mirror.corp.example.com:5000/ + Secure: true + Official: true + registry.internal.corp.example.com:3000: + Name: registry.internal.corp.example.com:3000 + Mirrors: [] + Secure: false + Official: false + Mirrors: + description: | + List of registry URLs that act as a mirror for the official + (`docker.io`) registry. + type: array + items: + type: string + example: + - https://hub-mirror.corp.example.com:5000/ + - https://[2001:db8:a0b:12f0::1]/ + IndexInfo: + description: IndexInfo contains information about a registry. + type: + - object + - "null" + properties: + Name: + description: | + Name of the registry, such as "docker.io". + type: string + example: docker.io + Mirrors: + description: | + List of mirrors, expressed as URIs. + type: array + items: + type: string + example: + - https://hub-mirror.corp.example.com:5000/ + - https://registry-2.docker.io/ + - https://registry-3.docker.io/ + Secure: + description: | + Indicates if the registry is part of the list of insecure + registries. + + If `false`, the registry is insecure. Insecure registries accept + un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from + unknown CAs) communication. + + > **Warning**: Insecure registries can be useful when running a local + > registry. However, because its use creates security vulnerabilities + > it should ONLY be enabled for testing purposes. For increased + > security, users should add their CA to their system's list of + > trusted CAs instead of enabling this option. + type: boolean + example: true + Official: + description: | + Indicates whether this is an official registry (i.e., Docker Hub / docker.io) + type: boolean + example: true + Runtime: + description: | + Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec) + runtime. + + The runtime is invoked by the daemon via the `containerd` daemon. OCI + runtimes act as an interface to the Linux kernel namespaces, cgroups, + and SELinux. + type: object + properties: + path: + description: | + Name and, optional, path, of the OCI executable binary. + + If the path is omitted, the daemon searches the host's `$PATH` for the + binary and uses the first result. + type: string + example: /usr/local/bin/my-oci-runtime + runtimeArgs: + description: | + List of command-line arguments to pass to the runtime when invoked. + type: + - array + - "null" + items: + type: string + example: + - --debug + - --systemd-cgroup=false + status: + description: | + Information specific to the runtime. + + While this API specification does not define data provided by runtimes, + the following well-known properties may be provided by runtimes: + + `org.opencontainers.runtime-spec.features`: features structure as defined + in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), + in a JSON string representation. + + + + + + + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: + - object + - "null" + additionalProperties: + type: string + example: + org.opencontainers.runtime-spec.features: '{"ociVersionMin":"1.0.0","ociVersionMax":"1.1.0","...":"..."}' + Commit: + description: | + Commit holds the Git-commit (SHA1) that a binary was built from, as + reported in the version-string of external tools, such as `containerd`, + or `runC`. + type: object + properties: + ID: + description: Actual commit ID of external tool. + type: string + example: cfb82a876ecc11b5ca0977d1733adbe58599088a + SwarmInfo: + description: | + Represents generic information about swarm. + type: object + properties: + NodeID: + description: Unique identifier of for this node in the swarm. + type: string + default: "" + example: k67qz4598weg5unwwffg6z1m1 + NodeAddr: + description: | + IP address at which this node can be reached by other nodes in the + swarm. + type: string + default: "" + example: 10.0.0.46 + LocalNodeState: + $ref: "#/components/schemas/LocalNodeState" + ControlAvailable: + type: boolean + default: false + example: true + Error: + type: string + default: "" + RemoteManagers: + description: | + List of ID's and addresses of other managers in the swarm. + type: + - array + - "null" + default: null + items: + $ref: "#/components/schemas/PeerNode" + example: + - NodeID: 71izy0goik036k48jg985xnds + Addr: 10.0.0.158:2377 + - NodeID: 79y6h1o4gv8n120drcprv5nmc + Addr: 10.0.0.159:2377 + - NodeID: k67qz4598weg5unwwffg6z1m1 + Addr: 10.0.0.46:2377 + Nodes: + description: Total number of nodes in the swarm. + type: + - integer + - "null" + example: 4 + Managers: + description: Total number of managers in the swarm. + type: + - integer + - "null" + example: 3 + Cluster: + $ref: "#/components/schemas/ClusterInfo" + LocalNodeState: + description: Current local status of this node. + type: string + default: "" + enum: + - "" + - inactive + - pending + - active + - error + - locked + example: active + PeerNode: + description: Represents a peer-node in the swarm + type: object + properties: + NodeID: + description: Unique identifier of for this node in the swarm. + type: string + Addr: + description: | + IP address and ports at which this node can be reached. + type: string + NetworkAttachmentConfig: + description: | + Specifies how a service should be attached to a particular network. + type: object + properties: + Target: + description: | + The target network for attachment. Must be a network name or ID. + type: string + Aliases: + description: | + Discoverable alternate names for the service on this network. + type: array + items: + type: string + DriverOpts: + description: | + Driver attachment options for the network target. + type: object + additionalProperties: + type: string + EventActor: + description: | + Actor describes something that generates events, like a container, network, + or a volume. + type: object + properties: + ID: + description: The ID of the object emitting the event + type: string + example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 + Attributes: + description: | + Various key/value attributes of the object, depending on its type. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-label-value + image: alpine:latest + name: my-container + EventMessage: + description: | + EventMessage represents the information an event contains. + type: object + title: SystemEventsResponse + properties: + Type: + description: The type of object emitting the event + type: string + enum: + - builder + - config + - container + - daemon + - image + - network + - node + - plugin + - secret + - service + - volume + example: container + Action: + description: The type of event + type: string + example: create + Actor: + $ref: "#/components/schemas/EventActor" + scope: + description: | + Scope of the event. Engine events are `local` scope. Cluster (Swarm) + events are `swarm` scope. + type: string + enum: + - local + - swarm + time: + description: Timestamp of event + type: integer + format: int64 + example: 1629574695 + timeNano: + description: Timestamp of event, with nanosecond accuracy + type: integer + format: int64 + example: 1629574695515050000 + OCIDescriptor: + type: object + x-go-name: Descriptor + description: | + A descriptor struct containing digest, media type, and size, as defined in + the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). + properties: + mediaType: + description: | + The media type of the object this schema refers to. + type: string + example: application/vnd.oci.image.manifest.v1+json + digest: + description: | + The digest of the targeted content. + type: string + example: sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96 + size: + description: | + The size in bytes of the blob. + type: integer + format: int64 + example: 424 + urls: + description: List of URLs from which this object MAY be downloaded. + type: + - array + - "null" + items: + type: string + format: uri + annotations: + description: Arbitrary metadata relating to the targeted content. + type: + - object + - "null" + additionalProperties: + type: string + example: + com.docker.official-images.bashbrew.arch: amd64 + org.opencontainers.image.base.digest: sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8 + org.opencontainers.image.base.name: scratch + org.opencontainers.image.created: 2025-01-27T00:00:00Z + org.opencontainers.image.revision: 9fabb4bad5138435b01857e2fe9363e2dc5f6a79 + org.opencontainers.image.source: https://git.launchpad.net/cloud-images/+oci/ubuntu-base + org.opencontainers.image.url: https://hub.docker.com/_/ubuntu + org.opencontainers.image.version: "24.04" + data: + type: + - string + - "null" + description: |- + Data is an embedding of the targeted content. This is encoded as a base64 + string when marshalled to JSON (automatically, by encoding/json). If + present, Data can be used directly to avoid fetching the targeted content. + example: null + platform: + $ref: "#/components/schemas/OCIPlatform" + artifactType: + description: ArtifactType is the IANA media type of this artifact. + type: + - string + - "null" + example: null + OCIPlatform: + type: + - object + - "null" + x-go-name: Platform + description: | + Describes the platform which the image in the manifest runs on, as defined + in the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md). + properties: + architecture: + description: | + The CPU architecture, for example `amd64` or `ppc64`. + type: string + example: arm + os: + description: | + The operating system, for example `linux` or `windows`. + type: string + example: windows + os.version: + description: | + Optional field specifying the operating system version, for example on + Windows `10.0.19041.1165`. + type: string + example: 10.0.19041.1165 + os.features: + description: | + Optional field specifying an array of strings, each listing a required + OS feature (for example on Windows `win32k`). + type: array + items: + type: string + example: + - win32k + variant: + description: | + Optional field specifying a variant of the CPU, for example `v7` to + specify ARMv7 when architecture is `arm`. + type: string + example: v7 + DistributionInspect: + type: object + x-go-name: DistributionInspect + title: DistributionInspectResponse + required: + - Descriptor + - Platforms + description: | + Describes the result obtained from contacting the registry to retrieve + image metadata. + properties: + Descriptor: + $ref: "#/components/schemas/OCIDescriptor" + Platforms: + type: array + description: | + An array containing all platforms supported by the image. + items: + $ref: "#/components/schemas/OCIPlatform" + ClusterVolume: + type: object + description: | + Options and information specific to, and only present on, Swarm CSI + cluster volumes. + properties: + ID: + type: string + description: | + The Swarm ID of this volume. Because cluster volumes are Swarm + objects, they have an ID, unlike non-cluster volumes. This ID can + be used to refer to the Volume instead of the name. + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + type: string + format: dateTime + UpdatedAt: + type: string + format: dateTime + Spec: + $ref: "#/components/schemas/ClusterVolumeSpec" + Info: + type: object + description: | + Information about the global status of the volume. + properties: + CapacityBytes: + type: integer + format: int64 + description: | + The capacity of the volume in bytes. A value of 0 indicates that + the capacity is unknown. + VolumeContext: + type: object + description: | + A map of strings to strings returned from the storage plugin when + the volume is created. + additionalProperties: + type: string + VolumeID: + type: string + description: | + The ID of the volume as returned by the CSI storage plugin. This + is distinct from the volume's ID as provided by Docker. This ID + is never used by the user when communicating with Docker to refer + to this volume. If the ID is blank, then the Volume has not been + successfully created in the plugin yet. + AccessibleTopology: + type: array + description: | + The topology this volume is actually accessible from. + items: + $ref: "#/components/schemas/Topology" + PublishStatus: + type: array + description: | + The status of the volume as it pertains to its publishing and use on + specific nodes + items: + type: object + properties: + NodeID: + type: string + description: | + The ID of the Swarm node the volume is published on. + State: + type: string + description: | + The published state of the volume. + * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. + * `published` The volume is published successfully to the node. + * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. + * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. + enum: + - pending-publish + - published + - pending-node-unpublish + - pending-controller-unpublish + PublishContext: + type: object + description: | + A map of strings to strings returned by the CSI controller + plugin when a volume is published. + additionalProperties: + type: string + ClusterVolumeSpec: + type: object + description: | + Cluster-specific options used to create the volume. + properties: + Group: + type: string + description: | + Group defines the volume group of this volume. Volumes belonging to + the same group can be referred to by group name when creating + Services. Referring to a volume by group instructs Swarm to treat + volumes in that group interchangeably for the purpose of scheduling. + Volumes with an empty string for a group technically all belong to + the same, emptystring group. + AccessMode: + type: object + description: | + Defines how the volume is used by tasks. + properties: + Scope: + type: string + description: | + The set of nodes this volume can be used on at one time. + - `single` The volume may only be scheduled to one node at a time. + - `multi` the volume may be scheduled to any supported number of nodes at a time. + default: single + enum: + - single + - multi + Sharing: + type: string + description: | + The number and way that different tasks can use this volume + at one time. + - `none` The volume may only be used by one task at a time. + - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly + - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. + - `all` The volume may have any number of readers and writers. + default: none + enum: + - none + - readonly + - onewriter + - all + MountVolume: + type: object + description: | + Options for using this volume as a Mount-type volume. + + Either MountVolume or BlockVolume, but not both, must be + present. + properties: + FsType: + type: "string" + description: | + Specifies the filesystem type for the mount volume. + Optional. + MountFlags: + type: "array" + description: | + Flags to pass when mounting the volume. Optional. + items: + type: "string" + BlockVolume: + type: "object" + description: | + Options for using this volume as a Block-type volume. + Intentionally empty. + Secrets: + type: array + description: | + Swarm Secrets that are passed to the CSI storage plugin when + operating on this volume. + items: + type: object + description: | + One cluster volume secret entry. Defines a key-value pair that + is passed to the plugin. + properties: + Key: + type: string + description: | + Key is the name of the key of the key-value pair passed to + the plugin. + Secret: + type: string + description: | + Secret is the swarm Secret object from which to read data. + This can be a Secret name or ID. The Secret data is + retrieved by swarm and used as the value of the key-value + pair passed to the plugin. + AccessibilityRequirements: + type: object + description: | + Requirements for the accessible topology of the volume. These + fields are optional. For an in-depth description of what these + fields mean, see the CSI specification. + properties: + Requisite: + type: array + description: | + A list of required topologies, at least one of which the + volume must be accessible from. + items: + $ref: "#/components/schemas/Topology" + Preferred: + type: array + description: | + A list of topologies that the volume should attempt to be + provisioned in. + items: + $ref: "#/components/schemas/Topology" + CapacityRange: + type: object + description: | + The desired capacity that the volume should be created with. If + empty, the plugin will decide the capacity. + properties: + RequiredBytes: + type: integer + format: int64 + description: | + The volume must be at least this big. The value of 0 + indicates an unspecified minimum + LimitBytes: + type: integer + format: int64 + description: | + The volume must not be bigger than this. The value of 0 + indicates an unspecified maximum. + Availability: + type: string + description: | + The availability of the volume for use in tasks. + - `active` The volume is fully available for scheduling on the cluster + - `pause` No new workloads should use the volume, but existing workloads are not stopped. + - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. + default: active + enum: + - active + - pause + - drain + Topology: + description: | + A map of topological domains to topological segments. For in depth + details, see documentation for the Topology object in the CSI + specification. + type: object + properties: + Segments: + type: object + additionalProperties: + type: string + AttestationStatement: + x-go-name: AttestationStatement + description: | + AttestationStatement is a single in-toto statement attached to an image. + type: object + required: + - Descriptor + - PredicateType + properties: + Descriptor: + $ref: "#/components/schemas/OCIDescriptor" + PredicateType: + description: The in-toto predicate type URI of this statement. + type: string + example: https://slsa.dev/provenance/v0.2 + Statement: + description: | + The verbatim in-toto statement JSON. Only included when the caller + opts in via the `statement=true` query parameter; otherwise absent. + type: + - object + - "null" + ImageManifestSummary: + x-go-name: ManifestSummary + description: | + ImageManifestSummary represents a summary of an image manifest. + type: object + required: + - ID + - Descriptor + - Available + - Size + - Kind + properties: + ID: + description: | + ID is the content-addressable ID of an image and is the same as the + digest of the image manifest. + type: string + example: sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f + Descriptor: + $ref: "#/components/schemas/OCIDescriptor" + Available: + description: Indicates whether all the child content (image config, layers) is fully available locally. + type: boolean + example: true + Size: + type: object + required: + - Content + - Total + properties: + Total: + type: integer + format: int64 + example: 8213251 + description: | + Total is the total size (in bytes) of all the locally present + data (both distributable and non-distributable) that's related to + this manifest and its children. + This equal to the sum of [Content] size AND all the sizes in the + [Size] struct present in the Kind-specific data struct. + For example, for an image kind (Kind == "image") + this would include the size of the image content and unpacked + image snapshots ([Size.Content] + [ImageData.Size.Unpacked]). + Content: + description: | + Content is the size (in bytes) of all the locally present + content in the content store (e.g. image config, layers) + referenced by this manifest and its children. + This only includes blobs in the content store. + type: integer + format: int64 + example: 3987495 + Kind: + type: string + example: image + enum: + - image + - attestation + - unknown + description: | + The kind of the manifest. + + kind | description + -------------|----------------------------------------------------------- + image | Image manifest that can be used to start a container. + attestation | Attestation manifest produced by the Buildkit builder for a specific image manifest. + ImageData: + description: | + The image data for the image manifest. + This field is only populated when Kind is "image". + type: + - object + - "null" + x-omitempty: true + required: + - Platform + - Containers + - Size + - UnpackedSize + properties: + Platform: + allOf: + - $ref: "#/components/schemas/OCIPlatform" + - description: | + OCI platform of the image. This will be the platform specified in the + manifest descriptor from the index/manifest list. + If it's not available, it will be obtained from the image config. + Identity: + allOf: + - $ref: "#/components/schemas/Identity" + - anyOf: + - description: | + Identity holds information about the identity and origin of this image. + For image list responses, this can duplicate Build/Pull fields across + image manifests, because those parts are image-level metadata. + - type: "null" + Containers: + description: | + The IDs of the containers that are using this image. + type: array + items: + type: string + example: + - ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430 + - abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e + Size: + type: object + required: + - Unpacked + properties: + Unpacked: + type: integer + format: int64 + example: 3987495 + description: | + Unpacked is the size (in bytes) of the locally unpacked + (uncompressed) image content that's directly usable by the containers + running this image. + It's independent of the distributable content - e.g. + the image might still have an unpacked data that's still used by + some container even when the distributable/compressed content is + already gone. + AttestationData: + description: | + The image data for the attestation manifest. + This field is only populated when Kind is "attestation". + type: + - object + - "null" + x-omitempty: true + required: + - For + properties: + For: + description: | + The digest of the image manifest that this attestation is for. + type: string + example: sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +security: [] diff --git a/prototypes/api-docs/converted/engine-1.56.yaml b/prototypes/api-docs/converted/engine-1.56.yaml new file mode 100644 index 000000000000..26ebb74758d1 --- /dev/null +++ b/prototypes/api-docs/converted/engine-1.56.yaml @@ -0,0 +1,15424 @@ +openapi: 3.2.0 +info: + title: Docker Engine API + version: "1.56" + x-logo: + url: https://docs.docker.com/assets/images/logo-docker-main.png + description: | + The Engine API is an HTTP API served by Docker Engine. It is the API the + Docker client uses to communicate with the Engine, so everything the Docker + client can do can be done with the API. + + Most of the client's commands map directly to API endpoints (e.g. `docker ps` + is `GET /containers/json`). The notable exception is running containers, + which consists of several API calls. + + # Errors + + The API uses standard HTTP status codes to indicate the success or failure + of the API call. The body of the response will be JSON in the following + format: + + ``` + { + "message": "page not found" + } + ``` + + # Versioning + + The API is usually changed in each release, so API calls are versioned to + ensure that clients don't break. To lock to a specific version of the API, + you prefix the URL with its version, for example, call `/v1.30/info` to use + the v1.30 version of the `/info` endpoint. If the API version specified in + the URL is not supported by the daemon, a HTTP `400 Bad Request` error message + is returned. + + If you omit the version-prefix, the current version of the API is used. + For example, calling `/info` is the same as calling `/v1.56/info`. Using the + API without a version-prefix is deprecated and will be removed in a future release. + + Engine releases in the near future should support this version of the API, + so your client will continue to work even if it is talking to a newer Engine. + + The API uses an open schema model, which means the server may add extra properties + to responses. Likewise, the server will ignore any extra query parameters and + request body properties. When you write clients, you need to ignore additional + properties in responses to ensure they do not break when talking to newer + daemons. + + + # Authentication + + Authentication for registries is handled client side. The client has to send + authentication details to various endpoints that need to communicate with + registries, such as `POST /images/(name)/push`. These are sent as + `X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5) + (JSON) string with the following structure: + + ``` + { + "username": "string", + "password": "string", + "serveraddress": "string" + } + ``` + + The `serveraddress` is a domain/IP without a protocol. Throughout this + structure, double quotes are required. + + If you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth), + you can just pass this instead of credentials: + + ``` + { + "identitytoken": "9cbaf023786cd7..." + } + ``` +tags: + - name: Container + description: | + Create and manage containers. + summary: Containers + kind: nav + - name: Image + summary: Images + kind: nav + description: Images reference. + - name: Network + description: | + Networks are user-defined networks that containers can be attached to. + See the [networking documentation](https://docs.docker.com/network/) + for more information. + summary: Networks + kind: nav + - name: Volume + description: | + Create and manage persistent storage that can be attached to containers. + summary: Volumes + kind: nav + - name: Exec + description: | + Run new commands inside running containers. Refer to the + [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) + for more information. + + To exec a command in a container, you first need to create an exec instance, + then start it. These two API endpoints are wrapped up in a single command-line + command, `docker exec`. + summary: Exec + kind: nav + - name: Swarm + description: | + Engines can be clustered together in a swarm. Refer to the + [swarm mode documentation](https://docs.docker.com/engine/swarm/) + for more information. + summary: Swarm + kind: nav + - name: Node + description: | + Nodes are instances of the Engine participating in a swarm. Swarm mode + must be enabled for these endpoints to work. + summary: Nodes + kind: nav + - name: Service + description: | + Services are the definitions of tasks to run on a swarm. Swarm mode must + be enabled for these endpoints to work. + summary: Services + kind: nav + - name: Task + description: | + A task is a container running on a swarm. It is the atomic scheduling unit + of swarm. Swarm mode must be enabled for these endpoints to work. + summary: Tasks + kind: nav + - name: Secret + description: | + Secrets are sensitive data that can be used by services. Swarm mode must + be enabled for these endpoints to work. + summary: Secrets + kind: nav + - name: Config + description: | + Configs are application configurations that can be used by services. Swarm + mode must be enabled for these endpoints to work. + summary: Configs + kind: nav + - name: Plugin + summary: Plugins + kind: nav + description: Plugins reference. + - name: System + summary: System + kind: nav + description: System reference. + - name: Distribution + description: Distribution operations. + summary: Distribution + kind: nav + - name: Session + description: Session operations. + summary: Session + kind: nav +paths: + /containers/json: + get: + summary: List containers + description: | + Returns a list of containers. For details on the format, see the + [inspect endpoint](#operation/ContainerInspect). + + Note that it uses a different, smaller representation of a container + than inspecting a single container. For example, the list of linked + containers is not propagated . + operationId: ContainerList + parameters: + - name: all + in: query + description: | + Return all containers. By default, only running containers are shown. + schema: + type: boolean + default: false + - name: limit + in: query + description: | + Return this number of most recently created containers, including + non-running ones. + schema: + type: integer + - name: size + in: query + description: | + Return the size of container as fields `SizeRw` and `SizeRootFs`. + schema: + type: boolean + default: false + - name: filters + in: query + description: | + Filters to process on the container list, encoded as JSON (a + `map[string][]string`). For example, `{"status": ["paused"]}` will + only return paused containers. + + Available filters: + + - `ancestor`=(`[:]`, ``, or ``) + - `annotation=key` or `annotation="key=value"` of a container annotation + - `before`=(`` or ``) + - `expose`=(`[/]`|`/[]`) + - `exited=` containers with exit code of `` + - `health`=(`starting`|`healthy`|`unhealthy`|`none`) + - `id=` a container's ID + - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) + - `is-task=`(`true`|`false`) + - `label=key` or `label="key=value"` of a container label + - `name=` a container's name + - `network`=(`` or ``) + - `publish`=(`[/]`|`/[]`) + - `since`=(`` or ``) + - `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`) + - `volume`=(`` or ``) + schema: + type: string + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ContainerSummary" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Container + /containers/create: + post: + summary: Create a container + operationId: ContainerCreate + parameters: + - name: name + in: query + description: | + Assign the specified name to the container. Must match + `/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`. + schema: + type: string + pattern: ^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$ + - name: platform + in: query + description: | + Platform in the format `os[/arch[/variant]]` used for image lookup. + + When specified, the daemon checks if the requested image is present + in the local image cache with the given OS and Architecture, and + otherwise returns a `404` status. + + If the option is not set, the host's native OS and Architecture are + used to look up the image in the image cache. However, if no platform + is passed and the given image does exist in the local image cache, + but its OS or architecture does not match, the container is created + with the available image, and a warning is added to the `Warnings` + field in the response, for example; + + WARNING: The requested image's platform (linux/arm64/v8) does not + match the detected host platform (linux/amd64) and no + specific platform was requested + schema: + type: string + default: "" + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/ContainerConfig" + - type: object + properties: + HostConfig: + $ref: "#/components/schemas/HostConfig" + NetworkingConfig: + $ref: "#/components/schemas/NetworkingConfig" + example: + Hostname: "" + Domainname: "" + User: "" + AttachStdin: false + AttachStdout: true + AttachStderr: true + Tty: false + OpenStdin: false + StdinOnce: false + Env: + - FOO=bar + - BAZ=quux + Cmd: + - date + Entrypoint: "" + Image: ubuntu + Labels: + com.example.vendor: Acme + com.example.license: GPL + com.example.version: "1.0" + Volumes: + /volumes/data: {} + WorkingDir: "" + NetworkDisabled: false + ExposedPorts: + 22/tcp: {} + StopSignal: SIGTERM + StopTimeout: 10 + HostConfig: + Binds: + - /tmp:/tmp + Links: + - redis3:redis + Memory: 0 + MemorySwap: 0 + MemoryReservation: 0 + NanoCpus: 500000 + CpuPercent: 80 + CpuShares: 512 + CpuPeriod: 100000 + CpuRealtimePeriod: 1000000 + CpuRealtimeRuntime: 10000 + CpuQuota: 50000 + CpusetCpus: 0,1 + CpusetMems: 0,1 + MaximumIOps: 0 + MaximumIOBps: 0 + BlkioWeight: 300 + BlkioWeightDevice: + - {} + BlkioDeviceReadBps: + - {} + BlkioDeviceReadIOps: + - {} + BlkioDeviceWriteBps: + - {} + BlkioDeviceWriteIOps: + - {} + DeviceRequests: + - Driver: nvidia + Count: -1 + DeviceIDs": + - "0" + - "1" + - GPU-fef8089b-4820-abfc-e83e-94318197576e + Capabilities: + - - gpu + - nvidia + - compute + Options: + property1: string + property2: string + MemorySwappiness: 60 + OomKillDisable: false + OomScoreAdj: 500 + PidMode: "" + PidsLimit: 0 + PortBindings: + 22/tcp: + - HostPort: "11022" + PublishAllPorts: false + Privileged: false + ReadonlyRootfs: false + Dns: + - 8.8.8.8 + DnsOptions: + - "" + DnsSearch: + - "" + VolumesFrom: + - parent + - other:ro + CapAdd: + - NET_ADMIN + CapDrop: + - MKNOD + GroupAdd: + - newgroup + RestartPolicy: + Name: "" + MaximumRetryCount: 0 + AutoRemove: true + NetworkMode: bridge + Devices: [] + Ulimits: + - {} + LogConfig: + Type: json-file + Config: {} + SecurityOpt: [] + StorageOpt: {} + CgroupParent: "" + VolumeDriver: "" + ShmSize: 67108864 + NetworkingConfig: + EndpointsConfig: + isolated_nw: + IPAMConfig: + IPv4Address: 172.20.30.33 + IPv6Address: 2001:db8:abcd::3033 + LinkLocalIPs: + - 169.254.34.68 + - fe80::3468 + Links: + - container_1 + - container_2 + Aliases: + - server_x + - server_y + database_nw: {} + application/octet-stream: + schema: + allOf: + - $ref: "#/components/schemas/ContainerConfig" + - type: object + properties: + HostConfig: + $ref: "#/components/schemas/HostConfig" + NetworkingConfig: + $ref: "#/components/schemas/NetworkingConfig" + example: + Hostname: "" + Domainname: "" + User: "" + AttachStdin: false + AttachStdout: true + AttachStderr: true + Tty: false + OpenStdin: false + StdinOnce: false + Env: + - FOO=bar + - BAZ=quux + Cmd: + - date + Entrypoint: "" + Image: ubuntu + Labels: + com.example.vendor: Acme + com.example.license: GPL + com.example.version: "1.0" + Volumes: + /volumes/data: {} + WorkingDir: "" + NetworkDisabled: false + ExposedPorts: + 22/tcp: {} + StopSignal: SIGTERM + StopTimeout: 10 + HostConfig: + Binds: + - /tmp:/tmp + Links: + - redis3:redis + Memory: 0 + MemorySwap: 0 + MemoryReservation: 0 + NanoCpus: 500000 + CpuPercent: 80 + CpuShares: 512 + CpuPeriod: 100000 + CpuRealtimePeriod: 1000000 + CpuRealtimeRuntime: 10000 + CpuQuota: 50000 + CpusetCpus: 0,1 + CpusetMems: 0,1 + MaximumIOps: 0 + MaximumIOBps: 0 + BlkioWeight: 300 + BlkioWeightDevice: + - {} + BlkioDeviceReadBps: + - {} + BlkioDeviceReadIOps: + - {} + BlkioDeviceWriteBps: + - {} + BlkioDeviceWriteIOps: + - {} + DeviceRequests: + - Driver: nvidia + Count: -1 + DeviceIDs": + - "0" + - "1" + - GPU-fef8089b-4820-abfc-e83e-94318197576e + Capabilities: + - - gpu + - nvidia + - compute + Options: + property1: string + property2: string + MemorySwappiness: 60 + OomKillDisable: false + OomScoreAdj: 500 + PidMode: "" + PidsLimit: 0 + PortBindings: + 22/tcp: + - HostPort: "11022" + PublishAllPorts: false + Privileged: false + ReadonlyRootfs: false + Dns: + - 8.8.8.8 + DnsOptions: + - "" + DnsSearch: + - "" + VolumesFrom: + - parent + - other:ro + CapAdd: + - NET_ADMIN + CapDrop: + - MKNOD + GroupAdd: + - newgroup + RestartPolicy: + Name: "" + MaximumRetryCount: 0 + AutoRemove: true + NetworkMode: bridge + Devices: [] + Ulimits: + - {} + LogConfig: + Type: json-file + Config: {} + SecurityOpt: [] + StorageOpt: {} + CgroupParent: "" + VolumeDriver: "" + ShmSize: 67108864 + NetworkingConfig: + EndpointsConfig: + isolated_nw: + IPAMConfig: + IPv4Address: 172.20.30.33 + IPv6Address: 2001:db8:abcd::3033 + LinkLocalIPs: + - 169.254.34.68 + - fe80::3468 + Links: + - container_1 + - container_2 + Aliases: + - server_x + - server_y + database_nw: {} + description: Container to create + required: true + responses: + "201": + description: Container created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerCreateResponse" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such image: c2ada9df5af8" + "409": + description: conflict + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Container + description: Create a container. + /containers/{id}/json: + get: + summary: Inspect a container + description: Return low-level information about a container. + operationId: ContainerInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerInspectResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: size + in: query + description: Return the size of container as fields `SizeRw` and `SizeRootFs` + schema: + type: boolean + default: false + tags: + - Container + /containers/{id}/top: + get: + summary: List processes running inside a container + description: | + On Unix systems, this is done by running the `ps` command. This endpoint + is not supported on Windows. + operationId: ContainerTop + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerTopResponse" + text/plain: + schema: + $ref: "#/components/schemas/ContainerTopResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: ps_args + in: query + description: The arguments to pass to `ps`. For example, `aux` + schema: + type: string + default: -ef + tags: + - Container + /containers/{id}/logs: + get: + summary: Get container logs + description: | + Get `stdout` and `stderr` logs from a container. + + Note: This endpoint works only for containers with the `json-file` or + `journald` logging driver. + operationId: ContainerLogs + responses: + "200": + description: | + logs returned as a stream in response body. + For the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach). + Note that unlike the attach endpoint, the logs endpoint does not + upgrade the connection and does not set Content-Type. + content: + application/vnd.docker.raw-stream: + schema: + type: string + format: binary + application/vnd.docker.multiplexed-stream: + schema: + type: string + format: binary + "404": + description: no such container + content: + application/vnd.docker.raw-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/vnd.docker.multiplexed-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: follow + in: query + description: Keep connection after returning logs. + schema: + type: boolean + default: false + - name: stdout + in: query + description: Return logs from `stdout` + schema: + type: boolean + default: false + - name: stderr + in: query + description: Return logs from `stderr` + schema: + type: boolean + default: false + - name: since + in: query + description: Only return logs since this time, as a UNIX timestamp + schema: + type: integer + default: 0 + - name: until + in: query + description: Only return logs before this time, as a UNIX timestamp + schema: + type: integer + default: 0 + - name: timestamps + in: query + description: Add timestamps to every log line + schema: + type: boolean + default: false + - name: tail + in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + schema: + type: string + default: all + tags: + - Container + /containers/{id}/changes: + get: + summary: Get changes on a container’s filesystem + description: | + Returns which files in a container's filesystem have been added, deleted, + or modified. The `Kind` of modification can be one of: + + - `0`: Modified ("C") + - `1`: Added ("A") + - `2`: Deleted ("D") + operationId: ContainerChanges + responses: + "200": + description: The list of changes + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FilesystemChange" + examples: + response: + value: + - Path: /dev + Kind: 0 + - Path: /dev/kmsg + Kind: 1 + - Path: /test + Kind: 1 + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + tags: + - Container + /containers/{id}/export: + get: + summary: Export a container + description: Export the contents of a container as a tarball. + operationId: ContainerExport + responses: + "200": + description: no error + "404": + description: no such container + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + tags: + - Container + /containers/{id}/stats: + get: + summary: Get container stats based on resource usage + description: | + This endpoint returns a live stream of a container’s resource usage + statistics. + + The `precpu_stats` is the CPU statistic of the *previous* read, and is + used to calculate the CPU usage percentage. It is not an exact copy + of the `cpu_stats` field. + + If either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is + nil then for compatibility with older daemons the length of the + corresponding `cpu_usage.percpu_usage` array should be used. + + On a cgroup v2 host, the following fields are not set + * `blkio_stats`: all fields other than `io_service_bytes_recursive` + * `cpu_stats`: `cpu_usage.percpu_usage` + * `memory_stats`: `max_usage` and `failcnt` + Also, `memory_stats.stats` fields are incompatible with cgroup v1. + + To calculate the values shown by the `stats` command of the docker cli tool + the following formulas can be used: + * used_memory = `memory_stats.usage - memory_stats.stats.cache` (cgroups v1) + * used_memory = `memory_stats.usage - memory_stats.stats.inactive_file` (cgroups v2) + * available_memory = `memory_stats.limit` + * Memory usage % = `(used_memory / available_memory) * 100.0` + * cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage` + * system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage` + * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus` + * CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0` + operationId: ContainerStats + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerStatsResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: stream + in: query + description: | + Stream the output. If false, the stats will be output once and then + it will disconnect. + schema: + type: boolean + default: true + - name: one-shot + in: query + description: | + Only get a single stat instead of waiting for 2 cycles. Must be used + with `stream=false`. + schema: + type: boolean + default: false + tags: + - Container + /containers/{id}/resize: + post: + summary: Resize a container TTY + description: Resize the TTY for a container. + operationId: ContainerResize + responses: + "200": + description: no error + "404": + description: no such container + content: + text/plain: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: cannot resize container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: h + in: query + required: true + description: Height of the TTY session in characters + schema: + type: integer + - name: w + in: query + required: true + description: Width of the TTY session in characters + schema: + type: integer + tags: + - Container + /containers/{id}/start: + post: + summary: Start a container + operationId: ContainerStart + responses: + "204": + description: no error + "304": + description: container already started + "400": + description: bad parameter, including an invalid checkpoint ID + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: detachKeys + in: query + description: | + Override the key sequence for detaching a container. Format is a + single character `[a-Z]` or `ctrl-` where `` is one + of: `a-z`, `@`, `^`, `[`, `,` or `_`. + schema: + type: string + tags: + - Container + description: Start a container. + /containers/{id}/stop: + post: + summary: Stop a container + operationId: ContainerStop + responses: + "204": + description: no error + "304": + description: container already stopped + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: signal + in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + schema: + type: string + - name: t + in: query + description: Number of seconds to wait before killing the container + schema: + type: integer + tags: + - Container + description: Stop a container. + /containers/{id}/restart: + post: + summary: Restart a container + operationId: ContainerRestart + responses: + "204": + description: no error + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: signal + in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + schema: + type: string + - name: t + in: query + description: Number of seconds to wait before killing the container + schema: + type: integer + tags: + - Container + description: Restart a container. + /containers/{id}/kill: + post: + summary: Kill a container + description: | + Send a POSIX signal to a container, defaulting to killing to the + container. + operationId: ContainerKill + responses: + "204": + description: no error + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "409": + description: container is not running + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: signal + in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + schema: + type: string + default: SIGKILL + tags: + - Container + /containers/{id}/update: + post: + summary: Update a container + description: | + Change various configuration options of a container without having to + recreate it. + operationId: ContainerUpdate + responses: + "200": + description: The container has been updated. + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerUpdateResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/Resources" + - type: object + properties: + RestartPolicy: + $ref: "#/components/schemas/RestartPolicy" + example: + BlkioWeight: 300 + CpuShares: 512 + CpuPeriod: 100000 + CpuQuota: 50000 + CpuRealtimePeriod: 1000000 + CpuRealtimeRuntime: 10000 + CpusetCpus: 0,1 + CpusetMems: "0" + Memory: 314572800 + MemorySwap: 514288000 + MemoryReservation: 209715200 + RestartPolicy: + MaximumRetryCount: 4 + Name: on-failure + required: true + tags: + - Container + /containers/{id}/rename: + post: + summary: Rename a container + operationId: ContainerRename + responses: + "204": + description: no error + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "409": + description: name already in use + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: name + in: query + required: true + description: New name for the container + schema: + type: string + tags: + - Container + description: Rename a container. + /containers/{id}/pause: + post: + summary: Pause a container + description: | + Use the freezer cgroup to suspend all processes in a container. + + Traditionally, when suspending a process the `SIGSTOP` signal is used, + which is observable by the process being suspended. With the freezer + cgroup the process is unaware, and unable to capture, that it is being + suspended, and subsequently resumed. + operationId: ContainerPause + responses: + "204": + description: no error + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + tags: + - Container + /containers/{id}/unpause: + post: + summary: Unpause a container + description: Resume a container which has been paused. + operationId: ContainerUnpause + responses: + "204": + description: no error + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + tags: + - Container + /containers/{id}/attach: + post: + summary: Attach to a container + description: | + Attach to a container to read its output or send it input. You can attach + to the same container multiple times and you can reattach to containers + that have been detached. + + Either the `stream` or `logs` parameter must be `true` for this endpoint + to do anything. + + See the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/) + for more details. + + ### Hijacking + + This endpoint hijacks the HTTP connection to transport `stdin`, `stdout`, + and `stderr` on the same socket. + + This is the response from the daemon for an attach request: + + ``` + HTTP/1.1 200 OK + Content-Type: application/vnd.docker.raw-stream + + [STREAM] + ``` + + After the headers and two new lines, the TCP connection can now be used + for raw, bidirectional communication between the client and server. + + To hint potential proxies about connection hijacking, the Docker client + can also optionally send connection upgrade headers. + + For example, the client sends this request to upgrade the connection: + + ``` + POST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1 + Upgrade: tcp + Connection: Upgrade + ``` + + The Docker daemon will respond with a `101 UPGRADED` response, and will + similarly follow with the raw stream: + + ``` + HTTP/1.1 101 UPGRADED + Content-Type: application/vnd.docker.raw-stream + Connection: Upgrade + Upgrade: tcp + + [STREAM] + ``` + + ### Stream format + + When the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate), + the HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream + and the stream over the hijacked connected is multiplexed to separate out + `stdout` and `stderr`. The stream consists of a series of frames, each + containing a header and a payload. + + The header contains the information which the stream writes (`stdout` or + `stderr`). It also contains the size of the associated frame encoded in + the last four bytes (`uint32`). + + It is encoded on the first eight bytes like this: + + ```go + header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} + ``` + + `STREAM_TYPE` can be: + + - 0: `stdin` (is written on `stdout`) + - 1: `stdout` + - 2: `stderr` + + `SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size + encoded as big endian. + + Following the header is the payload, which is the specified number of + bytes of `STREAM_TYPE`. + + The simplest way to implement this protocol is the following: + + 1. Read 8 bytes. + 2. Choose `stdout` or `stderr` depending on the first byte. + 3. Extract the frame size from the last four bytes. + 4. Read the extracted size and output it on the correct output. + 5. Goto 1. + + ### Stream format when using a TTY + + When the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate), + the stream is not multiplexed. The data exchanged over the hijacked + connection is simply the raw data from the process PTY and client's + `stdin`. + operationId: ContainerAttach + responses: + "101": + description: no error, hints proxy about hijacking + "200": + description: no error, no upgrade header found + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such container + content: + application/vnd.docker.raw-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/vnd.docker.multiplexed-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: detachKeys + in: query + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,` or `_`. + schema: + type: string + - name: logs + in: query + description: | + Replay previous logs from the container. + + This is useful for attaching to a container that has started and you + want to output everything since the container started. + + If `stream` is also enabled, once all the previous output has been + returned, it will seamlessly transition into streaming current + output. + schema: + type: boolean + default: false + - name: stream + in: query + description: | + Stream attached streams from the time the request was made onwards. + schema: + type: boolean + default: false + - name: stdin + in: query + description: Attach to `stdin` + schema: + type: boolean + default: false + - name: stdout + in: query + description: Attach to `stdout` + schema: + type: boolean + default: false + - name: stderr + in: query + description: Attach to `stderr` + schema: + type: boolean + default: false + tags: + - Container + /containers/{id}/attach/ws: + get: + summary: Attach to a container via a websocket + operationId: ContainerAttachWebsocket + responses: + "101": + description: no error, hints proxy about hijacking + "200": + description: no error, no upgrade header found + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: detachKeys + in: query + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,`, or `_`. + schema: + type: string + - name: logs + in: query + description: Return logs + schema: + type: boolean + default: false + - name: stream + in: query + description: Return stream + schema: + type: boolean + default: false + - name: stdin + in: query + description: Attach to `stdin` + schema: + type: boolean + default: false + - name: stdout + in: query + description: Attach to `stdout` + schema: + type: boolean + default: false + - name: stderr + in: query + description: Attach to `stderr` + schema: + type: boolean + default: false + tags: + - Container + description: Attach to a container via a websocket. + /containers/{id}/wait: + post: + summary: Wait for a container + description: Block until a container stops, then returns the exit code. + operationId: ContainerWait + responses: + "200": + description: The container has exit. + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerWaitResponse" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: condition + in: query + description: | + Wait until a container state reaches the given condition. + + Defaults to `not-running` if omitted or empty. + schema: + type: string + enum: + - not-running + - next-exit + - removed + default: not-running + tags: + - Container + /containers/{id}: + delete: + summary: Remove a container + operationId: ContainerDelete + responses: + "204": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "409": + description: conflict + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: | + You cannot remove a running container: c2ada9df5af8. Stop the + container before attempting removal or force remove + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: v + in: query + description: Remove anonymous volumes associated with the container. + schema: + type: boolean + default: false + - name: force + in: query + description: If the container is running, kill it before removing it. + schema: + type: boolean + default: false + - name: link + in: query + description: Remove the specified link associated with the container. + schema: + type: boolean + default: false + tags: + - Container + description: Remove a container. + /containers/{id}/archive: + head: + summary: Get information about files in a container + description: | + A response header `X-Docker-Container-Path-Stat` is returned, containing + a base64 - encoded JSON object with some filesystem header information + about the path. + operationId: ContainerArchiveInfo + responses: + "200": + description: no error + headers: + X-Docker-Container-Path-Stat: + description: | + A base64 - encoded JSON object with some filesystem header + information about the path + schema: + type: string + "400": + description: Bad parameter + "404": + description: Container or path does not exist + "500": + description: Server error + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: path + in: query + required: true + description: Resource in the container’s filesystem to archive. + schema: + type: string + tags: + - Container + get: + summary: Get an archive of a filesystem resource in a container + description: Get a tar archive of a resource in the filesystem of container id. + operationId: ContainerArchive + responses: + "200": + description: no error + content: + application/x-tar: {} + "400": + description: Bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: Container or path does not exist + content: + application/x-tar: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: path + in: query + required: true + description: Resource in the container’s filesystem to archive. + schema: + type: string + tags: + - Container + put: + summary: Extract an archive of files or folders to a directory in a container + description: | + Upload a tar archive to be extracted to a path in the filesystem of container id. + `path` parameter is asserted to be a directory. If it exists as a file, 400 error + will be returned with message "not a directory". + operationId: PutContainerArchive + responses: + "200": + description: The content was extracted successfully + "400": + description: Bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: not a directory + "403": + description: Permission denied, the volume or container rootfs is marked as read-only. + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: No such container or path does not exist inside the container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the container + schema: + type: string + - name: path + in: query + required: true + description: "Path to a directory in the container to extract the archive’s contents into. " + schema: + type: string + - name: noOverwriteDirNonDir + in: query + description: | + If `1`, `true`, or `True` then it will be an error if unpacking the + given content would cause an existing directory to be replaced with + a non-directory and vice versa. + schema: + type: string + - name: copyUIDGID + in: query + description: | + If `1`, `true`, then it will copy UID/GID maps to the dest file or + dir + schema: + type: string + requestBody: + content: + application/x-tar: + schema: + type: string + format: binary + application/octet-stream: + schema: + type: string + format: binary + description: | + The input stream must be a tar archive compressed with one of the + following algorithms: `identity` (no compression), `gzip`, `bzip2`, + or `xz`. + required: true + tags: + - Container + /containers/prune: + post: + summary: Delete stopped containers + operationId: ContainerPrune + parameters: + - name: filters + in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels. + schema: + type: string + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: ContainerPruneResponse + properties: + ContainersDeleted: + description: Container IDs that were deleted + type: array + items: + type: string + SpaceReclaimed: + description: Disk space reclaimed in bytes + type: integer + format: int64 + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Container + description: Delete stopped containers. + /images/json: + get: + summary: List Images + description: Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image. + operationId: ImageList + responses: + "200": + description: Summary image data for the images matching the query + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ImageSummary" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: all + in: query + description: Show all images. Only images from a final layer (no children) are shown by default. + schema: + type: boolean + default: false + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the images list. + + Available filters: + + - `before`=(`[:]`, `` or ``) + - `dangling=true` + - `label=key` or `label="key=value"` of an image label + - `reference`=(`[:]`) + - `since`=(`[:]`, `` or ``) + - `until=` + schema: + type: string + - name: shared-size + in: query + description: Compute and show shared size as a `SharedSize` field on each image. + schema: + type: boolean + default: false + - name: digests + in: query + description: Show digest information as a `RepoDigests` field on each image. + schema: + type: boolean + default: false + - name: manifests + in: query + description: Include `Manifests` in the image summary. + schema: + type: boolean + default: false + - name: identity + in: query + description: Include `Identity` in each manifest summary. Requires `manifests=1`. + schema: + type: boolean + default: false + tags: + - Image + /build: + post: + summary: Build an image + description: | + Build an image from a tar archive with a `Dockerfile` in it. + + The `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/). + + The Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output. + + The build is canceled if the client drops the connection by quitting or being killed. + operationId: ImageBuild + parameters: + - name: dockerfile + in: query + description: Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`. + schema: + type: string + default: Dockerfile + - name: t + in: query + description: A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters. + schema: + type: string + - name: extrahosts + in: query + description: Extra hosts to add to /etc/hosts + schema: + type: string + - name: remote + in: query + description: A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball. + schema: + type: string + - name: q + in: query + description: Suppress verbose build output. + schema: + type: boolean + default: false + - name: nocache + in: query + description: Do not use the cache when building the image. + schema: + type: boolean + default: false + - name: cachefrom + in: query + description: JSON array of images used for build cache resolution. + schema: + type: string + - name: pull + in: query + description: Attempt to pull the image even if an older image exists locally. + schema: + type: string + - name: rm + in: query + description: Remove intermediate containers after a successful build. + schema: + type: boolean + default: true + - name: forcerm + in: query + description: Always remove intermediate containers, even upon failure. + schema: + type: boolean + default: false + - name: memory + in: query + description: Set memory limit for build. + schema: + type: integer + format: int64 + - name: memswap + in: query + description: Total memory (memory + swap). Set as `-1` to disable swap. + schema: + type: integer + format: int64 + - name: cpushares + in: query + description: CPU shares (relative weight). + schema: + type: integer + format: int64 + - name: cpusetcpus + in: query + description: CPUs in which to allow execution (e.g., `0-3`, `0,1`). + schema: + type: string + - name: cpuperiod + in: query + description: The length of a CPU period in microseconds. + schema: + type: integer + format: int64 + - name: cpuquota + in: query + description: Microseconds of CPU time that the container can get in a CPU period. + schema: + type: integer + format: int64 + - name: buildargs + in: query + description: | + JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values. + + For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded. + + [Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg) + schema: + type: string + - name: shmsize + in: query + description: Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. + schema: + type: integer + format: int64 + - name: squash + in: query + description: Squash the resulting images layers into a single layer. *(Experimental release only.)* + schema: + type: boolean + - name: labels + in: query + description: Arbitrary key/value labels to set on the image, as a JSON map of string pairs. + schema: + type: string + - name: networkmode + in: query + description: | + Sets the networking mode for the run commands during build. Supported + standard values are: `bridge`, `host`, `none`, and `container:`. + Any other value is taken as a custom network's name or ID to which this + container should connect to. + schema: + type: string + - name: Content-type + in: header + schema: + type: string + enum: + - application/x-tar + default: application/x-tar + - name: X-Registry-Config + in: header + description: | + This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to. + + The key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example: + + ``` + { + "docker.example.com": { + "username": "janedoe", + "password": "hunter2" + }, + "https://index.docker.io/v1/": { + "username": "mobydock", + "password": "conta1n3rize14" + } + } + ``` + + Only the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API. + schema: + type: string + - name: platform + in: query + description: Platform in the format os[/arch[/variant]] + schema: + type: string + default: "" + - name: target + in: query + description: Target build stage + schema: + type: string + default: "" + - name: outputs + in: query + description: | + BuildKit output configuration in the format of a stringified JSON array of objects. + Each object must have two top-level properties: `Type` and `Attrs`. + The `Type` property must be set to 'moby'. + The `Attrs` property is a map of attributes for the BuildKit output configuration. + See https://docs.docker.com/build/exporters/oci-docker/ for more information. + + Example: + + ``` + [{"Type":"moby","Attrs":{"type":"image","force-compression":"true","compression":"zstd"}}] + ``` + schema: + type: string + default: "" + - name: version + in: query + description: | + Version of the builder backend to use. + + - `1` is the first generation classic (deprecated) builder in the Docker daemon (default) + - `2` is [BuildKit](https://github.com/moby/buildkit) + schema: + type: string + enum: + - "1" + - "2" + default: "1" + requestBody: + content: + application/octet-stream: + schema: + type: string + format: binary + description: "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." + responses: + "200": + description: no error + "400": + description: Bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Image + /build/prune: + post: + summary: Delete builder cache + operationId: BuildPrune + parameters: + - name: reserved-space + in: query + description: Amount of disk space in bytes to keep for cache + schema: + type: integer + format: int64 + - name: max-used-space + in: query + description: Maximum amount of disk space allowed to keep for cache + schema: + type: integer + format: int64 + - name: min-free-space + in: query + description: Target amount of free disk space after pruning + schema: + type: integer + format: int64 + - name: all + in: query + description: Remove all types of build cache + schema: + type: boolean + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the list of build cache objects. + + Available filters: + + - `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time. + - `id=` + - `parent=` + - `type=` + - `description=` + - `inuse` + - `shared` + - `private` + schema: + type: string + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: BuildPruneResponse + properties: + CachesDeleted: + type: array + items: + description: ID of build cache object + type: string + SpaceReclaimed: + description: Disk space reclaimed in bytes + type: integer + format: int64 + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Image + description: Delete builder cache. + /images/create: + post: + summary: Create an image + description: Pull or import an image. + operationId: ImageCreate + responses: + "200": + description: no error + "404": + description: repository does not exist or no read access + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: fromImage + in: query + description: | + Name of the image to pull. If the name includes a tag or digest, specific behavior applies: + + - If only `fromImage` includes a tag, that tag is used. + - If both `fromImage` and `tag` are provided, `tag` takes precedence. + - If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored. + - If neither a tag nor digest is specified, all tags are pulled. + schema: + type: string + - name: fromSrc + in: query + description: Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image. + schema: + type: string + - name: repo + in: query + description: Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image. + schema: + type: string + - name: tag + in: query + description: Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled. + schema: + type: string + - name: message + in: query + description: Set commit message for imported image. + schema: + type: string + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. + schema: + type: string + - name: changes + in: query + description: | + Apply `Dockerfile` instructions to the image that is created, + for example: `changes=ENV DEBUG=true`. + Note that `ENV DEBUG=true` should be URI component encoded. + + Supported `Dockerfile` instructions: + `CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR` + style: form + explode: false + schema: + type: array + items: + type: string + - name: platform + in: query + description: | + Platform in the format os[/arch[/variant]]. + + When used in combination with the `fromImage` option, the daemon checks + if the given image is present in the local image cache with the given + OS and Architecture, and otherwise attempts to pull the image. If the + option is not set, the host's native OS and Architecture are used. + If the given image does not exist in the local image cache, the daemon + attempts to pull the image with the host's native OS and Architecture. + If the given image does exists in the local image cache, but its OS or + architecture does not match, a warning is produced. + + When used with the `fromSrc` option to import an image from an archive, + this option sets the platform information for the imported image. If + the option is not set, the host's native OS and Architecture are used + for the imported image. + schema: + type: string + default: "" + requestBody: + content: + text/plain: + schema: + type: string + application/octet-stream: + schema: + type: string + description: Image content if the value `-` has been specified in fromSrc query parameter + tags: + - Image + /images/{name}/json: + get: + summary: Inspect an image + description: Return low-level information about an image. + operationId: ImageInspect + responses: + "200": + description: No error + content: + application/json: + schema: + $ref: "#/components/schemas/ImageInspect" + "404": + description: No such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such image: someimage (tag: latest)" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or id + required: true + schema: + type: string + - name: manifests + in: query + description: |- + Include Manifests in the image summary. + + The `manifests` and `platform` options are mutually exclusive, and + an error is produced if both are set. + required: false + schema: + type: boolean + default: false + - name: platform + in: query + description: |- + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, + prioritizing the daemon's host platform. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to show inspect. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + The `platform` and `manifests` options are mutually exclusive, and + an error is produced if both are set. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + schema: + type: string + tags: + - Image + /images/{name}/attestations: + get: + summary: Get attestation statements for an image + description: | + Return the in-toto attestation statements attached to the image for the + given platform. The daemon locates the attestation manifest(s) that + reference the matching platform image manifest, reads their statement + layers, and returns the verbatim statement JSON together with layer + metadata. + + If the image has no attestations an empty array is returned. + operationId: ImageAttestations + responses: + "200": + description: No error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/AttestationStatement" + "400": + description: Bad parameter (e.g. malformed `platform` value) + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: No such image, or no manifest found for the requested platform + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "501": + description: | + The daemon's image backend does not support attestations. This + is returned by the legacy (graphdriver) image store, which does + not preserve OCI image indexes. + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or id + required: true + schema: + type: string + - name: platform + in: query + description: |- + JSON-encoded OCI platform to select the image variant whose + attestations to return. + If omitted, the daemon's default (host) platform is used. + + Only one platform value is currently accepted; passing more than + one returns an error. The parameter is declared as an array so the + wire shape can accept multiple values in the future without an + API version bump. + + Example: `{"os": "linux", "architecture": "amd64"}` + required: false + explode: true + schema: + type: array + items: + type: string + - name: type + in: query + description: |- + In-toto predicate type URI to filter returned statements. May be + repeated to accept any of several predicate types. If omitted, all + statements are returned. + + Example: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document` + required: false + explode: true + schema: + type: array + items: + type: string + - name: statement + in: query + description: |- + Include the verbatim in-toto statement body in each returned + entry. Defaults to false; when omitted or false, only the + descriptor and predicate type are returned and statement blobs + are not read. + required: false + schema: + type: boolean + default: false + tags: + - Image + /images/{name}/history: + get: + summary: Get the history of an image + description: Return parent layers of an image. + operationId: ImageHistory + responses: + "200": + description: List of image layers + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ImageHistoryResponseItem" + examples: + response: + value: + - Id: 3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710 + Created: 1398108230 + CreatedBy: "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /" + Tags: + - ubuntu:lucid + - ubuntu:10.04 + Size: 182964289 + Comment: "" + - Id: 6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8 + Created: 1398108222 + CreatedBy: "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/" + Tags: [] + Size: 0 + Comment: "" + - Id: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158 + Created: 1371157430 + CreatedBy: "" + Tags: + - scratch12:latest + - scratch:latest + Size: 0 + Comment: Imported from - + "404": + description: No such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or ID + required: true + schema: + type: string + - name: platform + in: query + description: | + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, + prioritizing the daemon's host platform. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to show the history for. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + schema: + type: string + tags: + - Image + /images/{name}/push: + post: + summary: Push an image + description: | + Push an image to a registry. + + If you wish to push an image on to a private registry, that image must + already have a tag which references the registry. For example, + `registry.example.com/myimage:latest`. + + The push is cancelled if the HTTP connection is closed. + operationId: ImagePush + responses: + "200": + description: No error + "404": + description: No such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + Name of the image to push. For example, `registry.example.com/myimage`. + The image must be present in the local image store with the same name. + + The name should be provided without tag; if a tag is provided, it + is ignored. For example, `registry.example.com/myimage:latest` is + considered equivalent to `registry.example.com/myimage`. + + Use the `tag` parameter to specify the tag to push. + required: true + schema: + type: string + - name: tag + in: query + description: | + Tag of the image to push. For example, `latest`. If no tag is provided, + all tags of the given image that are present in the local image store + are pushed. + schema: + type: string + - name: platform + in: query + description: | + JSON-encoded OCI platform to select the platform-variant to push. + If not provided, all available variants will attempt to be pushed. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to push to the registry. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + schema: + type: string + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. + required: true + schema: + type: string + tags: + - Image + /images/{name}/tag: + post: + summary: Tag an image + description: | + Create a tag that refers to a source image. + + This creates an additional reference (tag) to the source image. The tag + can include a different repository name and/or tag. If the repository + or tag already exists, it will be overwritten. + operationId: ImageTag + responses: + "201": + description: No error + "400": + description: Bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: No such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "409": + description: Conflict + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or ID to tag. + required: true + schema: + type: string + - name: repo + in: query + description: The repository to tag in. For example, `someuser/someimage`. + schema: + type: string + - name: tag + in: query + description: The name of the new tag. + schema: + type: string + tags: + - Image + /images/{name}: + delete: + summary: Remove an image + description: | + Remove an image, along with any untagged parent images that were + referenced by that image. + + Images can't be removed if they have descendant images, are being + used by a running container or are being used by a build. + operationId: ImageDelete + responses: + "200": + description: The image was deleted successfully + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ImageDeleteResponseItem" + examples: + response: + value: + - Untagged: 3e2f21a89f + - Deleted: 3e2f21a89f + - Deleted: 53b4f83ac9 + "404": + description: No such image + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "409": + description: Conflict + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or ID + required: true + schema: + type: string + - name: force + in: query + description: Remove the image even if it is being used by stopped containers or has other tags + schema: + type: boolean + default: false + - name: noprune + in: query + description: Do not delete untagged parent images + schema: + type: boolean + default: false + - name: platforms + in: query + description: | + Select platform-specific content to delete. + Multiple values are accepted. + Each platform is a OCI platform encoded as a JSON string. + style: form + explode: false + schema: + type: array + items: + type: string + tags: + - Image + /images/search: + get: + summary: Search images + description: Search for an image on Docker Hub. + operationId: ImageSearch + responses: + "200": + description: No error + content: + application/json: + schema: + type: array + items: + type: object + title: ImageSearchResponseItem + properties: + description: + type: string + is_official: + type: boolean + is_automated: + description: | + Whether this repository has automated builds enabled. + + + + + + + > **Deprecated**: This field is deprecated and will always be "false". + type: boolean + example: false + name: + type: string + star_count: + type: integer + examples: + response: + value: + - description: A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size! + is_official: true + is_automated: false + name: alpine + star_count: 10093 + - description: Busybox base image. + is_official: true + is_automated: false + name: Busybox base image. + star_count: 3037 + - description: The PostgreSQL object-relational database system provides reliability and data integrity. + is_official: true + is_automated: false + name: postgres + star_count: 12408 + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: term + in: query + description: Term to search + required: true + schema: + type: string + - name: limit + in: query + description: Maximum number of results to return + schema: + type: integer + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters: + + - `is-official=(true|false)` + - `stars=` Matches images that has at least 'number' stars. + schema: + type: string + tags: + - Image + /images/prune: + post: + summary: Delete unused images + operationId: ImagePrune + parameters: + - name: filters + in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters: + + - `dangling=` When set to `true` (or `1`), prune only + unused *and* untagged images. When set to `false` + (or `0`), all unused images are pruned. + - `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels. + schema: + type: string + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: ImagePruneResponse + properties: + ImagesDeleted: + description: Images that were deleted + type: array + items: + $ref: "#/components/schemas/ImageDeleteResponseItem" + SpaceReclaimed: + description: Disk space reclaimed in bytes + type: integer + format: int64 + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Image + description: Delete unused images. + /auth: + post: + summary: Check auth configuration + description: | + Validate credentials for a registry and, if available, get an identity + token for accessing the registry without password. + operationId: SystemAuth + responses: + "200": + description: An identity token was generated successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/AuthResponse" + "204": + description: No error + "401": + description: Auth error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/AuthConfig" + description: Authentication to check + tags: + - System + /info: + get: + summary: Get system information + operationId: SystemInfo + responses: + "200": + description: No error + content: + application/json: + schema: + $ref: "#/components/schemas/SystemInfo" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - System + description: Get system information. + /version: + get: + summary: Get version + description: Returns the version of Docker that is running and various information about the system that Docker is running on. + operationId: SystemVersion + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/SystemVersion" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - System + /_ping: + get: + summary: Ping + description: This is a dummy endpoint you can use to test if the server is accessible. + operationId: SystemPing + responses: + "200": + description: no error + headers: + Api-Version: + description: Max API Version the server supports + schema: + type: string + Builder-Version: + description: | + Default version of docker image builder + + The default on Linux is version "2" (BuildKit), but the daemon + can be configured to recommend version "1" (classic Builder). + Windows does not yet support BuildKit for native Windows images, + and uses "1" (classic builder) as a default. + + This value is a recommendation as advertised by the daemon, and + it is up to the client to choose which builder to use. + schema: + type: string + default: "2" + Docker-Experimental: + description: If the server is running with experimental mode enabled + schema: + type: boolean + Swarm: + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. + schema: + type: string + enum: + - inactive + - pending + - error + - locked + - active/worker + - active/manager + default: inactive + Cache-Control: + schema: + type: string + default: no-cache, no-store, must-revalidate + Pragma: + schema: + type: string + default: no-cache + content: + text/plain: + schema: + type: string + example: OK + "500": + description: server error + headers: + Cache-Control: + schema: + type: string + default: no-cache, no-store, must-revalidate + Pragma: + schema: + type: string + default: no-cache + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - System + head: + summary: Ping + description: This is a dummy endpoint you can use to test if the server is accessible. + operationId: SystemPingHead + responses: + "200": + description: no error + headers: + Api-Version: + description: Max API Version the server supports + schema: + type: string + Builder-Version: + description: Default version of docker image builder + schema: + type: string + Docker-Experimental: + description: If the server is running with experimental mode enabled + schema: + type: boolean + Swarm: + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. + schema: + type: string + enum: + - inactive + - pending + - error + - locked + - active/worker + - active/manager + default: inactive + Cache-Control: + schema: + type: string + default: no-cache, no-store, must-revalidate + Pragma: + schema: + type: string + default: no-cache + "500": + description: server error + tags: + - System + /commit: + post: + summary: Create a new image from a container + operationId: ImageCommit + responses: + "201": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/IDResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: container + in: query + description: The ID or name of the container to commit + schema: + type: string + - name: repo + in: query + description: Repository name for the created image + schema: + type: string + - name: tag + in: query + description: Tag name for the create image + schema: + type: string + - name: comment + in: query + description: Commit message + schema: + type: string + - name: author + in: query + description: Author of the image (e.g., `John Hannibal Smith `) + schema: + type: string + - name: pause + in: query + description: Whether to pause the container before committing + schema: + type: boolean + default: true + - name: changes + in: query + description: "`Dockerfile` instructions to apply while committing" + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ContainerConfig" + description: The container configuration + tags: + - Image + description: Create a new image from a container. + /events: + get: + summary: Monitor events + description: | + Stream real-time events from the server. + + Various objects within Docker report events when something happens to them. + + Containers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune` + + Images report these events: `create`, `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune` + + Volumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune` + + Networks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune` + + The Docker daemon reports these events: `reload` + + Services report these events: `create`, `update`, and `remove` + + Nodes report these events: `create`, `update`, and `remove` + + Secrets report these events: `create`, `update`, and `remove` + + Configs report these events: `create`, `update`, and `remove` + + The Builder reports `prune` events + operationId: SystemEvents + responses: + "200": + description: no error + content: + application/jsonl: + schema: + $ref: "#/components/schemas/EventMessage" + application/x-ndjson: + schema: + $ref: "#/components/schemas/EventMessage" + application/json-seq: + schema: + $ref: "#/components/schemas/EventMessage" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: since + in: query + description: Show events created since this timestamp then stream new events. + schema: + type: string + - name: until + in: query + description: Show events created until this timestamp then stop streaming. + schema: + type: string + - name: filters + in: query + description: | + A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters: + + - `config=` config name or ID + - `container=` container name or ID + - `daemon=` daemon name or ID + - `event=` event type + - `image=` image name or ID + - `label=` image or container label + - `network=` network name or ID + - `node=` node ID + - `plugin`= plugin name or ID + - `scope`= local or swarm + - `secret=` secret name or ID + - `service=` service name or ID + - `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config` + - `volume=` volume name + schema: + type: string + tags: + - System + /system/df: + get: + summary: Get data usage information + operationId: SystemDataUsage + responses: + "200": + description: no error + content: + application/json: + schema: + type: object + title: SystemDataUsageResponse + properties: + ImageUsage: + $ref: "#/components/schemas/ImagesDiskUsage" + ContainerUsage: + $ref: "#/components/schemas/ContainersDiskUsage" + VolumeUsage: + $ref: "#/components/schemas/VolumesDiskUsage" + BuildCacheUsage: + $ref: "#/components/schemas/BuildCacheDiskUsage" + text/plain: + schema: + type: object + title: SystemDataUsageResponse + properties: + ImageUsage: + $ref: "#/components/schemas/ImagesDiskUsage" + ContainerUsage: + $ref: "#/components/schemas/ContainersDiskUsage" + VolumeUsage: + $ref: "#/components/schemas/VolumesDiskUsage" + BuildCacheUsage: + $ref: "#/components/schemas/BuildCacheDiskUsage" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: type + in: query + description: | + Object types, for which to compute and return data. + explode: true + schema: + type: array + items: + type: string + enum: + - container + - image + - volume + - build-cache + - name: verbose + in: query + description: | + Show detailed information on space usage. + schema: + type: boolean + default: false + tags: + - System + description: Get data usage information. + /images/{name}/get: + get: + summary: Export an image + description: | + Get a tarball containing all images and metadata for a repository. + + If `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced. + + ### Image tarball format + + An image tarball contains [Content as defined in the OCI Image Layout Specification](https://github.com/opencontainers/image-spec/blob/v1.1.1/image-layout.md#content). + + Additionally, includes the manifest.json file associated with a backwards compatible docker save format. + + If the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs. + + ```json + { + "hello-world": { + "latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1" + } + } + ``` + operationId: ImageGet + responses: + "200": + description: no error + content: + application/x-tar: + schema: + type: string + format: binary + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or ID + required: true + schema: + type: string + - name: platform + in: query + description: | + JSON encoded OCI platform describing a platform which will be used + to select a platform-specific image to be saved if the image is + multi-platform. + If not provided, the full multi-platform image will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + explode: true + schema: + type: array + items: + type: string + tags: + - Image + /images/get: + get: + summary: Export several images + description: | + Get a tarball containing all images and metadata for several image + repositories. + + For each value of the `names` parameter: if it is a specific name and + tag (e.g. `ubuntu:latest`), then only that image (and its parents) are + returned; if it is an image ID, similarly only that image (and its parents) + are returned and there would be no names referenced in the 'repositories' + file for this image ID. + + For details on the format, see the [export image endpoint](#operation/ImageGet). + operationId: ImageGetAll + responses: + "200": + description: no error + content: + application/x-tar: + schema: + type: string + format: binary + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: names + in: query + description: Image names to filter by + style: form + explode: false + schema: + type: array + items: + type: string + - name: platform + in: query + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to be saved if the image is + multi-platform. If not provided, the full multi-platform image + will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + explode: true + schema: + type: array + items: + type: string + tags: + - Image + /images/load: + post: + summary: Import images + description: | + Load a set of images and tags into a repository. + + For details on the format, see the [export image endpoint](#operation/ImageGet). + operationId: ImageLoad + responses: + "200": + description: no error + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: quiet + in: query + description: Suppress progress details during load. + schema: + type: boolean + default: false + - name: platform + in: query + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to load if the image is + multi-platform. If not provided, the full multi-platform image + will be loaded. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + explode: true + schema: + type: array + items: + type: string + requestBody: + content: + application/x-tar: + schema: + type: string + format: binary + description: Tar archive containing images + tags: + - Image + /containers/{id}/exec: + post: + summary: Create an exec instance + description: Run a command inside a running container. + operationId: ContainerExec + responses: + "201": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/IDResponse" + "404": + description: no such container + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such container: c2ada9df5af8" + "409": + description: container is paused + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: ID or name of container + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: object + title: ExecConfig + properties: + AttachStdin: + type: boolean + description: Attach to `stdin` of the exec command. + AttachStdout: + type: boolean + description: Attach to `stdout` of the exec command. + AttachStderr: + type: boolean + description: Attach to `stderr` of the exec command. + ConsoleSize: + type: + - array + - "null" + description: Initial console size, as an `[height, width]` array. + minItems: 2 + maxItems: 2 + items: + type: integer + minimum: 0 + example: + - 80 + - 64 + DetachKeys: + type: string + description: | + Override the key sequence for detaching a container. Format is + a single character `[a-Z]` or `ctrl-` where `` + is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. + Tty: + type: boolean + description: Allocate a pseudo-TTY. + Env: + description: | + A list of environment variables in the form `["VAR=value", ...]`. + type: array + items: + type: string + Cmd: + type: array + description: Command to run, as a string or array of strings. + items: + type: string + Privileged: + type: boolean + description: Runs the exec process with extended privileges. + default: false + User: + type: string + description: | + The user, and optionally, group to run the exec process inside + the container. Format is one of: `user`, `user:group`, `uid`, + or `uid:gid`. + WorkingDir: + type: string + description: | + The working directory for the exec process inside the container. + example: + AttachStdin: false + AttachStdout: true + AttachStderr: true + DetachKeys: ctrl-p,ctrl-q + Tty: false + Cmd: + - date + Env: + - FOO=bar + - BAZ=quux + description: Exec configuration + required: true + tags: + - Exec + /exec/{id}/start: + post: + summary: Start an exec instance + description: | + Starts a previously set up exec instance. If detach is true, this endpoint + returns immediately after starting the command. Otherwise, it sets up an + interactive session with the command. + operationId: ExecStart + responses: + "200": + description: No error + "404": + description: No such exec instance + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "409": + description: Container is stopped or paused + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Exec instance ID + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: object + title: ExecStartConfig + properties: + Detach: + type: boolean + description: Detach from the command. + example: false + Tty: + type: boolean + description: Allocate a pseudo-TTY. + example: true + ConsoleSize: + type: + - array + - "null" + description: Initial console size, as an `[height, width]` array. + minItems: 2 + maxItems: 2 + items: + type: integer + minimum: 0 + example: + - 80 + - 64 + tags: + - Exec + /exec/{id}/resize: + post: + summary: Resize an exec instance + description: | + Resize the TTY session used by an exec instance. This endpoint only works + if `tty` was specified as part of creating and starting the exec instance. + operationId: ExecResize + responses: + "200": + description: No error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: No such exec instance + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Exec instance ID + required: true + schema: + type: string + - name: h + in: query + required: true + description: Height of the TTY session in characters + schema: + type: integer + - name: w + in: query + required: true + description: Width of the TTY session in characters + schema: + type: integer + tags: + - Exec + /exec/{id}/json: + get: + summary: Inspect an exec instance + description: Return low-level information about an exec instance. + operationId: ExecInspect + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: ExecInspectResponse + properties: + CanRemove: + type: boolean + DetachKeys: + type: string + ID: + type: string + Running: + type: boolean + ExitCode: + type: integer + ProcessConfig: + $ref: "#/components/schemas/ProcessConfig" + OpenStdin: + type: boolean + OpenStderr: + type: boolean + OpenStdout: + type: boolean + ContainerID: + type: string + Pid: + type: integer + description: The system process ID for the exec process. + examples: + response: + value: + CanRemove: false + ContainerID: b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126 + DetachKeys: "" + ExitCode: 2 + ID: f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b + OpenStderr: true + OpenStdin: true + OpenStdout: true + ProcessConfig: + arguments: + - -c + - exit 2 + entrypoint: sh + privileged: false + tty: true + user: "1000" + Running: false + Pid: 42000 + "404": + description: No such exec instance + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Exec instance ID + required: true + schema: + type: string + tags: + - Exec + /volumes: + get: + summary: List volumes + operationId: VolumeList + responses: + "200": + description: Summary volume data that matches the query + content: + application/json: + schema: + $ref: "#/components/schemas/VolumeListResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + JSON encoded value of the filters (a `map[string][]string`) to + process on the volumes list. Available filters: + + - `dangling=` When set to `true` (or `1`), returns all + volumes that are not in use by a container. When set to `false` + (or `0`), only volumes that are in use by one or more + containers are returned. + - `driver=` Matches volumes based on their driver. + - `label=` or `label=:` Matches volumes based on + the presence of a `label` alone or a `label` and a value. + - `name=` Matches all or part of a volume name. + schema: + type: string + format: json + tags: + - Volume + description: List volumes. + /volumes/create: + post: + summary: Create a volume + operationId: VolumeCreate + responses: + "201": + description: The volume was created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/Volume" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/VolumeCreateRequest" + description: Volume configuration + required: true + tags: + - Volume + description: Create a volume. + /volumes/{name}: + get: + summary: Inspect a volume + operationId: VolumeInspect + responses: + "200": + description: No error + content: + application/json: + schema: + $ref: "#/components/schemas/Volume" + "404": + description: No such volume + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + required: true + description: Volume name or ID + schema: + type: string + tags: + - Volume + description: Inspect a volume. + put: + summary: | + "Update a volume. Valid only for Swarm cluster volumes" + operationId: VolumeUpdate + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such volume + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: The name or ID of the volume + required: true + schema: + type: string + - name: version + in: query + description: | + The version number of the volume being updated. This is required to + avoid conflicting writes. Found in the volume's `ClusterVolume` + field. + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + type: object + description: Volume configuration + properties: + Spec: + $ref: "#/components/schemas/ClusterVolumeSpec" + description: | + The spec of the volume to update. Currently, only Availability may + change. All other fields must remain unchanged. + tags: + - Volume + description: |- + "Update a volume. Valid only for Swarm cluster volumes" + . + delete: + summary: Remove a volume + description: Instruct the driver to remove the volume. + operationId: VolumeDelete + responses: + "204": + description: The volume was removed + "404": + description: No such volume or volume driver + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "409": + description: Volume is in use and cannot be removed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + required: true + description: Volume name or ID + schema: + type: string + - name: force + in: query + description: Force the removal of the volume + schema: + type: boolean + default: false + tags: + - Volume + /volumes/prune: + post: + summary: Delete unused volumes + operationId: VolumePrune + parameters: + - name: filters + in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels. + - `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes. + schema: + type: string + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: VolumePruneResponse + properties: + VolumesDeleted: + description: Volumes that were deleted + type: array + items: + type: string + SpaceReclaimed: + description: Disk space reclaimed in bytes + type: integer + format: int64 + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Volume + description: Delete unused volumes. + /networks: + get: + summary: List networks + description: | + Returns a list of networks. For details on the format, see the + [network inspect endpoint](#operation/NetworkInspect). + + Note that it uses a different, smaller representation of a network than + inspecting a single network. For example, the list of containers attached + to the network is not propagated in API versions 1.28 and up. + operationId: NetworkList + responses: + "200": + description: No error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/NetworkSummary" + examples: + response: + value: + - Name: bridge + Id: f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566 + Created: 2016-10-19T06:21:00.416543526Z + Scope: local + Driver: bridge + EnableIPv4: true + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: default + Config: + - Subnet: 172.17.0.0/16 + Options: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 + com.docker.network.bridge.name: docker0 + com.docker.network.driver.mtu: "1500" + - Name: none + Id: e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794 + Created: 0001-01-01T00:00:00Z + Scope: local + Driver: "null" + EnableIPv4: false + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: default + Config: [] + Containers: {} + Options: {} + - Name: host + Id: 13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e + Created: 0001-01-01T00:00:00Z + Scope: local + Driver: host + EnableIPv4: false + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: default + Config: [] + Containers: {} + Options: {} + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + JSON encoded value of the filters (a `map[string][]string`) to process + on the networks list. + + Available filters: + + - `dangling=` When set to `true` (or `1`), returns all + networks that are not in use by a container. When set to `false` + (or `0`), only networks that are in use by one or more + containers are returned. + - `driver=` Matches a network's driver. + - `id=` Matches all or part of a network ID. + - `label=` or `label==` of a network label. + - `name=` Matches all or part of a network name. + - `scope=["swarm"|"global"|"local"]` Filters networks by scope (`swarm`, `global`, or `local`). + - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. + schema: + type: string + tags: + - Network + /networks/{id}: + get: + summary: Inspect a network + operationId: NetworkInspect + responses: + "200": + description: No error + content: + application/json: + schema: + $ref: "#/components/schemas/NetworkInspect" + "404": + description: Network not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Network ID or name + required: true + schema: + type: string + - name: verbose + in: query + description: Detailed inspect output for troubleshooting + schema: + type: boolean + default: false + - name: scope + in: query + description: Filter the network by scope (swarm, global, or local) + schema: + type: string + tags: + - Network + description: Inspect a network. + delete: + summary: Remove a network + operationId: NetworkDelete + responses: + "204": + description: No error + "403": + description: operation not supported for pre-defined networks + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such network + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Network ID or name + required: true + schema: + type: string + tags: + - Network + description: Remove a network. + /networks/create: + post: + summary: Create a network + operationId: NetworkCreate + responses: + "201": + description: Network created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/NetworkCreateResponse" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "403": + description: | + Forbidden operation. This happens when trying to create a network named after a pre-defined network, + or when trying to create an overlay network on a daemon which is not part of a Swarm cluster. + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: plugin not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + type: object + title: NetworkCreateRequest + required: + - Name + properties: + Name: + description: The network's name. + type: string + example: my_network + Driver: + description: Name of the network driver plugin to use. + type: string + default: bridge + example: bridge + Scope: + description: | + The level at which the network exists (e.g. `swarm` for cluster-wide + or `local` for machine level). + type: string + Internal: + description: Restrict external access to the network. + type: boolean + Attachable: + description: | + Globally scoped network is manually attachable by regular + containers from workers in swarm mode. + type: boolean + example: true + Ingress: + description: | + Ingress network is the network which provides the routing-mesh + in swarm mode. + type: boolean + example: false + ConfigOnly: + description: | + Creates a config-only network. Config-only networks are placeholder + networks for network configurations to be used by other networks. + Config-only networks cannot be used directly to run containers + or services. + type: boolean + default: false + example: false + ConfigFrom: + allOf: + - $ref: "#/components/schemas/ConfigReference" + - description: | + Specifies the source which will provide the configuration for + this network. The specified network must be an existing + config-only network; see ConfigOnly. + IPAM: + allOf: + - $ref: "#/components/schemas/IPAM" + - description: Optional custom IP scheme for the network. + EnableIPv4: + description: Enable IPv4 on the network. + type: boolean + example: true + EnableIPv6: + description: Enable IPv6 on the network. + type: boolean + example: true + Options: + description: Network specific options to be used by the drivers. + type: object + additionalProperties: + type: string + example: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 + com.docker.network.bridge.name: docker0 + com.docker.network.driver.mtu: "1500" + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + description: Network configuration + required: true + tags: + - Network + description: Create a network. + /networks/{id}/connect: + post: + summary: Connect a container to a network + description: The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container + operationId: NetworkConnect + responses: + "200": + description: No error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "403": + description: Operation forbidden + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: Network or container not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Network ID or name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/NetworkConnectRequest" + required: true + tags: + - Network + /networks/{id}/disconnect: + post: + summary: Disconnect a container from a network + operationId: NetworkDisconnect + responses: + "200": + description: No error + "403": + description: Operation not supported for swarm scoped networks + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: Network or container not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: Network ID or name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/NetworkDisconnectRequest" + required: true + tags: + - Network + description: Disconnect a container from a network. + /networks/prune: + post: + summary: Delete unused networks + operationId: NetworkPrune + parameters: + - name: filters + in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels. + schema: + type: string + responses: + "200": + description: No error + content: + application/json: + schema: + type: object + title: NetworkPruneResponse + properties: + NetworksDeleted: + description: Networks that were deleted + type: array + items: + type: string + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Network + description: Delete unused networks. + /plugins: + get: + summary: List plugins + operationId: PluginList + description: Returns information about installed plugins. + responses: + "200": + description: No error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Plugin" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the plugin list. + + Available filters: + + - `capability=` + - `enable=|` + schema: + type: string + tags: + - Plugin + /plugins/privileges: + get: + summary: Get plugin privileges + operationId: GetPluginPrivileges + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/PluginPrivilege" + example: + - Name: network + Description: "" + Value: + - host + - Name: mount + Description: "" + Value: + - /data + - Name: device + Description: "" + Value: + - /dev/cpu_dma_latency + text/plain: + schema: + type: array + items: + $ref: "#/components/schemas/PluginPrivilege" + example: + - Name: network + Description: "" + Value: + - host + - Name: mount + Description: "" + Value: + - /data + - Name: device + Description: "" + Value: + - /dev/cpu_dma_latency + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: remote + in: query + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + tags: + - Plugin + description: Get plugin privileges. + /plugins/pull: + post: + summary: Install a plugin + operationId: PluginPull + description: | + Pulls and installs a plugin. After the plugin is installed, it can be + enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable). + responses: + "204": + description: no error + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: remote + in: query + description: | + Remote reference for plugin to install. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true + schema: + type: string + - name: name + in: query + description: | + Local name for the pulled plugin. + + The `:latest` tag is optional, and is used as the default if omitted. + required: false + schema: + type: string + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. + schema: + type: string + requestBody: + $ref: "#/components/requestBodies/PluginPrivilegeArray" + tags: + - Plugin + /plugins/{name}/json: + get: + summary: Inspect a plugin + operationId: PluginInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Plugin" + text/plain: + schema: + $ref: "#/components/schemas/Plugin" + "404": + description: plugin is not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + tags: + - Plugin + description: Inspect a plugin. + /plugins/{name}: + delete: + summary: Remove a plugin + operationId: PluginDelete + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Plugin" + text/plain: + schema: + $ref: "#/components/schemas/Plugin" + "404": + description: plugin is not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + - name: force + in: query + description: | + Disable the plugin before removing. This may result in issues if the + plugin is in use by a container. + schema: + type: boolean + default: false + tags: + - Plugin + description: Remove a plugin. + /plugins/{name}/enable: + post: + summary: Enable a plugin + operationId: PluginEnable + responses: + "200": + description: no error + "404": + description: plugin is not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + - name: timeout + in: query + description: Set the HTTP client timeout (in seconds) + schema: + type: integer + default: 0 + tags: + - Plugin + description: Enable a plugin. + /plugins/{name}/disable: + post: + summary: Disable a plugin + operationId: PluginDisable + responses: + "200": + description: no error + "404": + description: plugin is not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + - name: force + in: query + description: | + Force disable a plugin even if still in use. + required: false + schema: + type: boolean + tags: + - Plugin + description: Disable a plugin. + /plugins/{name}/upgrade: + post: + summary: Upgrade a plugin + operationId: PluginUpgrade + responses: + "204": + description: no error + "404": + description: plugin not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + - name: remote + in: query + description: | + Remote reference to upgrade to. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true + schema: + type: string + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. + schema: + type: string + requestBody: + $ref: "#/components/requestBodies/PluginPrivilegeArray" + tags: + - Plugin + description: Upgrade a plugin. + /plugins/create: + post: + summary: Create a plugin + operationId: PluginCreate + responses: + "204": + description: no error + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: query + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + requestBody: + content: + application/x-tar: + schema: + type: string + format: binary + description: Path to tar containing plugin rootfs and manifest + tags: + - Plugin + description: Create a plugin. + /plugins/{name}/push: + post: + summary: Push a plugin + operationId: PluginPush + description: | + Push a plugin to the registry. + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + responses: + "200": + description: no error + "404": + description: plugin not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Plugin + /plugins/{name}/set: + post: + summary: Configure a plugin + operationId: PluginSet + parameters: + - name: name + in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + type: string + example: + - DEBUG=1 + responses: + "204": + description: No error + "404": + description: Plugin not installed + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Plugin + description: Configure a plugin. + /nodes: + get: + summary: List nodes + operationId: NodeList + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Node" + text/plain: + schema: + type: array + items: + $ref: "#/components/schemas/Node" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + Filters to process on the nodes list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `id=` + - `label=` + - `membership=`(`accepted`|`pending`)` + - `name=` + - `node.label=` + - `role=`(`manager`|`worker`)` + schema: + type: string + tags: + - Node + description: List nodes. + /nodes/{id}: + get: + summary: Inspect a node + operationId: NodeInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Node" + text/plain: + schema: + $ref: "#/components/schemas/Node" + "404": + description: no such node + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: The ID or name of the node + required: true + schema: + type: string + tags: + - Node + description: Inspect a node. + delete: + summary: Delete a node + operationId: NodeDelete + responses: + "200": + description: no error + "404": + description: no such node + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: The ID or name of the node + required: true + schema: + type: string + - name: force + in: query + description: Force remove a node from the swarm + schema: + type: boolean + default: false + tags: + - Node + description: Delete a node. + /nodes/{id}/update: + post: + summary: Update a node + operationId: NodeUpdate + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such node + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: The ID of the node + required: true + schema: + type: string + - name: version + in: query + description: | + The version number of the node object being updated. This is required + to avoid conflicting writes. + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/NodeSpec" + text/plain: + schema: + $ref: "#/components/schemas/NodeSpec" + tags: + - Node + description: Update a node. + /swarm: + get: + summary: Inspect swarm + operationId: SwarmInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Swarm" + text/plain: + schema: + $ref: "#/components/schemas/Swarm" + "404": + description: no such swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Swarm + description: Inspect swarm. + /swarm/init: + post: + summary: Initialize a new swarm + operationId: SwarmInit + responses: + "200": + description: no error + content: + application/json: + schema: + description: The node ID + type: string + example: 7v2t30z9blmxuhnyo6s4cpenp + text/plain: + schema: + description: The node ID + type: string + example: 7v2t30z9blmxuhnyo6s4cpenp + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is already part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + type: object + title: SwarmInitRequest + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication, as well + as determining the networking interface used for the VXLAN + Tunnel Endpoint (VTEP). This can either be an address/port + combination in the form `192.168.1.1:4567`, or an interface + followed by a port number, like `eth0:4567`. If the port number + is omitted, the default swarm listening port is used. + type: string + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: string + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + type: string + DataPathPort: + description: | + DataPathPort specifies the data path port number for data traffic. + Acceptable port range is 1024 to 49151. + if no port is set or is set to 0, default port 4789 will be used. + type: integer + format: uint32 + DefaultAddrPool: + description: | + Default Address Pool specifies default subnet pools for global + scope networks. + type: array + items: + type: string + example: + - 10.10.0.0/16 + - 20.20.0.0/16 + ForceNewCluster: + description: Force creation of a new swarm. + type: boolean + SubnetSize: + description: | + SubnetSize specifies the subnet size of the networks created + from the default subnet pool. + type: integer + format: uint32 + Spec: + $ref: "#/components/schemas/SwarmSpec" + example: + ListenAddr: 0.0.0.0:2377 + AdvertiseAddr: 192.168.1.1:2377 + DataPathPort: 4789 + DefaultAddrPool: + - 10.10.0.0/8 + - 20.20.0.0/8 + SubnetSize: 24 + ForceNewCluster: false + Spec: + Orchestration: {} + Raft: {} + Dispatcher: {} + CAConfig: {} + EncryptionConfig: + AutoLockManagers: false + text/plain: + schema: + type: object + title: SwarmInitRequest + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication, as well + as determining the networking interface used for the VXLAN + Tunnel Endpoint (VTEP). This can either be an address/port + combination in the form `192.168.1.1:4567`, or an interface + followed by a port number, like `eth0:4567`. If the port number + is omitted, the default swarm listening port is used. + type: string + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: string + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + type: string + DataPathPort: + description: | + DataPathPort specifies the data path port number for data traffic. + Acceptable port range is 1024 to 49151. + if no port is set or is set to 0, default port 4789 will be used. + type: integer + format: uint32 + DefaultAddrPool: + description: | + Default Address Pool specifies default subnet pools for global + scope networks. + type: array + items: + type: string + example: + - 10.10.0.0/16 + - 20.20.0.0/16 + ForceNewCluster: + description: Force creation of a new swarm. + type: boolean + SubnetSize: + description: | + SubnetSize specifies the subnet size of the networks created + from the default subnet pool. + type: integer + format: uint32 + Spec: + $ref: "#/components/schemas/SwarmSpec" + example: + ListenAddr: 0.0.0.0:2377 + AdvertiseAddr: 192.168.1.1:2377 + DataPathPort: 4789 + DefaultAddrPool: + - 10.10.0.0/8 + - 20.20.0.0/8 + SubnetSize: 24 + ForceNewCluster: false + Spec: + Orchestration: {} + Raft: {} + Dispatcher: {} + CAConfig: {} + EncryptionConfig: + AutoLockManagers: false + required: true + tags: + - Swarm + description: Initialize a new swarm. + /swarm/join: + post: + summary: Join an existing swarm + operationId: SwarmJoin + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is already part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + type: object + title: SwarmJoinRequest + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication if the node + gets promoted to manager, as well as determining the networking + interface used for the VXLAN Tunnel Endpoint (VTEP). This is + required for joining a swarm. If the port number is omitted, + the default swarm listening port is used. + type: string + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: string + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + type: string + RemoteAddrs: + description: | + Addresses of manager nodes already participating in the swarm. + type: array + items: + type: string + JoinToken: + description: Secret token for joining this swarm. + type: string + required: + - ListenAddr + - RemoteAddrs + - JoinToken + example: + ListenAddr: 0.0.0.0:2377 + AdvertiseAddr: 192.168.1.1:2377 + DataPathAddr: 192.168.1.1 + RemoteAddrs: + - node1:2377 + JoinToken: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 + text/plain: + schema: + type: object + title: SwarmJoinRequest + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication if the node + gets promoted to manager, as well as determining the networking + interface used for the VXLAN Tunnel Endpoint (VTEP). This is + required for joining a swarm. If the port number is omitted, + the default swarm listening port is used. + type: string + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: string + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + type: string + RemoteAddrs: + description: | + Addresses of manager nodes already participating in the swarm. + type: array + items: + type: string + JoinToken: + description: Secret token for joining this swarm. + type: string + required: + - ListenAddr + - RemoteAddrs + - JoinToken + example: + ListenAddr: 0.0.0.0:2377 + AdvertiseAddr: 192.168.1.1:2377 + DataPathAddr: 192.168.1.1 + RemoteAddrs: + - node1:2377 + JoinToken: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 + required: true + tags: + - Swarm + description: Join an existing swarm. + /swarm/leave: + post: + summary: Leave a swarm + operationId: SwarmLeave + responses: + "200": + description: no error + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: force + description: | + Force leave swarm, even if this is the last manager or that it will + break the cluster. + in: query + schema: + type: boolean + default: false + tags: + - Swarm + description: Leave a swarm. + /swarm/update: + post: + summary: Update a swarm + operationId: SwarmUpdate + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: version + in: query + description: | + The version number of the swarm object being updated. This is + required to avoid conflicting writes. + required: true + schema: + type: integer + format: int64 + - name: rotateWorkerToken + in: query + description: Rotate the worker join token. + schema: + type: boolean + default: false + - name: rotateManagerToken + in: query + description: Rotate the manager join token. + schema: + type: boolean + default: false + - name: rotateManagerUnlockKey + in: query + description: Rotate the manager unlock key. + schema: + type: boolean + default: false + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/SwarmSpec" + text/plain: + schema: + $ref: "#/components/schemas/SwarmSpec" + required: true + tags: + - Swarm + description: Update a swarm. + /swarm/unlockkey: + get: + summary: Get the unlock key + operationId: SwarmUnlockkey + responses: + "200": + description: no error + content: + application/json: + schema: + type: object + title: UnlockKeyResponse + properties: + UnlockKey: + description: The swarm's unlock key. + type: string + example: + UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 + text/plain: + schema: + type: object + title: UnlockKeyResponse + properties: + UnlockKey: + description: The swarm's unlock key. + type: string + example: + UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Swarm + description: Get the unlock key. + /swarm/unlock: + post: + summary: Unlock a locked manager + operationId: SwarmUnlock + requestBody: + content: + application/json: + schema: + type: object + title: SwarmUnlockRequest + properties: + UnlockKey: + description: The swarm's unlock key. + type: string + example: + UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 + required: true + responses: + "200": + description: no error + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Swarm + description: Unlock a locked manager. + /services: + get: + summary: List services + operationId: ServiceList + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Service" + text/plain: + schema: + type: array + items: + $ref: "#/components/schemas/Service" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the services list. + + Available filters: + + - `id=` + - `label=` + - `mode=["replicated"|"global"]` + - `name=` + schema: + type: string + - name: status + in: query + description: | + Include service status, with count of running and desired tasks. + schema: + type: boolean + tags: + - Service + description: List services. + /services/create: + post: + summary: Create a service + operationId: ServiceCreate + responses: + "201": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/ServiceCreateResponse" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "403": + description: network is not eligible for services + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "409": + description: name conflicts with an existing service + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. + schema: + type: string + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/ServiceSpec" + - type: object + example: + Name: web + TaskTemplate: + ContainerSpec: + Image: nginx:alpine + Mounts: + - ReadOnly: true + Source: web-data + Target: /usr/share/nginx/html + Type: volume + VolumeOptions: + DriverConfig: {} + Labels: + com.example.something: something-value + Hosts: + - 10.10.10.10 host1 + - ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2 + User: "33" + DNSConfig: + Nameservers: + - 8.8.8.8 + Search: + - example.org + Options: + - timeout:3 + Secrets: + - File: + Name: www.example.org.key + UID: "33" + GID: "33" + Mode: 384 + SecretID: fpjqlhnwb19zds35k8wn80lq9 + SecretName: example_org_domain_key + OomScoreAdj: 0 + LogDriver: + Name: json-file + Options: + max-file: "3" + max-size: 10M + Placement: {} + Resources: + Limits: + MemoryBytes: 104857600 + Reservations: {} + RestartPolicy: + Condition: on-failure + Delay: 10000000000 + MaxAttempts: 10 + Mode: + Replicated: + Replicas: 4 + UpdateConfig: + Parallelism: 2 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Ports: + - Protocol: tcp + PublishedPort: 8080 + TargetPort: 80 + Labels: + foo: bar + required: true + tags: + - Service + description: Create a service. + /services/{id}: + get: + summary: Inspect a service + operationId: ServiceInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Service" + text/plain: + schema: + $ref: "#/components/schemas/Service" + "404": + description: no such service + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: ID or name of service. + required: true + schema: + type: string + - name: insertDefaults + in: query + description: Fill empty fields with default values. + schema: + type: boolean + default: false + tags: + - Service + description: Inspect a service. + delete: + summary: Delete a service + operationId: ServiceDelete + responses: + "200": + description: no error + "404": + description: no such service + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: ID or name of service. + required: true + schema: + type: string + tags: + - Service + description: Delete a service. + /services/{id}/update: + post: + summary: Update a service + operationId: ServiceUpdate + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/ServiceUpdateResponse" + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such service + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: ID or name of service. + required: true + schema: + type: string + - name: version + in: query + description: | + The version number of the service object being updated. This is + required to avoid conflicting writes. + This version number should be the value as currently set on the + service *before* the update. You can find the current version by + calling `GET /services/{id}` + required: true + schema: + type: integer + - name: registryAuthFrom + in: query + description: | + If the `X-Registry-Auth` header is not specified, this parameter + indicates where to find registry authorization credentials. + schema: + type: string + enum: + - spec + - previous-spec + default: spec + - name: rollback + in: query + description: | + Set to this parameter to `previous` to cause a server-side rollback + to the previous service spec. The supplied spec will be ignored in + this case. + schema: + type: string + - name: X-Registry-Auth + in: header + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. + schema: + type: string + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/ServiceSpec" + - type: object + example: + Name: top + TaskTemplate: + ContainerSpec: + Image: busybox + Args: + - top + OomScoreAdj: 0 + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: any + MaxAttempts: 0 + Placement: {} + ForceUpdate: 0 + Mode: + Replicated: + Replicas: 1 + UpdateConfig: + Parallelism: 2 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Mode: vip + required: true + tags: + - Service + description: Update a service. + /services/{id}/logs: + get: + summary: Get service logs + description: | + Get `stdout` and `stderr` logs from a service. See also + [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. + operationId: ServiceLogs + responses: + "200": + description: logs returned as a stream in response body + content: + application/vnd.docker.raw-stream: + schema: + type: string + format: binary + application/vnd.docker.multiplexed-stream: + schema: + type: string + format: binary + "404": + description: no such service + content: + application/vnd.docker.raw-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/vnd.docker.multiplexed-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such service: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID or name of the service + schema: + type: string + - name: details + in: query + description: Show service context and extra details provided to logs. + schema: + type: boolean + default: false + - name: follow + in: query + description: Keep connection after returning logs. + schema: + type: boolean + default: false + - name: stdout + in: query + description: Return logs from `stdout` + schema: + type: boolean + default: false + - name: stderr + in: query + description: Return logs from `stderr` + schema: + type: boolean + default: false + - name: since + in: query + description: Only return logs since this time, as a UNIX timestamp + schema: + type: integer + default: 0 + - name: timestamps + in: query + description: Add timestamps to every log line + schema: + type: boolean + default: false + - name: tail + in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + schema: + type: string + default: all + tags: + - Service + /tasks: + get: + summary: List tasks + operationId: TaskList + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Task" + example: + - ID: 0kzzo1i0y4jz6027t0k7aezc7 + Version: + Index: 71 + CreatedAt: 2016-06-07T21:07:31.171892745Z + UpdatedAt: 2016-06-07T21:07:31.376370513Z + Spec: + ContainerSpec: + Image: redis + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: any + MaxAttempts: 0 + Placement: {} + ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz + Slot: 1 + NodeID: 60gvrl6tm78dmak4yl7srz94v + Status: + Timestamp: 2016-06-07T21:07:31.290032978Z + State: running + Message: started + ContainerStatus: + ContainerID: e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035 + PID: 677 + DesiredState: running + NetworksAttachments: + - Network: + ID: 4qvuz4ko70xaltuqbt8956gd1 + Version: + Index: 18 + CreatedAt: 2016-06-07T20:31:11.912919752Z + UpdatedAt: 2016-06-07T21:07:29.955277358Z + Spec: + Name: ingress + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + DriverState: + Name: overlay + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: default + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + Addresses: + - 10.255.0.10/16 + - ID: 1yljwbmlr8er2waf8orvqpwms + Version: + Index: 30 + CreatedAt: 2016-06-07T21:07:30.019104782Z + UpdatedAt: 2016-06-07T21:07:30.231958098Z + Name: hopeful_cori + Spec: + ContainerSpec: + Image: redis + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: any + MaxAttempts: 0 + Placement: {} + ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz + Slot: 1 + NodeID: 60gvrl6tm78dmak4yl7srz94v + Status: + Timestamp: 2016-06-07T21:07:30.202183143Z + State: shutdown + Message: shutdown + ContainerStatus: + ContainerID: 1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213 + DesiredState: shutdown + NetworksAttachments: + - Network: + ID: 4qvuz4ko70xaltuqbt8956gd1 + Version: + Index: 18 + CreatedAt: 2016-06-07T20:31:11.912919752Z + UpdatedAt: 2016-06-07T21:07:29.955277358Z + Spec: + Name: ingress + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + DriverState: + Name: overlay + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: default + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + Addresses: + - 10.255.0.5/16 + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the tasks list. + + Available filters: + + - `desired-state=(running | shutdown | accepted)` + - `id=` + - `label=key` or `label="key=value"` + - `name=` + - `node=` + - `service=` + schema: + type: string + tags: + - Task + description: List tasks. + /tasks/{id}: + get: + summary: Inspect a task + operationId: TaskInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Task" + "404": + description: no such task + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: ID of the task + required: true + schema: + type: string + tags: + - Task + description: Inspect a task. + /tasks/{id}/logs: + get: + summary: Get task logs + description: | + Get `stdout` and `stderr` logs from a task. + See also [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. + operationId: TaskLogs + responses: + "200": + description: logs returned as a stream in response body + content: + application/vnd.docker.raw-stream: + schema: + type: string + format: binary + application/vnd.docker.multiplexed-stream: + schema: + type: string + format: binary + "404": + description: no such task + content: + application/vnd.docker.raw-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/vnd.docker.multiplexed-stream: + schema: + $ref: "#/components/schemas/ErrorResponse" + application/json: + examples: + response: + value: + message: "No such task: c2ada9df5af8" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID of the task + schema: + type: string + - name: details + in: query + description: Show task context and extra details provided to logs. + schema: + type: boolean + default: false + - name: follow + in: query + description: Keep connection after returning logs. + schema: + type: boolean + default: false + - name: stdout + in: query + description: Return logs from `stdout` + schema: + type: boolean + default: false + - name: stderr + in: query + description: Return logs from `stderr` + schema: + type: boolean + default: false + - name: since + in: query + description: Only return logs since this time, as a UNIX timestamp + schema: + type: integer + default: 0 + - name: timestamps + in: query + description: Add timestamps to every log line + schema: + type: boolean + default: false + - name: tail + in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + schema: + type: string + default: all + tags: + - Task + /secrets: + get: + summary: List secrets + operationId: SecretList + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Secret" + example: + - ID: blt1owaxmitz71s9v5zh81zun + Version: + Index: 85 + CreatedAt: 2017-07-20T13:55:28.678958722Z + UpdatedAt: 2017-07-20T13:55:28.678958722Z + Spec: + Name: mysql-passwd + Labels: + some.label: some.value + Driver: + Name: secret-bucket + Options: + OptionA: value for driver option A + OptionB: value for driver option B + - ID: ktnbjxoalbkvbvedmg1urrz8h + Version: + Index: 11 + CreatedAt: 2016-11-05T01:20:17.327670065Z + UpdatedAt: 2016-11-05T01:20:17.327670065Z + Spec: + Name: app-dev.crt + Labels: + foo: bar + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the secrets list. + + Available filters: + + - `id=` + - `label= or label==value` + - `name=` matches all or part of a secret name (prefix match) + - `names=` matches a secret name (exact match) + schema: + type: string + tags: + - Secret + description: List secrets. + /secrets/create: + post: + summary: Create a secret + operationId: SecretCreate + responses: + "201": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/IDResponse" + "409": + description: name conflicts with an existing object + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/SecretSpec" + - type: object + example: + Name: app-key.crt + Labels: + foo: bar + Data: VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg== + Driver: + Name: secret-bucket + Options: + OptionA: value for driver option A + OptionB: value for driver option B + tags: + - Secret + description: Create a secret. + /secrets/{id}: + get: + summary: Inspect a secret + operationId: SecretInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Secret" + examples: + response: + value: + ID: ktnbjxoalbkvbvedmg1urrz8h + Version: + Index: 11 + CreatedAt: 2016-11-05T01:20:17.327670065Z + UpdatedAt: 2016-11-05T01:20:17.327670065Z + Spec: + Name: app-dev.crt + Labels: + foo: bar + Driver: + Name: secret-bucket + Options: + OptionA: value for driver option A + OptionB: value for driver option B + "404": + description: secret not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID of the secret + schema: + type: string + tags: + - Secret + description: Inspect a secret. + delete: + summary: Delete a secret + operationId: SecretDelete + responses: + "204": + description: no error + "404": + description: secret not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID of the secret + schema: + type: string + tags: + - Secret + description: Delete a secret. + /secrets/{id}/update: + post: + summary: Update a Secret + operationId: SecretUpdate + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such secret + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: The ID or name of the secret + required: true + schema: + type: string + - name: version + in: query + description: | + The version number of the secret object being updated. This is + required to avoid conflicting writes. + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/SecretSpec" + text/plain: + schema: + $ref: "#/components/schemas/SecretSpec" + description: | + The spec of the secret to update. Currently, only the Labels field + can be updated. All other fields must remain unchanged from the + [SecretInspect endpoint](#operation/SecretInspect) response values. + tags: + - Secret + description: Update a Secret. + /configs: + get: + summary: List configs + operationId: ConfigList + responses: + "200": + description: no error + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/Config" + example: + - ID: ktnbjxoalbkvbvedmg1urrz8h + Version: + Index: 11 + CreatedAt: 2016-11-05T01:20:17.327670065Z + UpdatedAt: 2016-11-05T01:20:17.327670065Z + Spec: + Name: server.conf + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: filters + in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the configs list. + + Available filters: + + - `id=` + - `label= or label==value` + - `name=` matches all or part of a config name (prefix match) + schema: + type: string + tags: + - Config + description: List configs. + /configs/create: + post: + summary: Create a config + operationId: ConfigCreate + responses: + "201": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/IDResponse" + "409": + description: name conflicts with an existing object + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + requestBody: + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/ConfigSpec" + - type: object + example: + Name: server.conf + Labels: + foo: bar + Data: VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg== + tags: + - Config + description: Create a config. + /configs/{id}: + get: + summary: Inspect a config + operationId: ConfigInspect + responses: + "200": + description: no error + content: + application/json: + schema: + $ref: "#/components/schemas/Config" + examples: + response: + value: + ID: ktnbjxoalbkvbvedmg1urrz8h + Version: + Index: 11 + CreatedAt: 2016-11-05T01:20:17.327670065Z + UpdatedAt: 2016-11-05T01:20:17.327670065Z + Spec: + Name: app-dev.crt + "404": + description: config not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID of the config + schema: + type: string + tags: + - Config + description: Inspect a config. + delete: + summary: Delete a config + operationId: ConfigDelete + responses: + "204": + description: no error + "404": + description: config not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + required: true + description: ID of the config + schema: + type: string + tags: + - Config + description: Delete a config. + /configs/{id}/update: + post: + summary: Update a Config + operationId: ConfigUpdate + responses: + "200": + description: no error + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "404": + description: no such config + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "503": + description: node is not part of a swarm + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: id + in: path + description: The ID or name of the config + required: true + schema: + type: string + - name: version + in: query + description: | + The version number of the config object being updated. This is + required to avoid conflicting writes. + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ConfigSpec" + text/plain: + schema: + $ref: "#/components/schemas/ConfigSpec" + description: | + The spec of the config to update. Currently, only the Labels field + can be updated. All other fields must remain unchanged from the + [ConfigInspect endpoint](#operation/ConfigInspect) response values. + tags: + - Config + description: Update a Config. + /distribution/{name}/json: + get: + summary: Get image information from the registry + description: | + Return image digest and platform information by contacting the registry. + operationId: DistributionInspect + responses: + "200": + description: descriptor and platform information + content: + application/json: + schema: + $ref: "#/components/schemas/DistributionInspect" + "401": + description: Failed authentication or no image found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + response: + value: + message: "No such image: someimage (tag: latest)" + "500": + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + parameters: + - name: name + in: path + description: Image name or id + required: true + schema: + type: string + tags: + - Distribution + /session: + post: + summary: Initialize interactive session + description: | + Start a new interactive session with a server. Session allows server to + call back to the client for advanced capabilities. + + > **Deprecated**: This endpoint is deprecated and will be removed in a future version. + > Server should support gRPC directly on the listening socket. + + ### Hijacking + + This endpoint hijacks the HTTP connection to HTTP2 transport that allows + the client to expose gPRC services on that connection. + + For example, the client sends this request to upgrade the connection: + + ``` + POST /session HTTP/1.1 + Upgrade: h2c + Connection: Upgrade + ``` + + The Docker daemon responds with a `101 UPGRADED` response follow with + the raw stream: + + ``` + HTTP/1.1 101 UPGRADED + Connection: Upgrade + Upgrade: h2c + ``` + operationId: Session + responses: + "101": + description: no error, hijacking successful + "400": + description: bad parameter + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + "500": + description: server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + tags: + - Session +servers: + - url: /v1.56 +components: + requestBodies: + PluginPrivilegeArray: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/PluginPrivilege" + example: + - Name: network + Description: "" + Value: + - host + - Name: mount + Description: "" + Value: + - /data + - Name: device + Description: "" + Value: + - /dev/cpu_dma_latency + text/plain: + schema: + type: array + items: + $ref: "#/components/schemas/PluginPrivilege" + example: + - Name: network + Description: "" + Value: + - host + - Name: mount + Description: "" + Value: + - /data + - Name: device + Description: "" + Value: + - /dev/cpu_dma_latency + schemas: + ImageHistoryResponseItem: + type: object + x-go-name: HistoryResponseItem + title: HistoryResponseItem + description: individual image layer information in response to ImageHistory operation + required: + - Id + - Created + - CreatedBy + - Tags + - Size + - Comment + properties: + Id: + type: string + Created: + type: integer + format: int64 + CreatedBy: + type: string + Tags: + type: array + items: + type: string + Size: + type: integer + format: int64 + Comment: + type: string + PortSummary: + type: object + description: | + Describes a port-mapping between the container and the host. + required: + - PrivatePort + - Type + properties: + IP: + type: string + format: ip-address + description: Host IP address that the container's port is mapped to + x-go-type: + type: Addr + import: + package: net/netip + PrivatePort: + type: integer + format: uint16 + description: Port on the container + PublicPort: + type: integer + format: uint16 + description: Port exposed on the host + Type: + type: string + enum: + - tcp + - udp + - sctp + example: + PrivatePort: 8080 + PublicPort: 80 + Type: tcp + MountType: + description: |- + The mount type. Available types: + + - `bind` a mount of a file or directory from the host into the container. + - `cluster` a Swarm cluster volume. + - `image` an OCI image. + - `npipe` a named pipe from the host into the container. + - `tmpfs` a `tmpfs`. + - `volume` a docker volume with the given `Name`. + type: string + enum: + - bind + - cluster + - image + - npipe + - tmpfs + - volume + example: volume + MountPoint: + type: object + description: | + MountPoint represents a mount point configuration inside the container. + This is used for reporting the mountpoints in use by a container. + properties: + Type: + description: | + The mount type: + + - `bind` a mount of a file or directory from the host into the container. + - `cluster` a Swarm cluster volume. + - `image` an OCI image. + - `npipe` a named pipe from the host into the container. + - `tmpfs` a `tmpfs`. + - `volume` a docker volume with the given `Name`. + allOf: + - $ref: "#/components/schemas/MountType" + example: volume + Name: + description: | + Name is the name reference to the underlying data defined by `Source` + e.g., the volume name. + type: string + example: myvolume + Source: + description: | + Source location of the mount. + + For volumes, this contains the storage location of the volume (within + `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains + the source (host) part of the bind-mount. For `tmpfs` mount points, this + field is empty. + type: string + example: /var/lib/docker/volumes/myvolume/_data + Destination: + description: | + Destination is the path relative to the container root (`/`) where + the `Source` is mounted inside the container. + type: string + example: /usr/share/nginx/html/ + Driver: + description: | + Driver is the volume driver used to create the volume (if it is a volume). + type: string + example: local + Mode: + description: | + Mode is a comma separated list of options supplied by the user when + creating the bind/volume mount. + + The default is platform-specific (`"z"` on Linux, empty on Windows). + type: string + example: z + RW: + description: | + Whether the mount is mounted writable (read-write). + type: boolean + example: true + Propagation: + description: | + Propagation describes how mounts are propagated from the host into the + mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) + for details. This field is not used on Windows. + type: string + example: "" + DeviceMapping: + type: object + description: A device mapping between the host and container + properties: + PathOnHost: + type: string + PathInContainer: + type: string + CgroupPermissions: + type: string + example: + PathOnHost: /dev/deviceName + PathInContainer: /dev/deviceName + CgroupPermissions: mrw + DeviceRequest: + type: object + description: A request for devices to be sent to device drivers + properties: + Driver: + description: | + The name of the device driver to use for this request. + + Note that if this is specified the capabilities are ignored when + selecting a device driver. + type: string + example: nvidia + Count: + type: integer + example: -1 + DeviceIDs: + type: array + items: + type: string + example: + - "0" + - "1" + - GPU-fef8089b-4820-abfc-e83e-94318197576e + Capabilities: + description: | + A list of capabilities; an OR list of AND lists of capabilities. + + Note that if a driver is specified the capabilities have no effect on + selecting a driver as the driver name is used directly. + + Note that if no driver is specified the capabilities are used to + select a driver with the required capabilities. + type: array + items: + type: array + items: + type: string + example: + - - gpu + - nvidia + - compute + Options: + description: | + Driver-specific options, specified as a key/value pairs. These options + are passed directly to the driver. + type: object + additionalProperties: + type: string + ThrottleDevice: + type: object + properties: + Path: + description: Device path + type: string + Rate: + description: Rate + type: integer + format: int64 + minimum: 0 + Mount: + type: object + properties: + Target: + description: Container path. + type: string + Source: + description: |- + Mount source (e.g. a volume name, a host path). The source cannot be + specified when using `Type=tmpfs`. For `Type=bind`, the source path + must either exist, or the `CreateMountpoint` must be set to `true` to + create the source path on the host if missing. + + For `Type=npipe`, the pipe must exist prior to creating the container. + type: string + Type: + description: | + The mount type. Available types: + + - `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container. + - `cluster` a Swarm cluster volume + - `image` Mounts an image. + - `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container. + - `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs. + - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. + allOf: + - $ref: "#/components/schemas/MountType" + ReadOnly: + description: Whether the mount should be read-only. + type: boolean + Consistency: + description: "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." + type: string + BindOptions: + description: Optional configuration for the `bind` type. + type: object + properties: + Propagation: + description: A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`. + type: string + enum: + - private + - rprivate + - shared + - rshared + - slave + - rslave + NonRecursive: + description: Disable recursive bind mount. + type: boolean + default: false + CreateMountpoint: + description: Create mount point on host if missing + type: boolean + default: false + ReadOnlyNonRecursive: + description: | + Make the mount non-recursively read-only, but still leave the mount recursive + (unless NonRecursive is set to `true` in conjunction). + + Added in v1.44, before that version all read-only mounts were + non-recursive by default. To match the previous behaviour this + will default to `true` for clients on versions prior to v1.44. + type: boolean + default: false + ReadOnlyForceRecursive: + description: Raise an error if the mount cannot be made recursively read-only. + type: boolean + default: false + VolumeOptions: + description: Optional configuration for the `volume` type. + type: object + properties: + NoCopy: + description: Populate volume with data from the target. + type: boolean + default: false + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + DriverConfig: + description: Map of driver specific options + type: object + properties: + Name: + description: Name of the driver to use to create the volume. + type: string + Options: + description: key/value map of driver specific options. + type: object + additionalProperties: + type: string + Subpath: + description: Source path inside the volume. Must be relative without any back traversals. + type: string + example: dir-inside-volume/subdirectory + ImageOptions: + description: Optional configuration for the `image` type. + type: object + properties: + Subpath: + description: Source path inside the image. Must be relative without any back traversals. + type: string + example: dir-inside-image/subdirectory + TmpfsOptions: + description: Optional configuration for the `tmpfs` type. + type: object + properties: + SizeBytes: + description: The size for the tmpfs mount in bytes. + type: integer + format: int64 + Mode: + description: | + The permission mode for the tmpfs mount in an integer. + The value must not be in octal format (e.g. 755) but rather + the decimal representation of the octal value (e.g. 493). + type: integer + Options: + description: | + The options to be passed to the tmpfs mount. An array of arrays. + Flag options should be provided as 1-length arrays. Other types + should be provided as as 2-length arrays, where the first item is + the key and the second the value. + type: array + items: + type: array + minItems: 1 + maxItems: 2 + items: + type: string + example: + - - noexec + RestartPolicy: + description: | + The behavior to apply when the container exits. The default is not to + restart. + + An ever increasing delay (double the previous delay, starting at 100ms) is + added before each restart to prevent flooding the server. + type: object + properties: + Name: + type: string + description: | + - Empty string means not to restart + - `no` Do not automatically restart + - `always` Always restart + - `unless-stopped` Restart always except when the user has manually stopped the container + - `on-failure` Restart only when the container exit code is non-zero + enum: + - "" + - no + - always + - unless-stopped + - on-failure + MaximumRetryCount: + type: integer + description: | + If `on-failure` is used, the number of times to retry before giving up. + Resources: + description: A container's resources (cgroups config, ulimits, etc) + type: object + properties: + CpuShares: + description: | + An integer value representing this container's relative CPU weight + versus other containers. + type: integer + Memory: + description: Memory limit in bytes. + type: integer + format: int64 + default: 0 + CgroupParent: + description: | + Path to `cgroups` under which the container's `cgroup` is created. If + the path is not absolute, the path is considered to be relative to the + `cgroups` path of the init process. Cgroups are created if they do not + already exist. + type: string + BlkioWeight: + description: Block IO weight (relative weight). + type: integer + minimum: 0 + maximum: 1000 + BlkioWeightDevice: + description: | + Block IO weight (relative device weight) in the form: + + ``` + [{"Path": "device_path", "Weight": weight}] + ``` + type: array + items: + type: object + properties: + Path: + type: string + Weight: + type: integer + minimum: 0 + BlkioDeviceReadBps: + description: | + Limit read rate (bytes per second) from a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: array + items: + $ref: "#/components/schemas/ThrottleDevice" + BlkioDeviceWriteBps: + description: | + Limit write rate (bytes per second) to a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: array + items: + $ref: "#/components/schemas/ThrottleDevice" + BlkioDeviceReadIOps: + description: | + Limit read rate (IO per second) from a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: array + items: + $ref: "#/components/schemas/ThrottleDevice" + BlkioDeviceWriteIOps: + description: | + Limit write rate (IO per second) to a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: array + items: + $ref: "#/components/schemas/ThrottleDevice" + CpuPeriod: + description: The length of a CPU period in microseconds. + type: integer + format: int64 + CpuQuota: + description: | + Microseconds of CPU time that the container can get in a CPU period. + type: integer + format: int64 + CpuRealtimePeriod: + description: | + The length of a CPU real-time period in microseconds. Set to 0 to + allocate no time allocated to real-time tasks. + type: integer + format: int64 + CpuRealtimeRuntime: + description: | + The length of a CPU real-time runtime in microseconds. Set to 0 to + allocate no time allocated to real-time tasks. + type: integer + format: int64 + CpusetCpus: + description: | + CPUs in which to allow execution (e.g., `0-3`, `0,1`). + type: string + example: 0-3 + CpusetMems: + description: | + Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + effective on NUMA systems. + type: string + Devices: + description: A list of devices to add to the container. + type: array + items: + $ref: "#/components/schemas/DeviceMapping" + DeviceCgroupRules: + description: a list of cgroup rules to apply to the container + type: array + items: + type: string + example: c 13:* rwm + DeviceRequests: + description: | + A list of requests for devices to be sent to device drivers. + type: array + items: + $ref: "#/components/schemas/DeviceRequest" + MemoryReservation: + description: Memory soft limit in bytes. + type: integer + format: int64 + MemorySwap: + description: | + Total memory limit (memory + swap). Set as `-1` to enable unlimited + swap. + type: integer + format: int64 + MemorySwappiness: + description: | + Tune a container's memory swappiness behavior. Accepts an integer + between 0 and 100. + type: integer + format: int64 + minimum: 0 + maximum: 100 + NanoCpus: + description: CPU quota in units of 10-9 CPUs. + type: integer + format: int64 + OomKillDisable: + description: Disable OOM Killer for the container. + type: boolean + Init: + description: | + Run an init inside the container that forwards signals and reaps + processes. This field is omitted if empty, and the default (as + configured on the daemon) is used. + type: + - boolean + - "null" + PidsLimit: + description: | + Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + to not change. + type: + - integer + - "null" + format: int64 + Ulimits: + description: | + A list of resource limits to set in the container. For example: + + ``` + {"Name": "nofile", "Soft": 1024, "Hard": 2048} + ``` + type: array + items: + type: object + properties: + Name: + description: Name of ulimit + type: string + Soft: + description: Soft limit + type: integer + Hard: + description: Hard limit + type: integer + CpuCount: + description: | + The number of usable CPUs (Windows only). + + On Windows Server containers, the processor resource controls are + mutually exclusive. The order of precedence is `CPUCount` first, then + `CPUShares`, and `CPUPercent` last. + type: integer + format: int64 + CpuPercent: + description: | + The usable percentage of the available CPUs (Windows only). + + On Windows Server containers, the processor resource controls are + mutually exclusive. The order of precedence is `CPUCount` first, then + `CPUShares`, and `CPUPercent` last. + type: integer + format: int64 + IOMaximumIOps: + description: Maximum IOps for the container system drive (Windows only) + type: integer + format: int64 + IOMaximumBandwidth: + description: | + Maximum IO in bytes per second for the container system drive + (Windows only). + type: integer + format: int64 + Limit: + description: | + An object describing a limit on resources which can be requested by a task. + type: object + properties: + NanoCPUs: + type: integer + format: int64 + example: 4000000000 + MemoryBytes: + type: integer + format: int64 + example: 8272408576 + Pids: + description: | + Limits the maximum number of PIDs in the container. Set `0` for unlimited. + type: integer + format: int64 + default: 0 + example: 100 + ResourceObject: + description: | + An object describing the resources which can be advertised by a node and + requested by a task. + type: object + properties: + NanoCPUs: + type: integer + format: int64 + example: 4000000000 + MemoryBytes: + type: integer + format: int64 + example: 8272408576 + GenericResources: + $ref: "#/components/schemas/GenericResources" + GenericResources: + description: | + User-defined resources can be either Integer resources (e.g, `SSD=3`) or + String resources (e.g, `GPU=UUID1`). + type: array + items: + type: object + properties: + NamedResourceSpec: + type: object + properties: + Kind: + type: string + Value: + type: string + DiscreteResourceSpec: + type: object + properties: + Kind: + type: string + Value: + type: integer + format: int64 + example: + - DiscreteResourceSpec: + Kind: SSD + Value: 3 + - NamedResourceSpec: + Kind: GPU + Value: UUID1 + - NamedResourceSpec: + Kind: GPU + Value: UUID2 + HealthConfig: + description: | + A test to perform to check that the container is healthy. + Healthcheck commands should be side-effect free. + type: object + properties: + Test: + description: | + The test to perform. Possible values are: + + - `[]` inherit healthcheck from image or parent image + - `["NONE"]` disable healthcheck + - `["CMD", args...]` exec arguments directly + - `["CMD-SHELL", command]` run command with system's default shell + + A non-zero exit code indicates a failed healthcheck: + - `0` healthy + - `1` unhealthy + - `2` reserved (treated as unhealthy) + - other values: error running probe + type: array + items: + type: string + Interval: + description: | + The time to wait between checks in nanoseconds. It should be 0 or at + least 1000000 (1 ms). 0 means inherit. + type: integer + format: int64 + Timeout: + description: | + The time to wait before considering the check to have hung. It should + be 0 or at least 1000000 (1 ms). 0 means inherit. + + If the health check command does not complete within this timeout, + the check is considered failed and the health check process is + forcibly terminated without a graceful shutdown. + type: integer + format: int64 + Retries: + description: | + The number of consecutive failures needed to consider a container as + unhealthy. 0 means inherit. + type: integer + StartPeriod: + description: | + Start period for the container to initialize before starting + health-retries countdown in nanoseconds. It should be 0 or at least + 1000000 (1 ms). 0 means inherit. + type: integer + format: int64 + StartInterval: + description: | + The time to wait between checks in nanoseconds during the start period. + It should be 0 or at least 1000000 (1 ms). 0 means inherit. + type: integer + format: int64 + Health: + description: | + Health stores information about the container's healthcheck results. + type: + - object + - "null" + properties: + Status: + description: | + Status is one of `none`, `starting`, `healthy` or `unhealthy` + + - "none" Indicates there is no healthcheck + - "starting" Starting indicates that the container is not yet ready + - "healthy" Healthy indicates that the container is running correctly + - "unhealthy" Unhealthy indicates that the container has a problem + type: string + enum: + - none + - starting + - healthy + - unhealthy + example: healthy + FailingStreak: + description: FailingStreak is the number of consecutive failures + type: integer + example: 0 + Log: + type: array + description: | + Log contains the last few results (oldest first) + items: + $ref: "#/components/schemas/HealthcheckResult" + HealthcheckResult: + description: | + HealthcheckResult stores information about a single run of a healthcheck probe + type: + - object + - "null" + properties: + Start: + description: | + Date and time at which this check started in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: date-time + example: 2020-01-04T10:44:24.496525531Z + End: + description: | + Date and time at which this check ended in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2020-01-04T10:45:21.364524523Z + ExitCode: + description: | + ExitCode meanings: + + - `0` healthy + - `1` unhealthy + - `2` reserved (considered unhealthy) + - other values: error running probe + type: integer + example: 0 + Output: + description: Output from last check + type: string + HostConfig: + description: Container configuration that depends on the host we are running on + allOf: + - $ref: "#/components/schemas/Resources" + - type: object + properties: + Binds: + type: array + description: | + A list of volume bindings for this container. Each volume binding + is a string in one of these forms: + + - `host-src:container-dest[:options]` to bind-mount a host path + into the container. Both `host-src`, and `container-dest` must + be an _absolute_ path. + - `volume-name:container-dest[:options]` to bind-mount a volume + managed by a volume driver into the container. `container-dest` + must be an _absolute_ path. + + `options` is an optional, comma-delimited list of: + + - `nocopy` disables automatic copying of data from the container + path to the volume. The `nocopy` flag only applies to named volumes. + - `[ro|rw]` mounts a volume read-only or read-write, respectively. + If omitted or set to `rw`, volumes are mounted read-write. + - `[z|Z]` applies SELinux labels to allow or deny multiple containers + to read and write to the same volume. + - `z`: a _shared_ content label is applied to the content. This + label indicates that multiple containers can share the volume + content, for both reading and writing. + - `Z`: a _private unshared_ label is applied to the content. + This label indicates that only the current container can use + a private volume. Labeling systems such as SELinux require + proper labels to be placed on volume content that is mounted + into a container. Without a label, the security system can + prevent a container's processes from using the content. By + default, the labels set by the host operating system are not + modified. + - `[[r]shared|[r]slave|[r]private]` specifies mount + [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). + This only applies to bind-mounted volumes, not internal volumes + or named volumes. Mount propagation requires the source mount + point (the location where the source directory is mounted in the + host operating system) to have the correct propagation properties. + For shared volumes, the source mount point must be set to `shared`. + For slave volumes, the mount must be set to either `shared` or + `slave`. + items: + type: string + ContainerIDFile: + type: string + description: Path to a file where the container ID is written + example: "" + LogConfig: + type: object + description: The logging configuration for this container + properties: + Type: + description: |- + Name of the logging driver used for the container or "none" + if logging is disabled. + type: string + enum: + - local + - json-file + - syslog + - journald + - gelf + - fluentd + - awslogs + - splunk + - etwlogs + - none + Config: + description: Driver-specific configuration options for the logging driver. + type: object + additionalProperties: + type: string + example: + max-file: "5" + max-size: 10m + NetworkMode: + type: string + description: | + Network mode to use for this container. Supported standard values + are: `bridge`, `host`, `none`, and `container:`. Any + other value is taken as a custom network's name to which this + container should connect to. + PortBindings: + $ref: "#/components/schemas/PortMap" + RestartPolicy: + $ref: "#/components/schemas/RestartPolicy" + AutoRemove: + type: boolean + description: | + Automatically remove the container when the container's process + exits. This has no effect if `RestartPolicy` is set. + VolumeDriver: + type: string + description: Driver that this container uses to mount volumes. + VolumesFrom: + type: array + description: | + A list of volumes to inherit from another container, specified in + the form `[:]`. + items: + type: string + Mounts: + description: | + Specification for mounts to be added to the container. + type: array + items: + $ref: "#/components/schemas/Mount" + ConsoleSize: + type: + - array + - "null" + description: | + Initial console size, as an `[height, width]` array. + minItems: 2 + maxItems: 2 + items: + type: integer + minimum: 0 + example: + - 80 + - 64 + Annotations: + type: object + description: | + Arbitrary non-identifying metadata attached to container and + provided to the runtime when the container is started. + additionalProperties: + type: string + CapAdd: + type: array + description: | + A list of kernel capabilities to add to the container. Conflicts + with option 'Capabilities'. + items: + type: string + CapDrop: + type: array + description: | + A list of kernel capabilities to drop from the container. Conflicts + with option 'Capabilities'. + items: + type: string + CgroupnsMode: + type: string + enum: + - private + - host + description: | + cgroup namespace mode for the container. Possible values are: + + - `"private"`: the container runs in its own private cgroup namespace + - `"host"`: use the host system's cgroup namespace + + If not specified, the daemon default is used, which can either be `"private"` + or `"host"`, depending on daemon version, kernel support and configuration. + Dns: + type: array + description: A list of DNS servers for the container to use. + items: + type: string + format: ip-address + x-go-type: + type: Addr + import: + package: net/netip + DnsOptions: + type: array + description: A list of DNS options. + items: + type: string + DnsSearch: + type: array + description: A list of DNS search domains. + items: + type: string + ExtraHosts: + type: array + description: | + A list of hostnames/IP mappings to add to the container's `/etc/hosts` + file. Specified in the form `["hostname:IP"]`. + items: + type: string + GroupAdd: + type: array + description: | + A list of additional groups that the container process will run as. + items: + type: string + IpcMode: + type: string + description: | + IPC sharing mode for the container. Possible values are: + + - `"none"`: own private IPC namespace, with /dev/shm not mounted + - `"private"`: own private IPC namespace + - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers + - `"container:"`: join another (shareable) container's IPC namespace + - `"host"`: use the host system's IPC namespace + + If not specified, daemon default is used, which can either be `"private"` + or `"shareable"`, depending on daemon version and configuration. + Cgroup: + type: string + description: Cgroup to use for the container. + Links: + type: array + description: | + A list of links for the container in the form `container_name:alias`. + items: + type: string + OomScoreAdj: + type: integer + description: | + An integer value containing the score given to the container in + order to tune OOM killer preferences. + example: 500 + PidMode: + type: string + description: | + Set the PID (Process) Namespace mode for the container. It can be + either: + + - `"container:"`: joins another container's PID namespace + - `"host"`: use the host's PID namespace inside the container + Privileged: + type: boolean + description: Gives the container full access to the host. + PublishAllPorts: + type: boolean + description: | + Allocates an ephemeral host port for all of a container's + exposed ports. + + Ports are de-allocated when the container stops and allocated when + the container starts. The allocated port might be changed when + restarting the container. + + The port is selected from the ephemeral port range that depends on + the kernel. For example, on Linux the range is defined by + `/proc/sys/net/ipv4/ip_local_port_range`. + ReadonlyRootfs: + type: boolean + description: Mount the container's root filesystem as read only. + SecurityOpt: + type: array + description: | + A list of string values to customize labels for MLS systems, such + as SELinux. + items: + type: string + StorageOpt: + type: object + description: | + Storage driver options for this container, in the form `{"size": "120G"}`. + additionalProperties: + type: string + Tmpfs: + type: object + description: | + A map of container directories which should be replaced by tmpfs + mounts, and their corresponding mount options. For example: + + ``` + { "/run": "rw,noexec,nosuid,size=65536k" } + ``` + additionalProperties: + type: string + UTSMode: + type: string + description: UTS namespace to use for the container. + UsernsMode: + type: string + description: | + Sets the usernamespace mode for the container when usernamespace + remapping option is enabled. + ShmSize: + type: integer + format: int64 + description: | + Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. + minimum: 0 + Sysctls: + type: + - object + - "null" + description: |- + A list of kernel parameters (sysctls) to set in the container. + + This field is omitted if not set. + additionalProperties: + type: string + example: + net.ipv4.ip_forward: "1" + Runtime: + type: + - string + - "null" + description: Runtime to use with this container. + Umask: + type: + - integer + - "null" + format: uint32 + description: |- + Set the initial umask for a Unix container. + + If omitted, the daemon does not set a umask in the OCI process + specification, and the runtime's default behavior applies. + + JSON integers are decimal. For example, use `18` for the octal + umask `0022`, and `511` for the octal umask `0777`. + Isolation: + type: string + description: | + Isolation technology of the container. (Windows only) + enum: + - default + - process + - hyperv + - "" + MaskedPaths: + type: array + description: | + The list of paths to be masked inside the container (this overrides + the default set of paths). + items: + type: string + example: + - /proc/asound + - /proc/acpi + - /proc/kcore + - /proc/keys + - /proc/latency_stats + - /proc/timer_list + - /proc/timer_stats + - /proc/sched_debug + - /proc/scsi + - /sys/firmware + - /sys/devices/virtual/powercap + ReadonlyPaths: + type: array + description: | + The list of paths to be set as read-only inside the container + (this overrides the default set of paths). + items: + type: string + example: + - /proc/bus + - /proc/fs + - /proc/irq + - /proc/sys + - /proc/sysrq-trigger + ContainerConfig: + description: | + Configuration for a container that is portable between hosts. + type: object + properties: + Hostname: + description: | + The hostname to use for the container, as a valid RFC 1123 hostname. + type: string + example: 439f4e91bd1d + Domainname: + description: | + The domain name to use for the container. + type: string + User: + description: |- + Commands run as this user inside the container. If omitted, commands + run as the user specified in the image the container was started from. + + Can be either user-name or UID, and optional group-name or GID, + separated by a colon (`[<:group-name|GID>]`). + type: string + example: 123:456 + AttachStdin: + description: Whether to attach to `stdin`. + type: boolean + default: false + AttachStdout: + description: Whether to attach to `stdout`. + type: boolean + default: true + AttachStderr: + description: Whether to attach to `stderr`. + type: boolean + default: true + ExposedPorts: + description: | + An object mapping ports to an empty object in the form: + + `{"/": {}}` + type: + - object + - "null" + additionalProperties: + type: object + enum: + - {} + default: {} + example: + 80/tcp: {} + 443/tcp: {} + Tty: + description: | + Attach standard streams to a TTY, including `stdin` if it is not closed. + type: boolean + default: false + OpenStdin: + description: Open `stdin` + type: boolean + default: false + StdinOnce: + description: Close `stdin` after one attached client disconnects + type: boolean + default: false + Env: + description: | + A list of environment variables to set inside the container in the + form `["VAR=value", ...]`. A variable without `=` is removed from the + environment, rather than to have an empty value. + type: array + items: + type: string + example: + - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + Cmd: + description: | + Command to run specified as a string or an array of strings. + type: array + items: + type: string + example: + - /bin/sh + Healthcheck: + $ref: "#/components/schemas/HealthConfig" + ArgsEscaped: + description: Command is already escaped (Windows only) + type: + - boolean + - "null" + default: false + example: false + Image: + description: | + The name (or reference) of the image to use when creating the container, + or which was used when the container was created. + type: string + example: example-image:1.0 + Volumes: + description: | + An object mapping mount point paths inside the container to empty + objects. + type: object + additionalProperties: + type: object + enum: + - {} + default: {} + WorkingDir: + description: The working directory for commands to run in. + type: string + example: /public/ + Entrypoint: + description: | + The entry point for the container as a string or an array of strings. + + If the array consists of exactly one empty string (`[""]`) then the + entry point is reset to system default (i.e., the entry point used by + docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + type: array + items: + type: string + example: [] + NetworkDisabled: + description: Disable networking for the container. + type: + - boolean + - "null" + OnBuild: + description: | + `ONBUILD` metadata that were defined in the image's `Dockerfile`. + type: + - array + - "null" + items: + type: string + example: [] + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + StopSignal: + description: | + Signal to stop a container as a string or unsigned integer. + type: + - string + - "null" + example: SIGTERM + StopTimeout: + description: | + Timeout to stop a container in seconds. If omitted, the daemon-wide + default (`default-stop-timeout`) is used. + type: + - integer + - "null" + Shell: + description: | + Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + type: + - array + - "null" + items: + type: string + example: + - /bin/sh + - -c + ImageConfig: + description: | + Configuration of the image. These fields are used as defaults + when starting a container from the image. + type: object + properties: + User: + description: The user that commands are run as inside the container. + type: string + example: web:web + ExposedPorts: + description: | + An object mapping ports to an empty object in the form: + + `{"/": {}}` + type: + - object + - "null" + additionalProperties: + type: object + enum: + - {} + default: {} + example: + 80/tcp: {} + 443/tcp: {} + Env: + description: | + A list of environment variables to set inside the container in the + form `["VAR=value", ...]`. A variable without `=` is removed from the + environment, rather than to have an empty value. + type: array + items: + type: string + example: + - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + Cmd: + description: | + Command to run specified as a string or an array of strings. + type: array + items: + type: string + example: + - /bin/sh + Healthcheck: + $ref: "#/components/schemas/HealthConfig" + ArgsEscaped: + description: Command is already escaped (Windows only) + type: + - boolean + - "null" + default: false + example: false + Volumes: + description: | + An object mapping mount point paths inside the container to empty + objects. + type: object + additionalProperties: + type: object + enum: + - {} + default: {} + example: + /app/data: {} + /app/config: {} + WorkingDir: + description: The working directory for commands to run in. + type: string + example: /public/ + Entrypoint: + description: | + The entry point for the container as a string or an array of strings. + + If the array consists of exactly one empty string (`[""]`) then the + entry point is reset to system default (i.e., the entry point used by + docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + type: array + items: + type: string + example: [] + OnBuild: + description: | + `ONBUILD` metadata that were defined in the image's `Dockerfile`. + type: + - array + - "null" + items: + type: string + example: [] + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + StopSignal: + description: | + Signal to stop a container as a string or unsigned integer. + type: + - string + - "null" + example: SIGTERM + Shell: + description: | + Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + type: + - array + - "null" + items: + type: string + example: + - /bin/sh + - -c + NetworkingConfig: + description: | + NetworkingConfig represents the container's networking configuration for + each of its interfaces. + It is used for the networking configs specified in the `docker create` + and `docker network connect` commands. + type: object + properties: + EndpointsConfig: + description: | + A mapping of network name to endpoint configuration for that network. + The endpoint configuration can be left empty to connect to that + network with no particular endpoint configuration. + type: object + additionalProperties: + $ref: "#/components/schemas/EndpointSettings" + example: + EndpointsConfig: + isolated_nw: + IPAMConfig: + IPv4Address: 172.20.30.33 + IPv6Address: 2001:db8:abcd::3033 + LinkLocalIPs: + - 169.254.34.68 + - fe80::3468 + MacAddress: 02:42:ac:12:05:02 + Links: + - container_1 + - container_2 + Aliases: + - server_x + - server_y + database_nw: {} + NetworkSettings: + description: NetworkSettings exposes the network settings in the API + type: object + properties: + SandboxID: + description: SandboxID uniquely represents a container's network stack. + type: string + example: 9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3 + SandboxKey: + description: SandboxKey is the full path of the netns handle + type: string + example: /var/run/docker/netns/8ab54b426c38 + Ports: + $ref: "#/components/schemas/PortMap" + Networks: + description: | + Information about all networks that the container is connected to. + type: object + additionalProperties: + $ref: "#/components/schemas/EndpointSettings" + Address: + description: Address represents an IPv4 or IPv6 IP address. + type: object + properties: + Addr: + description: IP address. + type: string + PrefixLen: + description: Mask length of the IP address. + type: integer + PortMap: + description: | + PortMap describes the mapping of container ports to host ports, using the + container's port-number and protocol as key in the format `/`, + for example, `80/udp`. + + If a container's port is mapped for multiple protocols, separate entries + are added to the mapping table. + type: object + additionalProperties: + type: + - array + - "null" + items: + $ref: "#/components/schemas/PortBinding" + example: + 443/tcp: + - HostIp: 127.0.0.1 + HostPort: "4443" + 80/tcp: + - HostIp: 0.0.0.0 + HostPort: "80" + - HostIp: 0.0.0.0 + HostPort: "8080" + 80/udp: + - HostIp: 0.0.0.0 + HostPort: "80" + 53/udp: + - HostIp: 0.0.0.0 + HostPort: "53" + 2377/tcp: null + PortBinding: + description: | + PortBinding represents a binding between a host IP address and a host + port. + type: object + properties: + HostIp: + description: Host IP address that the container's port is mapped to. + type: string + example: 127.0.0.1 + x-go-type: + type: Addr + import: + package: net/netip + HostPort: + description: Host port number that the container's port is mapped to. + type: string + example: "4443" + DriverData: + description: | + Information about the storage driver used to store the container's and + image's filesystem. + type: object + required: + - Name + - Data + properties: + Name: + description: Name of the storage driver. + type: string + example: overlay2 + Data: + description: | + Low-level storage metadata, provided as key/value pairs. + + This information is driver-specific, and depends on the storage-driver + in use, and should be used for informational purposes only. + type: object + additionalProperties: + type: string + example: + MergedDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged + UpperDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff + WorkDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work + Storage: + description: | + Information about the storage used by the container. + type: object + properties: + RootFS: + allOf: + - $ref: "#/components/schemas/RootFSStorage" + - anyOf: + - description: | + Information about the storage used for the container's root filesystem. + type: object + - type: "null" + RootFSStorage: + description: | + Information about the storage used for the container's root filesystem. + type: object + x-go-name: RootFSStorage + properties: + Snapshot: + allOf: + - $ref: "#/components/schemas/RootFSStorageSnapshot" + - anyOf: + - description: | + Information about the snapshot used for the container's root filesystem. + type: object + - type: "null" + RootFSStorageSnapshot: + description: | + Information about a snapshot backend of the container's root filesystem. + type: object + x-go-name: RootFSStorageSnapshot + properties: + Name: + description: Name of the snapshotter. + type: string + FilesystemChange: + description: | + Change in the container's filesystem. + type: object + required: + - Path + - Kind + properties: + Path: + description: | + Path to file or directory that has changed. + type: string + Kind: + $ref: "#/components/schemas/ChangeType" + ChangeType: + description: | + Kind of change + + Can be one of: + + - `0`: Modified ("C") + - `1`: Added ("A") + - `2`: Deleted ("D") + type: integer + format: uint8 + enum: + - 0 + - 1 + - 2 + ImageInspect: + description: | + Information about an image in the local image cache. + type: object + properties: + Id: + description: | + ID is the content-addressable ID of an image. + + This identifier is a content-addressable digest calculated from the + image's configuration (which includes the digests of layers used by + the image). + + Note that this digest differs from the `RepoDigests` below, which + holds digests of image manifests that reference the image. + type: string + example: sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710 + Descriptor: + allOf: + - $ref: "#/components/schemas/OCIDescriptor" + - anyOf: + - description: | + Descriptor is an OCI descriptor of the image target. + In case of a multi-platform image, this descriptor points to the OCI index + or a manifest list. + + This field is only present if the daemon provides a multi-platform image store. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + - type: "null" + Manifests: + description: | + Manifests is a list of image manifests available in this image. It + provides a more detailed view of the platform-specific image manifests or + other image-attached data like build attestations. + + Only available if the daemon provides a multi-platform image store + and the `manifests` option is set in the inspect request. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ImageManifestSummary" + Identity: + allOf: + - $ref: "#/components/schemas/Identity" + - anyOf: + - description: |- + Identity holds information about the identity and origin of the image. + This is trusted information verified by the daemon and cannot be modified + by tagging an image to a different name. + - type: "null" + RepoTags: + description: | + List of image names/tags in the local image cache that reference this + image. + + Multiple image tags can refer to the same image, and this list may be + empty if no tags reference the image, in which case the image is + "untagged", in which case it can still be referenced by its ID. + type: array + items: + type: string + example: + - example:1.0 + - example:latest + - example:stable + - internal.registry.example.com:5000/example:1.0 + RepoDigests: + description: | + List of content-addressable digests of locally available image manifests + that the image is referenced from. Multiple manifests can refer to the + same image. + + These digests are usually only available if the image was either pulled + from a registry, or if the image was pushed to a registry, which is when + the manifest is generated and its digest calculated. + type: array + items: + type: string + example: + - example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb + - internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578 + Comment: + description: | + Optional message that was set when committing or importing the image. + type: + - string + - "null" + example: "" + Created: + description: | + Date and time at which the image was created, formatted in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + + This information is only available if present in the image, + and omitted otherwise. + type: + - string + - "null" + format: dateTime + example: 2022-02-04T21:20:12.497794809Z + Author: + description: | + Name of the author that was specified when committing the image, or as + specified through MAINTAINER (deprecated) in the Dockerfile. + type: + - string + - "null" + example: "" + Config: + $ref: "#/components/schemas/ImageConfig" + Architecture: + description: | + Hardware CPU architecture that the image runs on. + type: string + example: arm + Variant: + description: | + CPU architecture variant (presently ARM-only). + type: + - string + - "null" + example: v7 + Os: + description: | + Operating System the image is built to run on. + type: string + example: linux + OsVersion: + description: | + Operating System version the image is built to run on (especially + for Windows). + type: + - string + - "null" + example: "" + Size: + description: | + Total size of the image variant, including all layers it is composed of. + + For multi-platform images, this is the size of the platform variant + selected by the `platform` query parameter. If no platform is specified, + the daemon selects a platform as described in the `platform` parameter. + + When using the containerd image store, this includes both the image content + that's present locally and the unpacked snapshot data for the selected + variant. + + Image data may be shared between images, so this size does not indicate + how much space would be reclaimed by deleting the image. + type: integer + format: int64 + example: 1239828 + GraphDriver: + allOf: + - $ref: "#/components/schemas/DriverData" + - anyOf: + - {} + - type: "null" + RootFS: + description: | + Information about the image's RootFS, including the layer IDs. + type: object + required: + - Type + properties: + Type: + type: string + example: layers + Layers: + type: array + items: + type: string + example: + - sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6 + - sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef + Metadata: + description: | + Additional metadata of the image in the local cache. This information + is local to the daemon, and not part of the image itself. + type: object + properties: + LastTagTime: + description: | + Date and time at which the image was last tagged in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + + This information is only available if the image was tagged locally, + and omitted otherwise. + type: + - string + - "null" + format: dateTime + example: 2022-02-28T14:40:02.623929178Z + Identity: + description: |- + Identity holds information about the identity and origin of the image. + This is trusted information verified by the daemon and cannot be modified + by tagging an image to a different name. + type: object + properties: + Signature: + description: Signature contains the properties of verified signatures for the image. + type: array + items: + $ref: "#/components/schemas/SignatureIdentity" + Pull: + description: |- + Pull contains remote location information if image was created via pull. + If image was pulled via mirror, this contains the original repository location. + After successful push this images also contains the pushed repository location. + type: array + items: + $ref: "#/components/schemas/PullIdentity" + Build: + description: Build contains build reference information if image was created via build. + type: array + items: + $ref: "#/components/schemas/BuildIdentity" + BuildIdentity: + description: BuildIdentity contains build reference information if image was created via build. + type: object + properties: + Ref: + description: |- + Ref is the identifier for the build request. This reference can be used to + look up the build details in BuildKit history API. + type: string + CreatedAt: + description: CreatedAt is the time when the build ran. + type: string + format: date-time + PullIdentity: + description: |- + PullIdentity contains remote location information if image was created via pull. + If image was pulled via mirror, this contains the original repository location. + type: object + properties: + Repository: + description: Repository is the remote repository location the image was pulled from. + type: string + SignatureIdentity: + description: SignatureIdentity contains the properties of verified signatures for the image. + type: object + properties: + Name: + description: Name is a textual description summarizing the type of signature. + type: string + Timestamps: + description: Timestamps contains a list of verified signed timestamps for the signature. + type: array + items: + $ref: "#/components/schemas/SignatureTimestamp" + KnownSigner: + allOf: + - $ref: "#/components/schemas/KnownSignerIdentity" + - description: KnownSigner is an identifier for a special signer identity that is known to the implementation. + DockerReference: + description: |- + DockerReference is the Docker image reference associated with the signature. + This is an optional field only present in older hashedrecord signatures. + type: string + Signer: + allOf: + - $ref: "#/components/schemas/SignerIdentity" + - description: Signer contains information about the signer certificate used to sign the image. + SignatureType: + allOf: + - $ref: "#/components/schemas/SignatureType" + - description: SignatureType is the type of signature format. E.g. "bundle-v0.3" or "hashedrecord". + Error: + description: |- + Error contains error information if signature verification failed. + Other fields will be empty in this case. + type: string + Warnings: + description: |- + Warnings contains any warnings that occurred during signature verification. + For example, if there was no internet connectivity and cached trust roots were used. + Warning does not indicate a failed verification but may point to configuration issues. + type: array + items: + type: string + SignatureTimestamp: + description: SignatureTimestamp contains information about a verified signed timestamp for an image signature. + type: object + properties: + Type: + $ref: "#/components/schemas/SignatureTimestampType" + URI: + type: string + Timestamp: + type: string + format: date-time + SignatureTimestampType: + description: SignatureTimestampType is the type of timestamp used in the signature. + type: string + enum: + - Tlog + - TimestampAuthority + SignatureType: + description: SignatureType is the type of signature format. + type: string + enum: + - bundle-v0.3 + - simplesigning-v1 + KnownSignerIdentity: + description: KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation. + type: string + enum: + - DHI + SignerIdentity: + description: SignerIdentity contains information about the signer certificate used to sign the image. + type: object + properties: + CertificateIssuer: + type: string + description: CertificateIssuer is the certificate issuer. + SubjectAlternativeName: + type: string + description: SubjectAlternativeName is the certificate subject alternative name. + Issuer: + type: string + description: |- + The OIDC issuer. Should match `iss` claim of ID token or, in the case of + a federated login like Dex it should match the issuer URL of the + upstream issuer. The issuer is not set the extensions are invalid and + will fail to render. + BuildSignerURI: + type: string + description: Reference to specific build instructions that are responsible for signing. + BuildSignerDigest: + type: string + description: Immutable reference to the specific version of the build instructions that is responsible for signing. + RunnerEnvironment: + type: string + description: Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure. + SourceRepositoryURI: + type: string + description: Source repository URL that the build was based on. + SourceRepositoryDigest: + type: string + description: Immutable reference to a specific version of the source code that the build was based upon. + SourceRepositoryRef: + type: string + description: Source Repository Ref that the build run was based upon. + SourceRepositoryIdentifier: + type: string + description: Immutable identifier for the source repository the workflow was based upon. + SourceRepositoryOwnerURI: + type: string + description: Source repository owner URL of the owner of the source repository that the build was based on. + SourceRepositoryOwnerIdentifier: + type: string + description: Immutable identifier for the owner of the source repository that the workflow was based upon. + BuildConfigURI: + type: string + description: Build Config URL to the top-level/initiating build instructions. + BuildConfigDigest: + type: string + description: Immutable reference to the specific version of the top-level/initiating build instructions. + BuildTrigger: + type: string + description: Event or action that initiated the build. + RunInvocationURI: + type: string + description: Run Invocation URL to uniquely identify the build execution. + SourceRepositoryVisibilityAtSigning: + type: string + description: Source repository visibility at the time of signing the certificate. + ImageSummary: + type: object + x-go-name: Summary + required: + - Id + - ParentId + - RepoTags + - RepoDigests + - Created + - Size + - SharedSize + - Labels + - Containers + properties: + Id: + description: | + ID is the content-addressable ID of an image. + + This identifier is a content-addressable digest calculated from the + image's configuration (which includes the digests of layers used by + the image). + + Note that this digest differs from the `RepoDigests` below, which + holds digests of image manifests that reference the image. + type: string + example: sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710 + ParentId: + description: | + ID of the parent image. + + Depending on how the image was created, this field may be empty and + is only set for images that were built/created locally. This field + is empty if the image was pulled from an image registry. + type: string + example: "" + RepoTags: + description: | + List of image names/tags in the local image cache that reference this + image. + + Multiple image tags can refer to the same image, and this list may be + empty if no tags reference the image, in which case the image is + "untagged", in which case it can still be referenced by its ID. + type: array + items: + type: string + example: + - example:1.0 + - example:latest + - example:stable + - internal.registry.example.com:5000/example:1.0 + RepoDigests: + description: | + List of content-addressable digests of locally available image manifests + that the image is referenced from. Multiple manifests can refer to the + same image. + + These digests are usually only available if the image was either pulled + from a registry, or if the image was pushed to a registry, which is when + the manifest is generated and its digest calculated. + type: array + items: + type: string + example: + - example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb + - internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578 + Created: + description: | + Date and time at which the image was created as a Unix timestamp + (number of seconds since EPOCH). + type: integer + example: "1644009612" + Size: + description: | + Total size of the image including all layers it is composed of. + type: integer + format: int64 + example: 172064416 + SharedSize: + description: | + Total size of image layers that are shared between this image and other + images. + + This size is not calculated by default. `-1` indicates that the value + has not been set / calculated. + type: integer + format: int64 + example: 1239828 + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + Containers: + description: | + Number of containers using this image. Includes both stopped and running + containers. + + `-1` indicates that the value has not been set / calculated. + type: integer + example: 2 + Manifests: + description: | + Manifests is a list of manifests available in this image. + It provides a more detailed view of the platform-specific image manifests + or other image-attached data like build attestations. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + type: array + x-omitempty: true + items: + $ref: "#/components/schemas/ImageManifestSummary" + Descriptor: + allOf: + - $ref: "#/components/schemas/OCIDescriptor" + - anyOf: + - description: | + Descriptor is an OCI descriptor of the image target. + In case of a multi-platform image, this descriptor points to the OCI index + or a manifest list. + + This field is only present if the daemon provides a multi-platform image store. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + - type: "null" + ImagesDiskUsage: + type: object + x-go-name: DiskUsage + x-go-package: github.com/moby/moby/api/types/image + description: | + represents system data usage for image resources. + properties: + ActiveCount: + description: | + Count of active images. + type: integer + format: int64 + example: 1 + TotalCount: + description: | + Count of all images. + type: integer + format: int64 + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing unused images. + type: integer + format: int64 + example: 12345678 + TotalSize: + description: | + Disk space in use by images. + type: integer + format: int64 + example: 98765432 + Items: + description: | + List of image summaries. + type: array + x-omitempty: true + items: + x-go-type: + type: Summary + AuthConfig: + type: object + properties: + username: + type: string + password: + type: string + serveraddress: + type: string + example: + username: hannibal + password: xxxx + serveraddress: https://index.docker.io/v1/ + AuthResponse: + description: | + An identity token was generated successfully. + type: object + required: + - Status + properties: + Status: + description: The status of the authentication + type: string + example: Login Succeeded + IdentityToken: + description: An opaque token used to authenticate a user after a successful login + type: string + example: 9cbaf023786cd7... + ProcessConfig: + type: object + properties: + privileged: + type: boolean + user: + type: string + tty: + type: boolean + entrypoint: + type: string + arguments: + type: array + items: + type: string + Volume: + type: object + required: + - Name + - Driver + - Mountpoint + - Labels + - Scope + - Options + properties: + Name: + type: string + description: Name of the volume. + example: tardis + Driver: + type: string + description: Name of the volume driver used by the volume. + example: custom + Mountpoint: + type: string + description: Mount path of the volume on the host. + example: /var/lib/docker/volumes/tardis + CreatedAt: + type: string + format: dateTime + description: Date/Time the volume was created. + example: 2016-06-07T20:31:11.853781916Z + Status: + type: object + description: | + Low-level details about the volume, provided by the volume driver. + Details are returned as a map with key/value pairs: + `{"key":"value","key2":"value2"}`. + + The `Status` field is optional, and is omitted if the volume driver + does not support this feature. + additionalProperties: + type: object + example: + hello: world + Labels: + type: object + description: User-defined key/value metadata. + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + Scope: + type: string + description: | + The level at which the volume exists. Either `global` for cluster-wide, + or `local` for machine level. + default: local + enum: + - local + - global + example: local + ClusterVolume: + $ref: "#/components/schemas/ClusterVolume" + Options: + type: object + description: | + The driver specific options used when creating the volume. + additionalProperties: + type: string + example: + device: tmpfs + o: size=100m,uid=1000 + type: tmpfs + UsageData: + type: + - object + - "null" + x-go-name: UsageData + required: + - Size + - RefCount + description: | + Usage details about the volume. This information is used by the + `GET /system/df` endpoint, and omitted in other endpoints. + properties: + Size: + type: integer + format: int64 + default: -1 + description: | + Amount of disk space used by the volume (in bytes). This information + is only available for volumes created with the `"local"` volume + driver. For volumes created with other volume drivers, this field + is set to `-1` ("not available") + RefCount: + type: integer + format: int64 + default: -1 + description: | + The number of containers referencing this volume. This field + is set to `-1` if the reference-count is not available. + VolumesDiskUsage: + type: object + x-go-name: DiskUsage + x-go-package: github.com/moby/moby/api/types/volume + description: | + represents system data usage for volume resources. + properties: + ActiveCount: + description: | + Count of active volumes. + type: integer + format: int64 + example: 1 + TotalCount: + description: | + Count of all volumes. + type: integer + format: int64 + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive volumes. + type: integer + format: int64 + example: 12345678 + TotalSize: + description: | + Disk space in use by volumes. + type: integer + format: int64 + example: 98765432 + Items: + description: | + List of volumes. + type: array + x-omitempty: true + items: + x-go-type: + type: Volume + VolumeCreateRequest: + description: Volume configuration + type: object + title: VolumeConfig + x-go-name: CreateRequest + properties: + Name: + description: | + The new volume's name. If not specified, Docker generates a name. + type: string + example: tardis + Driver: + description: Name of the volume driver to use. + type: string + default: local + example: custom + DriverOpts: + description: | + A mapping of driver options and values. These options are + passed directly to the driver and are driver specific. + type: object + additionalProperties: + type: string + example: + device: tmpfs + o: size=100m,uid=1000 + type: tmpfs + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + ClusterVolumeSpec: + $ref: "#/components/schemas/ClusterVolumeSpec" + VolumeListResponse: + type: object + title: VolumeListResponse + x-go-name: ListResponse + description: Volume list response + properties: + Volumes: + type: array + description: List of volumes + items: + $ref: "#/components/schemas/Volume" + Warnings: + type: array + description: | + Warnings that occurred when fetching the list of volumes. + items: + type: string + example: [] + Network: + type: object + properties: + Name: + description: | + Name of the network. + type: string + example: my_network + x-omitempty: false + Id: + description: | + ID that uniquely identifies a network on a single machine. + type: string + x-go-name: ID + x-omitempty: false + example: 7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99 + Created: + description: | + Date and time at which the network was created in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + x-omitempty: false + x-go-type: + type: Time + import: + package: time + hints: + nullable: false + example: 2016-10-19T04:33:30.360899459Z + Scope: + description: | + The level at which the network exists (e.g. `swarm` for cluster-wide + or `local` for machine level) + type: string + x-omitempty: false + example: local + Driver: + description: | + The name of the driver used to create the network (e.g. `bridge`, + `overlay`). + type: string + x-omitempty: false + example: overlay + EnableIPv4: + description: | + Whether the network was created with IPv4 enabled. + type: boolean + x-omitempty: false + example: true + EnableIPv6: + description: | + Whether the network was created with IPv6 enabled. + type: boolean + x-omitempty: false + example: false + IPAM: + allOf: + - $ref: "#/components/schemas/IPAM" + - description: | + The network's IP Address Management. + x-nullable: false + x-omitempty: false + Internal: + description: | + Whether the network is created to only allow internal networking + connectivity. + type: boolean + x-omitempty: false + default: false + example: false + Attachable: + description: | + Whether a global / swarm scope network is manually attachable by regular + containers from workers in swarm mode. + type: boolean + x-omitempty: false + default: false + example: false + Ingress: + description: | + Whether the network is providing the routing-mesh for the swarm cluster. + type: boolean + x-omitempty: false + default: false + example: false + ConfigFrom: + allOf: + - $ref: "#/components/schemas/ConfigReference" + - x-nullable: false + x-omitempty: false + ConfigOnly: + description: | + Whether the network is a config-only network. Config-only networks are + placeholder networks for network configurations to be used by other + networks. Config-only networks cannot be used directly to run containers + or services. + type: boolean + x-omitempty: false + default: false + Options: + description: | + Network-specific options uses when creating the network. + type: object + x-omitempty: false + additionalProperties: + type: string + example: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 + com.docker.network.bridge.name: docker0 + com.docker.network.driver.mtu: "1500" + Labels: + description: | + Metadata specific to the network being created. + type: object + x-omitempty: false + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + Peers: + description: | + List of peer nodes for an overlay network. This field is only present + for overlay networks, and omitted for other network types. + type: array + x-omitempty: true + items: + $ref: "#/components/schemas/PeerInfo" + NetworkSummary: + description: Network list response item + x-go-name: Summary + type: object + allOf: + - $ref: "#/components/schemas/Network" + NetworkInspect: + description: The body of the "get network" http response message. + x-go-name: Inspect + type: object + allOf: + - $ref: "#/components/schemas/Network" + properties: + Containers: + description: | + Contains endpoints attached to the network. + type: object + x-omitempty: false + additionalProperties: + $ref: "#/components/schemas/EndpointResource" + example: + 19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c: + Name: test + EndpointID: 628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a + MacAddress: 02:42:ac:13:00:02 + IPv4Address: 172.19.0.2/16 + IPv6Address: "" + Services: + description: | + List of services using the network. This field is only present for + swarm scope networks, and omitted for local scope networks. + type: object + x-omitempty: true + additionalProperties: + x-go-type: + type: ServiceInfo + hints: + nullable: false + Status: + allOf: + - $ref: "#/components/schemas/NetworkStatus" + - description: | + provides runtime information about the network such as the number of allocated IPs. + NetworkStatus: + description: | + provides runtime information about the network such as the number of allocated IPs. + type: object + x-go-name: Status + properties: + IPAM: + $ref: "#/components/schemas/IPAMStatus" + ServiceInfo: + x-omitempty: false + description: | + represents service parameters with the list of service's tasks + type: object + properties: + VIP: + type: string + x-omitempty: false + x-go-type: + type: Addr + import: + package: net/netip + Ports: + type: array + x-omitempty: false + items: + type: string + LocalLBIndex: + type: integer + format: int + x-omitempty: false + x-go-type: + type: int + Tasks: + type: array + x-omitempty: false + items: + $ref: "#/components/schemas/NetworkTaskInfo" + NetworkTaskInfo: + x-omitempty: false + x-go-name: Task + description: | + carries the information about one backend task + type: object + properties: + Name: + type: string + x-omitempty: false + EndpointID: + type: string + x-omitempty: false + EndpointIP: + type: string + x-omitempty: false + x-go-type: + type: Addr + import: + package: net/netip + Info: + type: object + x-omitempty: false + additionalProperties: + type: string + ConfigReference: + x-omitempty: false + description: | + The config-only network source to provide the configuration for + this network. + type: object + properties: + Network: + description: | + The name of the config-only network that provides the network's + configuration. The specified network must be an existing config-only + network. Only network names are allowed, not network IDs. + type: string + x-omitempty: false + example: config_only_network_01 + IPAM: + type: object + x-omitempty: false + properties: + Driver: + description: Name of the IPAM driver to use. + type: string + default: default + example: default + Config: + description: | + List of IPAM configuration options, specified as a map: + + ``` + {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } + ``` + type: array + items: + $ref: "#/components/schemas/IPAMConfig" + Options: + description: Driver-specific options, specified as a map. + type: object + additionalProperties: + type: string + example: + foo: bar + IPAMConfig: + type: object + properties: + Subnet: + type: string + example: 172.20.0.0/16 + IPRange: + type: string + example: 172.20.10.0/24 + Gateway: + type: string + example: 172.20.10.11 + AuxiliaryAddresses: + type: object + additionalProperties: + type: string + IPAMStatus: + type: object + x-omitempty: false + properties: + Subnets: + type: object + additionalProperties: + $ref: "#/components/schemas/SubnetStatus" + example: + 172.16.0.0/16: + IPsInUse: 3 + DynamicIPsAvailable: 65533 + 2001:db8:abcd:0012::0/96: + IPsInUse: 5 + DynamicIPsAvailable: 4294967291 + x-go-type: + type: SubnetStatuses + kind: map + SubnetStatus: + type: object + x-omitempty: false + properties: + IPsInUse: + description: | + Number of IP addresses in the subnet that are in use or reserved and are therefore unavailable for allocation, saturating at 264 - 1. + type: integer + format: uint64 + x-omitempty: false + DynamicIPsAvailable: + description: | + Number of IP addresses within the network's IPRange for the subnet that are available for allocation, saturating at 264 - 1. + type: integer + format: uint64 + x-omitempty: false + EndpointResource: + type: object + description: | + contains network resources allocated and used for a container in a network. + properties: + Name: + type: string + x-omitempty: false + example: container_1 + EndpointID: + type: string + x-omitempty: false + example: 628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a + MacAddress: + type: string + x-omitempty: false + example: 02:42:ac:13:00:02 + x-go-type: + type: HardwareAddr + IPv4Address: + type: string + x-omitempty: false + example: 172.19.0.2/16 + x-go-type: + type: Prefix + import: + package: net/netip + IPv6Address: + type: string + x-omitempty: false + example: "" + x-go-type: + type: Prefix + import: + package: net/netip + PeerInfo: + description: | + represents one peer of an overlay network. + type: object + properties: + Name: + description: ID of the peer-node in the Swarm cluster. + type: string + x-omitempty: false + example: 6869d7c1732b + IP: + description: IP-address of the peer-node in the Swarm cluster. + type: string + x-omitempty: false + example: 10.133.77.91 + x-go-type: + type: Addr + import: + package: net/netip + NetworkCreateResponse: + description: OK response to NetworkCreate operation + type: object + title: NetworkCreateResponse + x-go-name: CreateResponse + required: + - Id + - Warning + properties: + Id: + description: The ID of the created network. + type: string + example: b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d + Warning: + description: Warnings encountered when creating the container + type: string + example: "" + BuildInfo: + type: object + properties: + id: + type: string + stream: + type: string + errorDetail: + $ref: "#/components/schemas/ErrorDetail" + status: + type: string + progressDetail: + $ref: "#/components/schemas/ProgressDetail" + aux: + $ref: "#/components/schemas/ImageID" + BuildCache: + type: object + description: | + BuildCache contains information about a build cache record. + properties: + ID: + type: string + description: | + Unique ID of the build cache record. + example: ndlpt0hhvkqcdfkputsk4cq9c + Parents: + description: | + List of parent build cache record IDs. + type: + - array + - "null" + items: + type: string + example: + - hw53o5aio51xtltp5xjp8v7fx + Type: + type: string + description: | + Cache record type. + example: regular + enum: + - internal + - frontend + - source.local + - source.git.checkout + - exec.cachemount + - regular + Description: + type: string + description: | + Description of the build-step that produced the build cache. + example: mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache + InUse: + type: boolean + description: | + Indicates if the build cache is in use. + example: false + Shared: + type: boolean + description: | + Indicates if the build cache is shared. + example: true + Size: + description: | + Amount of disk space used by the build cache (in bytes). + type: integer + example: 51 + CreatedAt: + description: | + Date and time at which the build cache was created in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2016-08-18T10:44:24.496525531Z + LastUsedAt: + description: | + Date and time at which the build cache was last used in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: + - string + - "null" + format: dateTime + example: 2017-08-09T07:09:37.632105588Z + UsageCount: + type: integer + example: 26 + BuildCacheDiskUsage: + type: object + x-go-name: DiskUsage + x-go-package: github.com/moby/moby/api/types/build + description: | + represents system data usage for build cache resources. + properties: + ActiveCount: + description: | + Count of active build cache records. + type: integer + format: int64 + example: 1 + TotalCount: + description: | + Count of all build cache records. + type: integer + format: int64 + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive build cache records. + type: integer + format: int64 + example: 12345678 + TotalSize: + description: | + Disk space in use by build cache records. + type: integer + format: int64 + example: 98765432 + Items: + description: | + List of build cache records. + type: array + x-omitempty: true + items: + x-go-type: + type: CacheRecord + ImageID: + type: object + description: Image ID or Digest + properties: + ID: + type: string + example: + ID: sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c + CreateImageInfo: + type: object + properties: + id: + type: string + errorDetail: + $ref: "#/components/schemas/ErrorDetail" + status: + type: string + progressDetail: + $ref: "#/components/schemas/ProgressDetail" + PushImageInfo: + type: object + properties: + errorDetail: + $ref: "#/components/schemas/ErrorDetail" + status: + type: string + progressDetail: + $ref: "#/components/schemas/ProgressDetail" + DeviceInfo: + type: object + description: | + DeviceInfo represents a device that can be used by a container. + properties: + Source: + type: string + example: cdi + description: | + The origin device driver. + ID: + type: string + example: vendor.com/gpu=0 + description: | + The unique identifier for the device within its source driver. + For CDI devices, this would be an FQDN like "vendor.com/gpu=0". + NRIInfo: + description: | + Information about the Node Resource Interface (NRI). + + This field is only present if NRI is enabled. + type: + - object + - "null" + properties: + Info: + description: | + Information about NRI, provided as "label" / "value" pairs. + + + + + + + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: array + items: + type: array + items: + type: string + example: + - - plugin-path + - /opt/docker/nri/plugins + ErrorDetail: + type: object + properties: + code: + type: integer + message: + type: string + ProgressDetail: + type: object + properties: + current: + type: integer + total: + type: integer + ErrorResponse: + description: Represents an error. + type: object + required: + - message + properties: + message: + description: The error message. + type: string + example: + message: Something went wrong. + IDResponse: + description: Response to an API call that returns just an Id + type: object + x-go-name: IDResponse + required: + - Id + properties: + Id: + description: The id of the newly created object. + type: string + NetworkConnectRequest: + description: | + NetworkConnectRequest represents the data to be used to connect a container to a network. + type: object + x-go-name: ConnectRequest + required: + - Container + properties: + Container: + type: string + description: The ID or name of the container to connect to the network. + example: 3613f73ba0e4 + EndpointConfig: + allOf: + - $ref: "#/components/schemas/EndpointSettings" + - anyOf: + - {} + - type: "null" + NetworkDisconnectRequest: + description: | + NetworkDisconnectRequest represents the data to be used to disconnect a container from a network. + type: object + x-go-name: DisconnectRequest + required: + - Container + properties: + Container: + type: string + description: The ID or name of the container to disconnect from the network. + example: 3613f73ba0e4 + Force: + type: boolean + description: Force the container to disconnect from the network. + default: false + x-omitempty: false + example: false + EndpointSettings: + description: Configuration for a network endpoint. + type: object + properties: + IPAMConfig: + $ref: "#/components/schemas/EndpointIPAMConfig" + Links: + type: array + items: + type: string + example: + - container_1 + - container_2 + MacAddress: + description: | + MAC address for the endpoint on this network. The network driver might ignore this parameter. + type: string + example: 02:42:ac:11:00:04 + x-go-type: + type: HardwareAddr + Aliases: + type: array + items: + type: string + example: + - server_x + - server_y + DriverOpts: + description: | + DriverOpts is a mapping of driver options and values. These options + are passed directly to the driver and are driver specific. + type: + - object + - "null" + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + GwPriority: + description: | + This property determines which endpoint will provide the default + gateway for a container. The endpoint with the highest priority will + be used. If multiple endpoints have the same priority, endpoints are + lexicographically sorted based on their network name, and the one + that sorts first is picked. + type: integer + format: int64 + example: + - 10 + NetworkID: + description: | + Unique ID of the network. + type: string + example: 08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a + EndpointID: + description: | + Unique ID for the service endpoint in a Sandbox. + type: string + example: b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b + Gateway: + description: | + Gateway address for this network. + type: string + example: 172.17.0.1 + IPAddress: + description: | + IPv4 address. + type: string + example: 172.17.0.4 + x-go-type: + type: Addr + import: + package: net/netip + IPPrefixLen: + description: | + Mask length of the IPv4 address. + type: integer + example: 16 + IPv6Gateway: + description: | + IPv6 gateway address. + type: string + example: 2001:db8:2::100 + x-go-type: + type: Addr + import: + package: net/netip + GlobalIPv6Address: + description: | + Global IPv6 address. + type: string + example: 2001:db8::5689 + x-go-type: + type: Addr + import: + package: net/netip + GlobalIPv6PrefixLen: + description: | + Mask length of the global IPv6 address. + type: integer + format: int64 + example: 64 + DNSNames: + description: | + List of all DNS names an endpoint has on a specific network. This + list is based on the container name, network aliases, container short + ID, and hostname. + + These DNS names are non-fully qualified but can contain several dots. + You can get fully qualified DNS names by appending `.`. + For instance, if container name is `my.ctr` and the network is named + `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be + `my.ctr.testnet`. + type: array + items: + type: string + example: + - foobar + - server_x + - server_y + - my.ctr + EndpointIPAMConfig: + description: | + EndpointIPAMConfig represents an endpoint's IPAM configuration. + type: + - object + - "null" + properties: + IPv4Address: + type: string + example: 172.20.30.33 + x-go-type: + type: Addr + import: + package: net/netip + IPv6Address: + type: string + example: 2001:db8:abcd::3033 + x-go-type: + type: Addr + import: + package: net/netip + LinkLocalIPs: + type: array + items: + type: string + x-go-type: + type: Addr + import: + package: net/netip + example: + - 169.254.34.68 + - fe80::3468 + PluginMount: + type: object + x-go-name: Mount + required: + - Name + - Description + - Settable + - Source + - Destination + - Type + - Options + properties: + Name: + type: string + example: some-mount + Description: + type: string + example: This is a mount that's used by the plugin. + Settable: + type: array + items: + type: string + Source: + type: string + example: /var/lib/docker/plugins/ + Destination: + type: string + example: /mnt/state + Type: + type: string + example: bind + Options: + type: array + items: + type: string + example: + - rbind + - rw + PluginDevice: + type: object + x-go-name: Device + required: + - Name + - Description + - Settable + - Path + properties: + Name: + type: string + Description: + type: string + Settable: + type: array + items: + type: string + Path: + type: string + example: /dev/fuse + PluginEnv: + type: object + x-go-name: Env + required: + - Name + - Description + - Settable + - Value + properties: + Name: + type: string + Description: + type: string + Settable: + type: array + items: + type: string + Value: + type: string + PluginPrivilege: + description: | + Describes a permission the user has to accept upon installing + the plugin. + type: object + x-go-name: Privilege + properties: + Name: + type: string + example: network + Description: + type: string + Value: + type: array + items: + type: string + example: + - host + Plugin: + description: A plugin for the Engine API + type: object + x-go-name: Plugin + required: + - Settings + - Enabled + - Config + - Name + properties: + Id: + type: string + example: 5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078 + Name: + type: string + example: tiborvass/sample-volume-plugin + Enabled: + description: True if the plugin is running. False if the plugin is not running, only installed. + type: boolean + example: true + Settings: + description: user-configurable settings for the plugin. + type: object + x-go-name: Settings + required: + - Args + - Devices + - Env + - Mounts + properties: + Mounts: + type: array + items: + $ref: "#/components/schemas/PluginMount" + Env: + type: array + items: + type: string + example: + - DEBUG=0 + Args: + type: array + items: + type: string + Devices: + type: array + items: + $ref: "#/components/schemas/PluginDevice" + PluginReference: + description: plugin remote reference used to push/pull the plugin + type: string + x-go-name: PluginReference + example: localhost:5000/tiborvass/sample-volume-plugin:latest + Config: + description: The config of a plugin. + type: object + x-go-name: Config + required: + - Description + - Documentation + - Interface + - Entrypoint + - WorkDir + - Network + - Linux + - PidHost + - PropagatedMount + - IpcHost + - Mounts + - Env + - Args + properties: + Description: + type: string + example: A sample volume plugin for Docker + Documentation: + type: string + example: https://docs.docker.com/engine/extend/plugins/ + Interface: + description: The interface between Docker and the plugin + type: object + x-go-name: Interface + required: + - Types + - Socket + properties: + Types: + type: array + items: + type: string + x-go-type: + type: CapabilityID + example: + - docker.volumedriver/1.0 + Socket: + type: string + example: plugins.sock + ProtocolScheme: + type: string + example: some.protocol/v1.0 + description: Protocol to use for clients connecting to the plugin. + enum: + - "" + - moby.plugins.http/v1 + Entrypoint: + type: array + items: + type: string + example: + - /usr/bin/sample-volume-plugin + - /data + WorkDir: + type: string + example: /bin/ + User: + type: object + x-go-name: User + properties: + UID: + type: integer + format: uint32 + example: 1000 + GID: + type: integer + format: uint32 + example: 1000 + Network: + type: object + x-go-name: NetworkConfig + required: + - Type + properties: + Type: + type: string + example: host + Linux: + type: object + x-go-name: LinuxConfig + required: + - Capabilities + - AllowAllDevices + - Devices + properties: + Capabilities: + type: array + items: + type: string + example: + - CAP_SYS_ADMIN + - CAP_SYSLOG + AllowAllDevices: + type: boolean + example: false + Devices: + type: array + items: + $ref: "#/components/schemas/PluginDevice" + PropagatedMount: + type: string + example: /mnt/volumes + IpcHost: + type: boolean + example: false + PidHost: + type: boolean + example: false + Mounts: + type: array + items: + $ref: "#/components/schemas/PluginMount" + Env: + type: array + items: + $ref: "#/components/schemas/PluginEnv" + example: + - Name: DEBUG + Description: If set, prints debug messages + Settable: null + Value: "0" + Args: + type: object + x-go-name: Args + required: + - Name + - Description + - Settable + - Value + properties: + Name: + type: string + example: args + Description: + type: string + example: command line arguments + Settable: + type: array + items: + type: string + Value: + type: array + items: + type: string + rootfs: + type: object + x-go-name: RootFS + properties: + type: + type: string + example: layers + diff_ids: + type: array + items: + type: string + example: + - sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887 + - sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8 + ObjectVersion: + description: | + The version number of the object such as node, service, etc. This is needed + to avoid conflicting writes. The client must send the version number along + with the modified specification when updating these objects. + + This approach ensures safe concurrency and determinism in that the change + on the object may not be applied if the version number has changed from the + last read. In other words, if two update requests specify the same base + version, only one of the requests can succeed. As a result, two separate + update requests that happen at the same time will not unintentionally + overwrite each other. + type: object + properties: + Index: + type: integer + format: uint64 + example: 373531 + NodeSpec: + type: object + properties: + Name: + description: Name for the node. + type: string + example: my-node + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + Role: + description: Role of the node. + type: string + enum: + - worker + - manager + example: manager + Availability: + description: Availability of the node. + type: string + enum: + - active + - pause + - drain + example: active + example: + Availability: active + Name: node-name + Role: manager + Labels: + foo: bar + Node: + type: object + properties: + ID: + type: string + example: 24ifsmvkjbyhk + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + description: | + Date and time at which the node was added to the swarm in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2016-08-18T10:44:24.496525531Z + UpdatedAt: + description: | + Date and time at which the node was last updated in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2017-08-09T07:09:37.632105588Z + Spec: + $ref: "#/components/schemas/NodeSpec" + Description: + $ref: "#/components/schemas/NodeDescription" + Status: + $ref: "#/components/schemas/NodeStatus" + ManagerStatus: + $ref: "#/components/schemas/ManagerStatus" + NodeDescription: + description: | + NodeDescription encapsulates the properties of the Node as reported by the + agent. + type: object + properties: + Hostname: + type: string + example: bf3067039e47 + Platform: + $ref: "#/components/schemas/Platform" + Resources: + $ref: "#/components/schemas/ResourceObject" + Engine: + $ref: "#/components/schemas/EngineDescription" + TLSInfo: + $ref: "#/components/schemas/TLSInfo" + Platform: + description: | + Platform represents the platform (Arch/OS). + type: object + properties: + Architecture: + description: | + Architecture represents the hardware architecture (for example, + `x86_64`). + type: string + example: x86_64 + OS: + description: | + OS represents the Operating System (for example, `linux` or `windows`). + type: string + example: linux + EngineDescription: + description: EngineDescription provides information about an engine. + type: object + properties: + EngineVersion: + type: string + example: 17.06.0 + Labels: + type: object + additionalProperties: + type: string + example: + foo: bar + Plugins: + type: array + items: + type: object + properties: + Type: + type: string + Name: + type: string + example: + - Type: Log + Name: awslogs + - Type: Log + Name: fluentd + - Type: Log + Name: gcplogs + - Type: Log + Name: gelf + - Type: Log + Name: journald + - Type: Log + Name: json-file + - Type: Log + Name: splunk + - Type: Log + Name: syslog + - Type: Network + Name: bridge + - Type: Network + Name: host + - Type: Network + Name: ipvlan + - Type: Network + Name: macvlan + - Type: Network + Name: "null" + - Type: Network + Name: overlay + - Type: Volume + Name: local + - Type: Volume + Name: localhost:5000/vieux/sshfs:latest + - Type: Volume + Name: vieux/sshfs:latest + TLSInfo: + description: | + Information about the issuer of leaf TLS certificates and the trusted root + CA certificate. + type: object + properties: + TrustRoot: + description: | + The root CA certificate(s) that are used to validate leaf TLS + certificates. + type: string + CertIssuerSubject: + description: The base64-url-safe-encoded raw subject bytes of the issuer. + type: string + CertIssuerPublicKey: + description: | + The base64-url-safe-encoded raw public key bytes of the issuer. + type: string + example: + TrustRoot: | + -----BEGIN CERTIFICATE----- + MIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw + EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0 + MzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH + A0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf + 3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB + Af8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO + PQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz + pxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H + -----END CERTIFICATE----- + CertIssuerSubject: MBMxETAPBgNVBAMTCHN3YXJtLWNh + CertIssuerPublicKey: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A== + NodeStatus: + description: | + NodeStatus represents the status of a node. + + It provides the current status of the node, as seen by the manager. + type: object + properties: + State: + $ref: "#/components/schemas/NodeState" + Message: + type: string + example: "" + Addr: + description: IP address of the node. + type: string + example: 172.17.0.2 + NodeState: + description: NodeState represents the state of a node. + type: string + enum: + - unknown + - down + - ready + - disconnected + example: ready + ManagerStatus: + description: | + ManagerStatus represents the status of a manager. + + It provides the current status of a node's manager component, if the node + is a manager. + type: + - object + - "null" + properties: + Leader: + type: boolean + default: false + example: true + Reachability: + $ref: "#/components/schemas/Reachability" + Addr: + description: | + The IP address and port at which the manager is reachable. + type: string + example: 10.0.0.46:2377 + Reachability: + description: Reachability represents the reachability of a node. + type: string + enum: + - unknown + - unreachable + - reachable + example: reachable + SwarmSpec: + description: User modifiable swarm configuration. + type: object + properties: + Name: + description: Name of the swarm. + type: string + example: default + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.corp.type: production + com.example.corp.department: engineering + Orchestration: + description: Orchestration configuration. + type: + - object + - "null" + properties: + TaskHistoryRetentionLimit: + description: | + The number of historic tasks to keep per instance or node. If + negative, never remove completed or failed tasks. + type: integer + format: int64 + example: 10 + Raft: + description: Raft configuration. + type: object + properties: + SnapshotInterval: + description: The number of log entries between snapshots. + type: integer + format: uint64 + example: 10000 + KeepOldSnapshots: + description: | + The number of snapshots to keep beyond the current snapshot. + type: integer + format: uint64 + LogEntriesForSlowFollowers: + description: | + The number of log entries to keep around to sync up slow followers + after a snapshot is created. + type: integer + format: uint64 + example: 500 + ElectionTick: + description: | + The number of ticks that a follower will wait for a message from + the leader before becoming a candidate and starting an election. + `ElectionTick` must be greater than `HeartbeatTick`. + + A tick currently defaults to one second, so these translate + directly to seconds currently, but this is NOT guaranteed. + type: integer + example: 3 + HeartbeatTick: + description: | + The number of ticks between heartbeats. Every HeartbeatTick ticks, + the leader will send a heartbeat to the followers. + + A tick currently defaults to one second, so these translate + directly to seconds currently, but this is NOT guaranteed. + type: integer + example: 1 + Dispatcher: + description: Dispatcher configuration. + type: + - object + - "null" + properties: + HeartbeatPeriod: + description: | + The delay for an agent to send a heartbeat to the dispatcher. + type: integer + format: int64 + example: 5000000000 + CAConfig: + description: CA configuration. + type: + - object + - "null" + properties: + NodeCertExpiry: + description: The duration node certificates are issued for. + type: integer + format: int64 + example: 7776000000000000 + ExternalCAs: + description: | + Configuration for forwarding signing requests to an external + certificate authority. + type: array + items: + type: object + properties: + Protocol: + description: | + Protocol for communication with the external CA (currently + only `cfssl` is supported). + type: string + enum: + - cfssl + default: cfssl + URL: + description: | + URL where certificate signing requests should be sent. + type: string + Options: + description: | + An object with key/value pairs that are interpreted as + protocol-specific options for the external CA driver. + type: object + additionalProperties: + type: string + CACert: + description: | + The root CA certificate (in PEM format) this external CA uses + to issue TLS certificates (assumed to be to the current swarm + root CA certificate if not provided). + type: string + SigningCACert: + description: | + The desired signing CA certificate for all swarm node TLS leaf + certificates, in PEM format. + type: string + SigningCAKey: + description: | + The desired signing CA key for all swarm node TLS leaf certificates, + in PEM format. + type: string + ForceRotate: + description: | + An integer whose purpose is to force swarm to generate a new + signing CA certificate and key, if none have been specified in + `SigningCACert` and `SigningCAKey` + format: uint64 + type: integer + EncryptionConfig: + description: Parameters related to encryption-at-rest. + type: object + properties: + AutoLockManagers: + description: | + If set, generate a key and use it to lock data stored on the + managers. + type: boolean + example: false + TaskDefaults: + description: Defaults for creating tasks in this cluster. + type: object + properties: + LogDriver: + description: | + The log driver to use for tasks created in the orchestrator if + unspecified by a service. + + Updating this value only affects new tasks. Existing tasks continue + to use their previously configured log driver until recreated. + type: object + properties: + Name: + description: | + The log driver to use as a default for new tasks. + type: string + example: json-file + Options: + description: | + Driver-specific options for the selected log driver, specified + as key/value pairs. + type: object + additionalProperties: + type: string + example: + max-file: "10" + max-size: 100m + ClusterInfo: + description: | + ClusterInfo represents information about the swarm as is returned by the + "/info" endpoint. Join-tokens are not included. + type: + - object + - "null" + properties: + ID: + description: The ID of the swarm. + type: string + example: abajmipo7b4xz5ip2nrla6b11 + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + description: | + Date and time at which the swarm was initialised in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2016-08-18T10:44:24.496525531Z + UpdatedAt: + description: | + Date and time at which the swarm was last updated in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: string + format: dateTime + example: 2017-08-09T07:09:37.632105588Z + Spec: + $ref: "#/components/schemas/SwarmSpec" + TLSInfo: + $ref: "#/components/schemas/TLSInfo" + RootRotationInProgress: + description: | + Whether there is currently a root CA rotation in progress for the swarm + type: boolean + example: false + DataPathPort: + description: | + DataPathPort specifies the data path port number for data traffic. + Acceptable port range is 1024 to 49151. + If no port is set or is set to 0, the default port (4789) is used. + type: integer + format: uint32 + default: 4789 + example: 4789 + DefaultAddrPool: + description: | + Default Address Pool specifies default subnet pools for global scope + networks. + type: array + items: + type: string + format: CIDR + example: + - 10.10.0.0/16 + - 20.20.0.0/16 + SubnetSize: + description: | + SubnetSize specifies the subnet size of the networks created from the + default subnet pool. + type: integer + format: uint32 + maximum: 29 + default: 24 + example: 24 + JoinTokens: + description: | + JoinTokens contains the tokens workers and managers need to join the swarm. + type: object + properties: + Worker: + description: | + The token workers can use to join the swarm. + type: string + example: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx + Manager: + description: | + The token managers can use to join the swarm. + type: string + example: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 + Swarm: + type: object + allOf: + - $ref: "#/components/schemas/ClusterInfo" + - type: object + properties: + JoinTokens: + $ref: "#/components/schemas/JoinTokens" + TaskSpec: + description: User modifiable task configuration. + type: object + properties: + PluginSpec: + type: object + description: | + Plugin spec for the service. *(Experimental release only.)* + + + + + + + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + properties: + Name: + description: The name or 'alias' to use for the plugin. + type: string + Remote: + description: The plugin image reference to use. + type: string + Disabled: + description: Disable the plugin once scheduled. + type: boolean + PluginPrivilege: + type: array + items: + $ref: "#/components/schemas/PluginPrivilege" + ContainerSpec: + type: object + description: | + Container spec for the service. + + + + + + + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + properties: + Image: + description: The image name to use for the container + type: string + Labels: + description: User-defined key/value data. + type: object + additionalProperties: + type: string + Command: + description: The command to be run in the image. + type: array + items: + type: string + Args: + description: Arguments to the command. + type: array + items: + type: string + Hostname: + description: | + The hostname to use for the container, as a valid + [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. + type: string + Env: + description: | + A list of environment variables in the form `VAR=value`. + type: array + items: + type: string + Dir: + description: The working directory for commands to run in. + type: string + User: + description: The user inside the container. + type: string + Groups: + type: array + description: | + A list of additional groups that the container process will run as. + items: + type: string + Privileges: + type: object + description: Security options for the container + properties: + CredentialSpec: + type: object + description: CredentialSpec for managed service account (Windows only) + properties: + Config: + type: string + example: 0bt9dmxjvjiqermk6xrop3ekq + description: | + Load credential spec from a Swarm Config with the given ID. + The specified config must also be present in the Configs + field with the Runtime property set. + + + + + + + + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + File: + type: string + example: spec.json + description: | + Load credential spec from this file. The file is read by + the daemon, and must be present in the `CredentialSpecs` + subdirectory in the docker data directory, which defaults + to `C:\ProgramData\Docker\` on Windows. + + For example, specifying `spec.json` loads + `C:\ProgramData\Docker\CredentialSpecs\spec.json`. + + + + + + + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + Registry: + type: string + description: | + Load credential spec from this value in the Windows + registry. The specified registry value must be located in: + + `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` + + + + + + + + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + SELinuxContext: + type: object + description: SELinux labels of the container + properties: + Disable: + type: boolean + description: Disable SELinux + User: + type: string + description: SELinux user label + Role: + type: string + description: SELinux role label + Type: + type: string + description: SELinux type label + Level: + type: string + description: SELinux level label + Seccomp: + type: object + description: Options for configuring seccomp on the container + properties: + Mode: + type: string + enum: + - default + - unconfined + - custom + Profile: + description: The custom seccomp profile as a json object + type: string + AppArmor: + type: object + description: Options for configuring AppArmor on the container + properties: + Mode: + type: string + enum: + - default + - disabled + NoNewPrivileges: + type: boolean + description: Configuration of the no_new_privs bit in the container + TTY: + description: Whether a pseudo-TTY should be allocated. + type: boolean + OpenStdin: + description: Open `stdin` + type: boolean + ReadOnly: + description: Mount the container's root filesystem as read only. + type: boolean + Mounts: + description: | + Specification for mounts to be added to containers created as part + of the service. + type: array + items: + $ref: "#/components/schemas/Mount" + StopSignal: + description: Signal to stop the container. + type: string + StopGracePeriod: + description: | + Amount of time to wait for the container to terminate before + forcefully killing it. + type: integer + format: int64 + Healthcheck: + $ref: "#/components/schemas/HealthConfig" + Hosts: + type: array + description: | + A list of hostname/IP mappings to add to the container's `hosts` + file. The format of extra hosts is specified in the + [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) + man page: + + IP_address canonical_hostname [aliases...] + items: + type: string + DNSConfig: + description: | + Specification for DNS related configurations in resolver configuration + file (`resolv.conf`). + type: object + properties: + Nameservers: + description: The IP addresses of the name servers. + type: array + items: + type: string + Search: + description: A search list for host-name lookup. + type: array + items: + type: string + Options: + description: | + A list of internal resolver variables to be modified (e.g., + `debug`, `ndots:3`, etc.). + type: array + items: + type: string + Secrets: + description: | + Secrets contains references to zero or more secrets that will be + exposed to the service. + type: array + items: + type: object + properties: + File: + description: | + File represents a specific target that is backed by a file. + type: object + properties: + Name: + description: | + Name represents the final filename in the filesystem. + type: string + UID: + description: UID represents the file UID. + type: string + GID: + description: GID represents the file GID. + type: string + Mode: + description: Mode represents the FileMode of the file. + type: integer + format: uint32 + SecretID: + description: | + SecretID represents the ID of the specific secret that we're + referencing. + type: string + SecretName: + description: | + SecretName is the name of the secret that this references, + but this is just provided for lookup/display purposes. The + secret in the reference will be identified by its ID. + type: string + OomScoreAdj: + type: integer + format: int64 + description: | + An integer value containing the score given to the container in + order to tune OOM killer preferences. + example: 0 + Configs: + description: | + Configs contains references to zero or more configs that will be + exposed to the service. + type: array + items: + type: object + properties: + File: + description: | + File represents a specific target that is backed by a file. + + + + + + + > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive + type: object + properties: + Name: + description: | + Name represents the final filename in the filesystem. + type: string + UID: + description: UID represents the file UID. + type: string + GID: + description: GID represents the file GID. + type: string + Mode: + description: Mode represents the FileMode of the file. + type: integer + format: uint32 + Runtime: + description: | + Runtime represents a target that is not mounted into the + container but is used by the task + + + + + + + > **Note**: `Configs.File` and `Configs.Runtime` are mutually + > exclusive + type: object + ConfigID: + description: | + ConfigID represents the ID of the specific config that we're + referencing. + type: string + ConfigName: + description: | + ConfigName is the name of the config that this references, + but this is just provided for lookup/display purposes. The + config in the reference will be identified by its ID. + type: string + Isolation: + type: string + description: | + Isolation technology of the containers running the service. + (Windows only) + enum: + - default + - process + - hyperv + - "" + Init: + description: | + Run an init inside the container that forwards signals and reaps + processes. This field is omitted if empty, and the default (as + configured on the daemon) is used. + type: + - boolean + - "null" + Sysctls: + description: | + Set kernel namedspaced parameters (sysctls) in the container. + The Sysctls option on services accepts the same sysctls as the + are supported on containers. Note that while the same sysctls are + supported, no guarantees or checks are made about their + suitability for a clustered environment, and it's up to the user + to determine whether a given sysctl will work properly in a + Service. + type: object + additionalProperties: + type: string + CapabilityAdd: + type: array + description: | + A list of kernel capabilities to add to the default set + for the container. + items: + type: string + example: + - CAP_NET_RAW + - CAP_SYS_ADMIN + - CAP_SYS_CHROOT + - CAP_SYSLOG + CapabilityDrop: + type: array + description: | + A list of kernel capabilities to drop from the default set + for the container. + items: + type: string + example: + - CAP_NET_RAW + Ulimits: + description: | + A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`" + type: array + items: + type: object + properties: + Name: + description: Name of ulimit + type: string + Soft: + description: Soft limit + type: integer + Hard: + description: Hard limit + type: integer + NetworkAttachmentSpec: + description: | + Read-only spec type for non-swarm containers attached to swarm overlay + networks. + + + + + + + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + type: object + properties: + ContainerID: + description: ID of the container represented by this task + type: string + Resources: + description: | + Resource requirements which apply to each individual container created + as part of the service. + type: object + properties: + Limits: + allOf: + - $ref: "#/components/schemas/Limit" + - description: Define resources limits. + Reservations: + allOf: + - $ref: "#/components/schemas/ResourceObject" + - description: Define resources reservation. + SwapBytes: + description: | + Amount of swap in bytes - can only be used together with a memory limit. + If not specified, the default behaviour is to grant a swap space twice + as big as the memory limit. + Set to -1 to enable unlimited swap. + type: + - integer + - "null" + format: int64 + minimum: -1 + x-omitempty: true + MemorySwappiness: + description: | + Tune the service's containers' memory swappiness (0 to 100). + If not specified, defaults to the containers' OS' default, generally 60, + or whatever value was predefined in the image. + Set to -1 to unset a previously set value. + type: + - integer + - "null" + format: int64 + minimum: -1 + maximum: 100 + x-omitempty: true + RestartPolicy: + description: | + Specification for the restart policy which applies to containers + created as part of this service. + type: object + properties: + Condition: + description: Condition for restart. + type: string + enum: + - none + - on-failure + - any + Delay: + description: Delay between restart attempts. + type: integer + format: int64 + MaxAttempts: + description: | + Maximum attempts to restart a given container before giving up + (default value is 0, which is ignored). + type: integer + format: int64 + default: 0 + Window: + description: | + Windows is the time window used to evaluate the restart policy + (default value is 0, which is unbounded). + type: integer + format: int64 + default: 0 + Placement: + type: object + properties: + Constraints: + description: | + An array of constraint expressions to limit the set of nodes where + a task can be scheduled. Constraint expressions can either use a + _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find + nodes that satisfy every expression (AND match). Constraints can + match node or Docker Engine labels as follows: + + node attribute | matches | example + ---------------------|--------------------------------|----------------------------------------------- + `node.id` | Node ID | `node.id==2ivku8v2gvtg4` + `node.hostname` | Node hostname | `node.hostname!=node-2` + `node.role` | Node role (`manager`/`worker`) | `node.role==manager` + `node.platform.os` | Node operating system | `node.platform.os==windows` + `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` + `node.labels` | User-defined node labels | `node.labels.security==high` + `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04` + + `engine.labels` apply to Docker Engine labels like operating system, + drivers, etc. Swarm administrators add `node.labels` for operational + purposes by using the [`node update endpoint`](#operation/NodeUpdate). + type: array + items: + type: string + example: + - node.hostname!=node3.corp.example.com + - node.role!=manager + - node.labels.type==production + - node.platform.os==linux + - node.platform.arch==x86_64 + Preferences: + description: | + Preferences provide a way to make the scheduler aware of factors + such as topology. They are provided in order from highest to + lowest precedence. + type: array + items: + type: object + properties: + Spread: + type: object + properties: + SpreadDescriptor: + description: | + label descriptor, such as `engine.labels.az`. + type: string + example: + - Spread: + SpreadDescriptor: node.labels.datacenter + - Spread: + SpreadDescriptor: node.labels.rack + MaxReplicas: + description: | + Maximum number of replicas for per node (default value is 0, which + is unlimited) + type: integer + format: int64 + default: 0 + Platforms: + description: | + Platforms stores all the platforms that the service's image can + run on. This field is used in the platform filter for scheduling. + If empty, then the platform filter is off, meaning there are no + scheduling restrictions. + type: array + items: + $ref: "#/components/schemas/Platform" + ForceUpdate: + description: | + A counter that triggers an update even if no relevant parameters have + been changed. + type: integer + format: uint64 + Runtime: + description: | + Runtime is the type of runtime specified for the task executor. + type: string + Networks: + description: Specifies which networks the service should attach to. + type: array + items: + $ref: "#/components/schemas/NetworkAttachmentConfig" + LogDriver: + description: | + Specifies the log driver to use for tasks created from this spec. If + not present, the default one for the swarm will be used, finally + falling back to the engine default if not specified. + type: object + properties: + Name: + type: string + Options: + type: object + additionalProperties: + type: string + TaskState: + type: string + enum: + - new + - allocated + - pending + - assigned + - accepted + - preparing + - ready + - starting + - running + - complete + - shutdown + - failed + - rejected + - remove + - orphaned + ContainerStatus: + type: object + description: represents the status of a container. + properties: + ContainerID: + type: string + PID: + type: integer + ExitCode: + type: integer + PortStatus: + type: object + description: represents the port status of a task's host ports whose service has published host ports + properties: + Ports: + type: array + items: + $ref: "#/components/schemas/EndpointPortConfig" + TaskStatus: + type: object + description: represents the status of a task. + properties: + Timestamp: + type: string + format: dateTime + State: + $ref: "#/components/schemas/TaskState" + Message: + type: string + Err: + type: string + ContainerStatus: + $ref: "#/components/schemas/ContainerStatus" + PortStatus: + $ref: "#/components/schemas/PortStatus" + NetworkAttachment: + description: | + Specifies how a task is attached to a network, and the addresses the + task was assigned on that network. + type: object + properties: + Network: + $ref: "#/components/schemas/Network" + Addresses: + description: | + The IP addresses (in CIDR notation) assigned to the task on this + network. To maintain backward compatibility this field accepts CIDR + notation, but only the IP address is used. + type: array + items: + type: string + format: cidr + example: + Network: + ID: 4qvuz4ko70xaltuqbt8956gd1 + Addresses: + - 10.255.0.10/16 + Task: + type: object + properties: + ID: + description: The ID of the task. + type: string + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + type: string + format: dateTime + UpdatedAt: + type: string + format: dateTime + Name: + description: Name of the task. + type: string + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + Spec: + $ref: "#/components/schemas/TaskSpec" + ServiceID: + description: The ID of the service this task is part of. + type: string + Slot: + type: integer + NodeID: + description: The ID of the node that this task is on. + type: string + AssignedGenericResources: + $ref: "#/components/schemas/GenericResources" + Status: + $ref: "#/components/schemas/TaskStatus" + DesiredState: + $ref: "#/components/schemas/TaskState" + JobIteration: + allOf: + - $ref: "#/components/schemas/ObjectVersion" + - description: | + If the Service this Task belongs to is a job-mode service, contains + the JobIteration of the Service this Task was created for. Absent if + the Task was created for a Replicated or Global Service. + NetworksAttachments: + description: | + The networks that this task is attached to, and the addresses the + task was assigned on each of them. + type: array + items: + $ref: "#/components/schemas/NetworkAttachment" + example: + ID: 0kzzo1i0y4jz6027t0k7aezc7 + Version: + Index: 71 + CreatedAt: 2016-06-07T21:07:31.171892745Z + UpdatedAt: 2016-06-07T21:07:31.376370513Z + Spec: + ContainerSpec: + Image: redis + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: any + MaxAttempts: 0 + Placement: {} + ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz + Slot: 1 + NodeID: 60gvrl6tm78dmak4yl7srz94v + Status: + Timestamp: 2016-06-07T21:07:31.290032978Z + State: running + Message: started + ContainerStatus: + ContainerID: e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035 + PID: 677 + DesiredState: running + NetworksAttachments: + - Network: + ID: 4qvuz4ko70xaltuqbt8956gd1 + Version: + Index: 18 + CreatedAt: 2016-06-07T20:31:11.912919752Z + UpdatedAt: 2016-06-07T21:07:29.955277358Z + Spec: + Name: ingress + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + DriverState: + Name: overlay + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: default + Configs: + - Subnet: 10.255.0.0/16 + Gateway: 10.255.0.1 + Addresses: + - 10.255.0.10/16 + AssignedGenericResources: + - DiscreteResourceSpec: + Kind: SSD + Value: 3 + - NamedResourceSpec: + Kind: GPU + Value: UUID1 + - NamedResourceSpec: + Kind: GPU + Value: UUID2 + ServiceSpec: + description: User modifiable configuration for a service. + type: object + properties: + Name: + description: Name of the service. + type: string + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + TaskTemplate: + $ref: "#/components/schemas/TaskSpec" + Mode: + description: Scheduling mode for the service. + type: object + properties: + Replicated: + type: object + properties: + Replicas: + type: integer + format: int64 + Global: + type: object + ReplicatedJob: + description: | + The mode used for services with a finite number of tasks that run + to a completed state. + type: object + properties: + MaxConcurrent: + description: | + The maximum number of replicas to run simultaneously. + type: integer + format: int64 + default: 1 + TotalCompletions: + description: | + The total number of replicas desired to reach the Completed + state. If unset, will default to the value of `MaxConcurrent` + type: integer + format: int64 + GlobalJob: + description: | + The mode used for services which run a task to the completed state + on each valid node. + type: object + UpdateConfig: + description: Specification for the update strategy of the service. + type: object + properties: + Parallelism: + description: | + Maximum number of tasks to be updated in one iteration (0 means + unlimited parallelism). + type: integer + format: int64 + Delay: + description: Amount of time between updates, in nanoseconds. + type: integer + format: int64 + FailureAction: + description: | + Action to take if an updated task fails to run, or stops running + during the update. + type: string + enum: + - continue + - pause + - rollback + Monitor: + description: | + Amount of time to monitor each updated task for failures, in + nanoseconds. + type: integer + format: int64 + MaxFailureRatio: + description: | + The fraction of tasks that may fail during an update before the + failure action is invoked, specified as a floating point number + between 0 and 1. + type: number + default: 0 + Order: + description: | + The order of operations when rolling out an updated task. Either + the old task is shut down before the new task is started, or the + new task is started before the old task is shut down. + type: string + enum: + - stop-first + - start-first + RollbackConfig: + description: Specification for the rollback strategy of the service. + type: object + properties: + Parallelism: + description: | + Maximum number of tasks to be rolled back in one iteration (0 means + unlimited parallelism). + type: integer + format: int64 + Delay: + description: | + Amount of time between rollback iterations, in nanoseconds. + type: integer + format: int64 + FailureAction: + description: | + Action to take if an rolled back task fails to run, or stops + running during the rollback. + type: string + enum: + - continue + - pause + Monitor: + description: | + Amount of time to monitor each rolled back task for failures, in + nanoseconds. + type: integer + format: int64 + MaxFailureRatio: + description: | + The fraction of tasks that may fail during a rollback before the + failure action is invoked, specified as a floating point number + between 0 and 1. + type: number + default: 0 + Order: + description: | + The order of operations when rolling back a task. Either the old + task is shut down before the new task is started, or the new task + is started before the old task is shut down. + type: string + enum: + - stop-first + - start-first + Networks: + description: | + Specifies which networks the service should attach to. + + Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + type: array + items: + $ref: "#/components/schemas/NetworkAttachmentConfig" + EndpointSpec: + $ref: "#/components/schemas/EndpointSpec" + EndpointPortConfig: + type: object + properties: + Name: + type: string + Protocol: + type: string + enum: + - tcp + - udp + - sctp + TargetPort: + description: The port inside the container. + type: integer + PublishedPort: + description: The port on the swarm hosts. + type: integer + PublishMode: + description: | + The mode in which port is published. + + + + + + + - "ingress" makes the target port accessible on every node, + regardless of whether there is a task for the service running on + that node or not. + - "host" bypasses the routing mesh and publish the port directly on + the swarm node where that service is running. + type: string + enum: + - ingress + - host + default: ingress + example: ingress + EndpointSpec: + description: Properties that can be configured to access and load balance a service. + type: object + properties: + Mode: + description: | + The mode of resolution to use for internal load balancing between tasks. + type: string + enum: + - vip + - dnsrr + default: vip + Ports: + description: | + List of exposed ports that this service is accessible on from the + outside. Ports can only be provided if `vip` resolution mode is used. + type: array + items: + $ref: "#/components/schemas/EndpointPortConfig" + Service: + type: object + properties: + ID: + type: string + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + type: string + format: dateTime + UpdatedAt: + type: string + format: dateTime + Spec: + $ref: "#/components/schemas/ServiceSpec" + Endpoint: + type: object + properties: + Spec: + $ref: "#/components/schemas/EndpointSpec" + Ports: + type: array + items: + $ref: "#/components/schemas/EndpointPortConfig" + VirtualIPs: + type: array + items: + type: object + properties: + NetworkID: + type: string + Addr: + type: string + UpdateStatus: + description: The status of a service update. + type: object + properties: + State: + type: string + enum: + - updating + - paused + - completed + StartedAt: + type: string + format: dateTime + CompletedAt: + type: string + format: dateTime + Message: + type: string + ServiceStatus: + description: | + The status of the service's tasks. Provided only when requested as + part of a ServiceList operation. + type: object + properties: + RunningTasks: + description: | + The number of tasks for the service currently in the Running state. + type: integer + format: uint64 + example: 7 + DesiredTasks: + description: | + The number of tasks for the service desired to be running. + For replicated services, this is the replica count from the + service spec. For global services, this is computed by taking + count of all tasks for the service with a Desired State other + than Shutdown. + type: integer + format: uint64 + example: 10 + CompletedTasks: + description: | + The number of tasks for a job that are in the Completed state. + This field must be cross-referenced with the service type, as the + value of 0 may mean the service is not in a job mode, or it may + mean the job-mode service has no tasks yet Completed. + type: integer + format: uint64 + JobStatus: + description: | + The status of the service when it is in one of ReplicatedJob or + GlobalJob modes. Absent on Replicated and Global mode services. The + JobIteration is an ObjectVersion, but unlike the Service's version, + does not need to be sent with an update request. + type: object + properties: + JobIteration: + allOf: + - $ref: "#/components/schemas/ObjectVersion" + - description: | + JobIteration is a value increased each time a Job is executed, + successfully or otherwise. "Executed", in this case, means the + job as a whole has been started, not that an individual Task has + been launched. A job is "Executed" when its ServiceSpec is + updated. JobIteration can be used to disambiguate Tasks belonging + to different executions of a job. Though JobIteration will + increase with each subsequent execution, it may not necessarily + increase by 1, and so JobIteration should not be used to + LastExecution: + description: | + The last time, as observed by the server, that this job was + started. + type: string + format: dateTime + example: + ID: 9mnpnzenvg8p8tdbtq4wvbkcz + Version: + Index: 19 + CreatedAt: 2016-06-07T21:05:51.880065305Z + UpdatedAt: 2016-06-07T21:07:29.962229872Z + Spec: + Name: hopeful_cori + TaskTemplate: + ContainerSpec: + Image: redis + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: any + MaxAttempts: 0 + Placement: {} + ForceUpdate: 0 + Mode: + Replicated: + Replicas: 1 + UpdateConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: pause + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Mode: vip + Ports: + - Protocol: tcp + TargetPort: 6379 + PublishedPort: 30001 + Endpoint: + Spec: + Mode: vip + Ports: + - Protocol: tcp + TargetPort: 6379 + PublishedPort: 30001 + Ports: + - Protocol: tcp + TargetPort: 6379 + PublishedPort: 30001 + VirtualIPs: + - NetworkID: 4qvuz4ko70xaltuqbt8956gd1 + Addr: 10.255.0.2/16 + - NetworkID: 4qvuz4ko70xaltuqbt8956gd1 + Addr: 10.255.0.3/16 + ImageDeleteResponseItem: + type: object + x-go-name: DeleteResponse + properties: + Untagged: + description: The image ID of an image that was untagged + type: string + Deleted: + description: The image ID of an image that was deleted + type: string + ServiceCreateResponse: + type: object + description: | + contains the information returned to a client on the + creation of a new service. + properties: + ID: + description: The ID of the created service. + type: string + example: ak7w3gjqoa3kuz8xcpnyy0pvl + Warnings: + description: | + Optional warning message. + + FIXME(thaJeztah): this should have "omitempty" in the generated type. + type: + - array + - "null" + items: + type: string + example: + - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ServiceUpdateResponse: + type: object + properties: + Warnings: + description: Optional warning messages + type: array + items: + type: string + example: + Warnings: + - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ContainerInspectResponse: + type: object + title: ContainerInspectResponse + x-go-name: InspectResponse + properties: + Id: + description: The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). + type: string + x-go-name: ID + minLength: 64 + maxLength: 64 + pattern: ^[0-9a-fA-F]{64}$ + example: aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf + Created: + description: |- + Date and time at which the container was created, formatted in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: + - string + - "null" + format: dateTime + example: 2025-02-17T17:43:39.64001363Z + Path: + description: The path to the command being run + type: string + example: /bin/sh + Args: + description: The arguments to the command being run + type: array + items: + type: string + example: + - -c + - exit 9 + State: + $ref: "#/components/schemas/ContainerState" + Image: + description: The ID (digest) of the image that this container was created from. + type: string + example: sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 + ResolvConfPath: + description: |- + Location of the `/etc/resolv.conf` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: string + example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf + HostnamePath: + description: |- + Location of the `/etc/hostname` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: string + example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname + HostsPath: + description: |- + Location of the `/etc/hosts` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: string + example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts + LogPath: + description: |- + Location of the file used to buffer the container's logs. Depending on + the logging-driver used for the container, this field may be omitted. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: + - string + - "null" + example: /var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log + Name: + description: |- + The name associated with this container. + + For historic reasons, the name may be prefixed with a forward-slash (`/`). + type: string + example: /funny_chatelet + RestartCount: + description: |- + Number of times the container was restarted since it was created, + or since daemon was started. + type: integer + example: 0 + Driver: + description: |- + The storage-driver used for the container's filesystem (graph-driver + or snapshotter). + type: string + example: overlayfs + Platform: + description: |- + The platform (operating system) for which the container was created. + + This field was introduced for the experimental "LCOW" (Linux Containers + On Windows) features, which has been removed. In most cases, this field + is equal to the host's operating system (`linux` or `windows`). + type: string + example: linux + ImageManifestDescriptor: + allOf: + - $ref: "#/components/schemas/OCIDescriptor" + - description: |- + OCI descriptor of the platform-specific manifest of the image + the container was created from. + + Note: Only available if the daemon provides a multi-platform + image store. + MountLabel: + description: SELinux mount label set for the container. + type: string + example: "" + ProcessLabel: + description: SELinux process label set for the container. + type: string + example: "" + AppArmorProfile: + description: The AppArmor profile set for the container. + type: string + example: "" + ExecIDs: + description: IDs of exec instances that are running in the container. + type: + - array + - "null" + items: + type: string + example: + - b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca + - 3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4 + HostConfig: + $ref: "#/components/schemas/HostConfig" + GraphDriver: + allOf: + - $ref: "#/components/schemas/DriverData" + - anyOf: + - {} + - type: "null" + Storage: + allOf: + - $ref: "#/components/schemas/Storage" + - anyOf: + - {} + - type: "null" + SizeRw: + description: |- + The size of files that have been created or changed by this container. + + This field is omitted by default, and only set when size is requested + in the API request. + type: + - integer + - "null" + format: int64 + example: "122880" + SizeRootFs: + description: |- + The total size of all files in the read-only layers from the image + that the container uses. These layers can be shared between containers. + + This field is omitted by default, and only set when size is requested + in the API request. + type: + - integer + - "null" + format: int64 + example: "1653948416" + Mounts: + description: List of mounts used by the container. + type: array + items: + $ref: "#/components/schemas/MountPoint" + Config: + $ref: "#/components/schemas/ContainerConfig" + NetworkSettings: + $ref: "#/components/schemas/NetworkSettings" + ContainerSummary: + type: object + properties: + Id: + description: The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). + type: string + x-go-name: ID + minLength: 64 + maxLength: 64 + pattern: ^[0-9a-fA-F]{64}$ + example: aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf + Names: + description: |- + The names associated with this container. Most containers have a single + name, but when using legacy "links", the container can have multiple + names. + + For historic reasons, names are prefixed with a forward-slash (`/`). + type: array + items: + type: string + example: + - /funny_chatelet + Image: + description: |- + The name or ID of the image used to create the container. + + This field shows the image reference as was specified when creating the container, + which can be in its canonical form (e.g., `docker.io/library/ubuntu:latest` + or `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`), + short form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`). + + The content of this field can be updated at runtime if the image used to + create the container is untagged, in which case the field is updated to + contain the the image ID (digest) it was resolved to in its canonical, + non-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`). + type: string + example: docker.io/library/ubuntu:latest + ImageID: + description: The ID (digest) of the image that this container was created from. + type: string + example: sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 + ImageManifestDescriptor: + allOf: + - $ref: "#/components/schemas/OCIDescriptor" + - anyOf: + - description: | + OCI descriptor of the platform-specific manifest of the image + the container was created from. + + Note: Only available if the daemon provides a multi-platform + image store. + + This field is not populated in the `GET /system/df` endpoint. + - type: "null" + Command: + description: Command to run when starting the container + type: string + example: /bin/bash + Created: + description: |- + Date and time at which the container was created as a Unix timestamp + (number of seconds since EPOCH). + type: integer + format: int64 + example: "1739811096" + Ports: + description: Port-mappings for the container. + type: array + items: + $ref: "#/components/schemas/PortSummary" + SizeRw: + description: |- + The size of files that have been created or changed by this container. + + This field is omitted by default, and only set when size is requested + in the API request. + type: + - integer + - "null" + format: int64 + example: "122880" + SizeRootFs: + description: |- + The total size of all files in the read-only layers from the image + that the container uses. These layers can be shared between containers. + + This field is omitted by default, and only set when size is requested + in the API request. + type: + - integer + - "null" + format: int64 + example: "1653948416" + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.vendor: Acme + com.example.license: GPL + com.example.version: "1.0" + State: + description: | + The state of this container. + type: string + enum: + - created + - running + - paused + - restarting + - exited + - removing + - dead + example: running + Status: + description: Additional human-readable status of this container (e.g. `Exit 0`) + type: string + example: Up 4 days + HostConfig: + type: object + description: |- + Summary of host-specific runtime information of the container. This + is a reduced set of information in the container's "HostConfig" as + available in the container "inspect" response. + properties: + NetworkMode: + description: |- + Networking mode (`host`, `none`, `container:`) or name of the + primary network the container is using. + + This field is primarily for backward compatibility. The container + can be connected to multiple networks for which information can be + found in the `NetworkSettings.Networks` field, which enumerates + settings per network. + type: string + example: mynetwork + Annotations: + description: Arbitrary key-value metadata attached to the container. + type: + - object + - "null" + additionalProperties: + type: string + example: + io.kubernetes.docker.type: container + io.kubernetes.sandbox.id: 3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3 + NetworkSettings: + description: Summary of the container's network settings + type: object + properties: + Networks: + type: object + description: |- + Summary of network-settings for each network the container is + attached to. + additionalProperties: + $ref: "#/components/schemas/EndpointSettings" + Mounts: + type: array + description: List of mounts used by the container. + items: + $ref: "#/components/schemas/MountPoint" + Health: + type: object + description: |- + Summary of health status + + Added in v1.52, before that version all container summary not include Health. + After this attribute introduced, it includes containers with no health checks configured, + or containers that are not running with none + properties: + Status: + type: string + description: the health status of the container + enum: + - none + - starting + - healthy + - unhealthy + example: healthy + FailingStreak: + description: FailingStreak is the number of consecutive failures + type: integer + example: 0 + ContainersDiskUsage: + type: object + x-go-name: DiskUsage + x-go-package: github.com/moby/moby/api/types/container + description: | + represents system data usage information for container resources. + properties: + ActiveCount: + description: | + Count of active containers. + type: integer + format: int64 + example: 1 + TotalCount: + description: | + Count of all containers. + type: integer + format: int64 + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive containers. + type: integer + format: int64 + example: 12345678 + TotalSize: + description: | + Disk space in use by containers. + type: integer + format: int64 + example: 98765432 + Items: + description: | + List of container summaries. + type: array + x-omitempty: true + items: + x-go-type: + type: Summary + Driver: + description: Driver represents a driver (network, logging, secrets). + type: object + required: + - Name + properties: + Name: + description: Name of the driver. + type: string + example: some-driver + Options: + description: Key/value map of driver-specific options. + type: object + additionalProperties: + type: string + example: + OptionA: value for driver-specific option A + OptionB: value for driver-specific option B + SecretSpec: + type: object + properties: + Name: + description: User-defined name of the secret. + type: string + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-value + com.example.some-other-label: some-other-value + Data: + description: | + Data is the data to store as a secret, formatted as a standard base64-encoded + ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. + It must be empty if the Driver field is set, in which case the data is + loaded from an external secret store. The maximum allowed size is 500KB, + as defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize). + + This field is only used to _create_ a secret, and is not returned by + other endpoints. + type: string + example: "" + Driver: + allOf: + - $ref: "#/components/schemas/Driver" + - description: | + Name of the secrets driver used to fetch the secret's value from an + external secret store. + Templating: + allOf: + - $ref: "#/components/schemas/Driver" + - description: | + Templating driver, if applicable + + Templating controls whether and how to evaluate the config payload as + a template. If no driver is set, no templating is used. + Secret: + type: object + properties: + ID: + type: string + example: blt1owaxmitz71s9v5zh81zun + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + type: string + format: dateTime + example: 2017-07-20T13:55:28.678958722Z + UpdatedAt: + type: string + format: dateTime + example: 2017-07-20T13:55:28.678958722Z + Spec: + $ref: "#/components/schemas/SecretSpec" + ConfigSpec: + type: object + properties: + Name: + description: User-defined name of the config. + type: string + Labels: + description: User-defined key/value metadata. + type: object + additionalProperties: + type: string + Data: + description: | + Data is the data to store as a config, formatted as a standard base64-encoded + ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. + The maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize). + type: string + Templating: + allOf: + - $ref: "#/components/schemas/Driver" + - description: | + Templating driver, if applicable + + Templating controls whether and how to evaluate the config payload as + a template. If no driver is set, no templating is used. + Config: + type: object + properties: + ID: + type: string + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + type: string + format: dateTime + UpdatedAt: + type: string + format: dateTime + Spec: + $ref: "#/components/schemas/ConfigSpec" + ContainerState: + description: | + ContainerState stores container's running state. It's part of ContainerJSONBase + and will be returned by the "inspect" command. + type: + - object + - "null" + properties: + Status: + description: | + String representation of the container state. Can be one of "created", + "running", "paused", "restarting", "removing", "exited", or "dead". + type: string + enum: + - created + - running + - paused + - restarting + - removing + - exited + - dead + example: running + Running: + description: | + Whether this container is running. + + Note that a running container can be _paused_. The `Running` and `Paused` + booleans are not mutually exclusive: + + When pausing a container (on Linux), the freezer cgroup is used to suspend + all processes in the container. Freezing the process requires the process to + be running. As a result, paused containers are both `Running` _and_ `Paused`. + + Use the `Status` field instead to determine if a container's state is "running". + type: boolean + example: true + Paused: + description: Whether this container is paused. + type: boolean + example: false + Restarting: + description: Whether this container is restarting. + type: boolean + example: false + OOMKilled: + description: | + Whether a process within this container has been killed because it ran + out of memory since the container was last started. + type: boolean + example: false + Dead: + type: boolean + example: false + Pid: + description: The process ID of this container + type: integer + example: 1234 + ExitCode: + description: The last exit code of this container + type: integer + example: 0 + Error: + type: string + StartedAt: + description: The time when this container was last started. + type: string + example: 2020-01-06T09:06:59.461876391Z + FinishedAt: + description: The time when this container last exited. + type: string + example: 2020-01-06T09:07:59.461876391Z + Health: + $ref: "#/components/schemas/Health" + ContainerCreateResponse: + description: OK response to ContainerCreate operation + type: object + title: ContainerCreateResponse + x-go-name: CreateResponse + required: + - Id + - Warnings + properties: + Id: + description: The ID of the created container + type: string + example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 + Warnings: + description: Warnings encountered when creating the container + type: array + items: + type: string + example: [] + ContainerUpdateResponse: + type: object + title: ContainerUpdateResponse + x-go-name: UpdateResponse + description: Response for a successful container-update. + properties: + Warnings: + type: array + description: Warnings encountered when updating the container. + items: + type: string + example: + - Published ports are discarded when using host network mode + ContainerStatsResponse: + description: | + Statistics sample for a container. + type: object + x-go-name: StatsResponse + title: ContainerStatsResponse + properties: + id: + description: | + ID of the container for which the stats were collected. + type: + - string + - "null" + example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 + name: + description: | + Name of the container for which the stats were collected. + type: + - string + - "null" + example: boring_wozniak + os_type: + description: | + OSType is the OS of the container ("linux" or "windows") to allow + platform-specific handling of stats. + type: + - string + - "null" + example: linux + read: + description: | + Date and time at which this sample was collected. + The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + with nano-seconds. + type: string + format: date-time + example: 2025-01-16T13:55:22.165243637Z + cpu_stats: + $ref: "#/components/schemas/ContainerCPUStats" + memory_stats: + $ref: "#/components/schemas/ContainerMemoryStats" + networks: + description: | + Network statistics for the container per interface. + + This field is omitted if the container has no networking enabled. + additionalProperties: + $ref: "#/components/schemas/ContainerNetworkStats" + example: + eth0: + rx_bytes: 5338 + rx_dropped: 0 + rx_errors: 0 + rx_packets: 36 + tx_bytes: 648 + tx_dropped: 0 + tx_errors: 0 + tx_packets: 8 + eth5: + rx_bytes: 4641 + rx_dropped: 0 + rx_errors: 0 + rx_packets: 26 + tx_bytes: 690 + tx_dropped: 0 + tx_errors: 0 + tx_packets: 9 + pids_stats: + $ref: "#/components/schemas/ContainerPidsStats" + blkio_stats: + $ref: "#/components/schemas/ContainerBlkioStats" + num_procs: + description: | + The number of processors on the system. + + This field is Windows-specific and always zero for Linux containers. + type: integer + format: uint32 + example: 16 + storage_stats: + $ref: "#/components/schemas/ContainerStorageStats" + preread: + description: | + Date and time at which this first sample was collected. This field + is not propagated if the "one-shot" option is set. If the "one-shot" + option is set, this field may be omitted, empty, or set to a default + date (`0001-01-01T00:00:00Z`). + + The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + with nano-seconds. + type: string + format: date-time + example: 2025-01-16T13:55:21.160452595Z + precpu_stats: + $ref: "#/components/schemas/ContainerCPUStats" + ContainerBlkioStats: + description: | + BlkioStats stores all IO service stats for data read and write. + + This type is Linux-specific and holds many fields that are specific to cgroups v1. + On a cgroup v2 host, all fields other than `io_service_bytes_recursive` + are omitted or `null`. + + This type is only populated on Linux and omitted for Windows containers. + type: + - object + - "null" + x-go-name: BlkioStats + properties: + io_service_bytes_recursive: + type: array + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_serviced_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_queue_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_service_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_wait_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_merged_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + io_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + sectors_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + type: + - array + - "null" + items: + $ref: "#/components/schemas/ContainerBlkioStatEntry" + example: + io_service_bytes_recursive: + - major: 254 + minor: 0 + op: read + value: 7593984 + - major: 254 + minor: 0 + op: write + value: 100 + io_serviced_recursive: null + io_queue_recursive: null + io_service_time_recursive: null + io_wait_time_recursive: null + io_merged_recursive: null + io_time_recursive: null + sectors_recursive: null + ContainerBlkioStatEntry: + description: | + Blkio stats entry. + + This type is Linux-specific and omitted for Windows containers. + type: + - object + - "null" + x-go-name: BlkioStatEntry + properties: + major: + type: integer + format: uint64 + example: 254 + minor: + type: integer + format: uint64 + example: 0 + op: + type: string + example: read + value: + type: integer + format: uint64 + example: 7593984 + ContainerCPUStats: + description: | + CPU related info of the container + type: + - object + - "null" + x-go-name: CPUStats + properties: + cpu_usage: + $ref: "#/components/schemas/ContainerCPUUsage" + system_cpu_usage: + description: | + System Usage. + + This field is Linux-specific and omitted for Windows containers. + type: + - integer + - "null" + format: uint64 + example: 5 + online_cpus: + description: | + Number of online CPUs. + + This field is Linux-specific and omitted for Windows containers. + type: + - integer + - "null" + format: uint32 + example: 5 + throttling_data: + $ref: "#/components/schemas/ContainerThrottlingData" + ContainerCPUUsage: + description: | + All CPU stats aggregated since container inception. + type: + - object + - "null" + x-go-name: CPUUsage + properties: + total_usage: + description: | + Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows). + type: integer + format: uint64 + example: 29912000 + percpu_usage: + description: | + Total CPU time (in nanoseconds) consumed per core (Linux). + + This field is Linux-specific when using cgroups v1. It is omitted + when using cgroups v2 and Windows containers. + type: + - array + - "null" + items: + type: integer + format: uint64 + example: 29912000 + usage_in_kernelmode: + description: | + Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux), + or time spent (in 100's of nanoseconds) by all container processes in + kernel mode (Windows). + + Not populated for Windows containers using Hyper-V isolation. + type: integer + format: uint64 + example: 21994000 + usage_in_usermode: + description: | + Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux), + or time spent (in 100's of nanoseconds) by all container processes in + kernel mode (Windows). + + Not populated for Windows containers using Hyper-V isolation. + type: integer + format: uint64 + example: 7918000 + ContainerPidsStats: + description: | + PidsStats contains Linux-specific stats of a container's process-IDs (PIDs). + + This type is Linux-specific and omitted for Windows containers. + type: + - object + - "null" + x-go-name: PidsStats + properties: + current: + description: | + Current is the number of PIDs in the cgroup. + type: + - integer + - "null" + format: uint64 + example: 5 + limit: + description: | + Limit is the hard limit on the number of pids in the cgroup. + A "Limit" of 0 means that there is no limit. + type: + - integer + - "null" + format: uint64 + example: "18446744073709551615" + ContainerThrottlingData: + description: | + CPU throttling stats of the container. + + This type is Linux-specific and omitted for Windows containers. + type: + - object + - "null" + x-go-name: ThrottlingData + properties: + periods: + description: | + Number of periods with throttling active. + type: integer + format: uint64 + example: 0 + throttled_periods: + description: | + Number of periods when the container hit its throttling limit. + type: integer + format: uint64 + example: 0 + throttled_time: + description: | + Aggregated time (in nanoseconds) the container was throttled for. + type: integer + format: uint64 + example: 0 + ContainerMemoryStats: + description: | + Aggregates all memory stats since container inception on Linux. + Windows returns stats for commit and private working set only. + type: object + x-go-name: MemoryStats + properties: + usage: + description: | + Current `res_counter` usage for memory. + + This field is Linux-specific and omitted for Windows containers. + type: + - integer + - "null" + format: uint64 + example: 0 + max_usage: + description: | + Maximum usage ever recorded. + + This field is Linux-specific and only supported on cgroups v1. + It is omitted when using cgroups v2 and for Windows containers. + type: + - integer + - "null" + format: uint64 + example: 0 + stats: + description: | + All the stats exported via memory.stat. + + The fields in this object differ between cgroups v1 and v2. + On cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available. + On cgroups v2, fields such as `file`, `anon`, `inactive_file` are available. + + This field is Linux-specific and omitted for Windows containers. + type: object + additionalProperties: + type: + - integer + - "null" + format: uint64 + example: + active_anon: 1572864 + active_file: 5115904 + anon: 1572864 + anon_thp: 0 + file: 7626752 + file_dirty: 0 + file_mapped: 2723840 + file_writeback: 0 + inactive_anon: 0 + inactive_file: 2510848 + kernel_stack: 16384 + pgactivate: 0 + pgdeactivate: 0 + pgfault: 2042 + pglazyfree: 0 + pglazyfreed: 0 + pgmajfault: 45 + pgrefill: 0 + pgscan: 0 + pgsteal: 0 + shmem: 0 + slab: 1180928 + slab_reclaimable: 725576 + slab_unreclaimable: 455352 + sock: 0 + thp_collapse_alloc: 0 + thp_fault_alloc: 1 + unevictable: 0 + workingset_activate: 0 + workingset_nodereclaim: 0 + workingset_refault: 0 + failcnt: + description: | + Number of times memory usage hits limits. + + This field is Linux-specific and only supported on cgroups v1. + It is omitted when using cgroups v2 and for Windows containers. + type: + - integer + - "null" + format: uint64 + example: 0 + limit: + description: | + This field is Linux-specific and omitted for Windows containers. + type: + - integer + - "null" + format: uint64 + example: 8217579520 + commitbytes: + description: | + Committed bytes. + + This field is Windows-specific and omitted for Linux containers. + type: + - integer + - "null" + format: uint64 + example: 0 + commitpeakbytes: + description: | + Peak committed bytes. + + This field is Windows-specific and omitted for Linux containers. + type: + - integer + - "null" + format: uint64 + example: 0 + privateworkingset: + description: | + Private working set. + + This field is Windows-specific and omitted for Linux containers. + type: + - integer + - "null" + format: uint64 + example: 0 + ContainerNetworkStats: + description: | + Aggregates the network stats of one container + type: + - object + - "null" + x-go-name: NetworkStats + properties: + rx_bytes: + description: | + Bytes received. Windows and Linux. + type: integer + format: uint64 + example: 5338 + rx_packets: + description: | + Packets received. Windows and Linux. + type: integer + format: uint64 + example: 36 + rx_errors: + description: | + Received errors. Not used on Windows. + + This field is Linux-specific and always zero for Windows containers. + type: integer + format: uint64 + example: 0 + rx_dropped: + description: | + Incoming packets dropped. Windows and Linux. + type: integer + format: uint64 + example: 0 + tx_bytes: + description: | + Bytes sent. Windows and Linux. + type: integer + format: uint64 + example: 1200 + tx_packets: + description: | + Packets sent. Windows and Linux. + type: integer + format: uint64 + example: 12 + tx_errors: + description: | + Sent errors. Not used on Windows. + + This field is Linux-specific and always zero for Windows containers. + type: integer + format: uint64 + example: 0 + tx_dropped: + description: | + Outgoing packets dropped. Windows and Linux. + type: integer + format: uint64 + example: 0 + endpoint_id: + description: | + Endpoint ID. Not used on Linux. + + This field is Windows-specific and omitted for Linux containers. + type: + - string + - "null" + instance_id: + description: | + Instance ID. Not used on Linux. + + This field is Windows-specific and omitted for Linux containers. + type: + - string + - "null" + ContainerStorageStats: + description: | + StorageStats is the disk I/O stats for read/write on Windows. + + This type is Windows-specific and omitted for Linux containers. + type: + - object + - "null" + x-go-name: StorageStats + properties: + read_count_normalized: + type: + - integer + - "null" + format: uint64 + example: 7593984 + read_size_bytes: + type: + - integer + - "null" + format: uint64 + example: 7593984 + write_count_normalized: + type: + - integer + - "null" + format: uint64 + example: 7593984 + write_size_bytes: + type: + - integer + - "null" + format: uint64 + example: 7593984 + ContainerTopResponse: + type: object + x-go-name: TopResponse + title: ContainerTopResponse + description: Container "top" response. + properties: + Titles: + description: The ps column titles + type: array + items: + type: string + example: + Titles: + - UID + - PID + - PPID + - C + - STIME + - TTY + - TIME + - CMD + Processes: + description: |- + Each process running in the container, where each process + is an array of values corresponding to the titles. + type: array + items: + type: array + items: + type: string + example: + Processes: + - - root + - "13642" + - "882" + - "0" + - 17:03 + - pts/0 + - 00:00:00 + - /bin/bash + - - root + - "13735" + - "13642" + - "0" + - 17:06 + - pts/0 + - 00:00:00 + - sleep 10 + ContainerWaitResponse: + description: OK response to ContainerWait operation + type: object + x-go-name: WaitResponse + title: ContainerWaitResponse + required: + - StatusCode + properties: + StatusCode: + description: Exit code of the container + type: integer + format: int64 + Error: + $ref: "#/components/schemas/ContainerWaitExitError" + ContainerWaitExitError: + description: container waiting error, if any + type: object + x-go-name: WaitExitError + properties: + Message: + description: Details of an error + type: string + SystemVersion: + type: object + description: | + Response of Engine API: GET "/version" + properties: + Platform: + type: object + required: + - Name + properties: + Name: + type: string + Components: + type: array + description: | + Information about system components + items: + type: object + x-go-name: ComponentVersion + required: + - Name + - Version + properties: + Name: + description: | + Name of the component + type: string + example: Engine + Version: + description: | + Version of the component + type: string + example: 27.0.1 + Details: + description: | + Key/value pairs of strings with additional information about the + component. These values are intended for informational purposes + only, and their content is not defined, and not part of the API + specification. + + These messages can be printed by the client as information to the user. + type: + - object + - "null" + Version: + description: The version of the daemon + type: string + example: 27.0.1 + ApiVersion: + description: | + The default (and highest) API version that is supported by the daemon + type: string + example: "1.47" + MinAPIVersion: + description: | + The minimum API version that is supported by the daemon + type: string + example: "1.24" + GitCommit: + description: | + The Git commit of the source code that was used to build the daemon + type: string + example: 48a66213fe + GoVersion: + description: | + The version Go used to compile the daemon, and the version of the Go + runtime in use. + type: string + example: go1.22.7 + Os: + description: | + The operating system that the daemon is running on ("linux" or "windows") + type: string + example: linux + Arch: + description: | + Architecture of the daemon, as returned by the Go runtime (`GOARCH`). + + A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + type: string + example: amd64 + KernelVersion: + description: | + The kernel version (`uname -r`) that the daemon is running on. + + This field is omitted when empty. + type: string + example: 6.8.0-31-generic + Experimental: + description: | + Indicates if the daemon is started with experimental features enabled. + + This field is omitted when empty / false. + type: boolean + example: true + BuildTime: + description: | + The date and time that the daemon was compiled. + type: string + example: 2020-06-22T15:49:27.000000000+00:00 + SystemInfo: + type: object + properties: + ID: + description: | + Unique identifier of the daemon. + + + + + + + > **Note**: The format of the ID itself is not part of the API, and + > should not be considered stable. + type: string + example: 7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS + Containers: + description: Total number of containers on the host. + type: integer + example: 14 + ContainersRunning: + description: | + Number of containers with status `"running"`. + type: integer + example: 3 + ContainersPaused: + description: | + Number of containers with status `"paused"`. + type: integer + example: 1 + ContainersStopped: + description: | + Number of containers with status `"stopped"`. + type: integer + example: 10 + Images: + description: | + Total number of images on the host. + + Both _tagged_ and _untagged_ (dangling) images are counted. + type: integer + example: 508 + Driver: + description: Name of the storage driver in use. + type: string + example: overlay2 + DriverStatus: + description: | + Information specific to the storage driver, provided as + "label" / "value" pairs. + + This information is provided by the storage driver, and formatted + in a way consistent with the output of `docker info` on the command + line. + + + + + + + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: array + items: + type: array + items: + type: string + example: + - - Backing Filesystem + - extfs + - - Supports d_type + - "true" + - - Native Overlay Diff + - "true" + DockerRootDir: + description: | + Root directory of persistent Docker state. + + Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` + on Windows. + type: string + example: /var/lib/docker + Plugins: + $ref: "#/components/schemas/PluginsInfo" + MemoryLimit: + description: Indicates if the host has memory limit support enabled. + type: boolean + example: true + SwapLimit: + description: Indicates if the host has memory swap limit support enabled. + type: boolean + example: true + CpuCfsPeriod: + description: | + Indicates if CPU CFS(Completely Fair Scheduler) period is supported by + the host. + type: boolean + example: true + CpuCfsQuota: + description: | + Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by + the host. + type: boolean + example: true + CPUShares: + description: | + Indicates if CPU Shares limiting is supported by the host. + type: boolean + example: true + CPUSet: + description: | + Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. + + See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) + type: boolean + example: true + PidsLimit: + description: Indicates if the host kernel has PID limit support enabled. + type: boolean + example: true + OomKillDisable: + description: Indicates if OOM killer disable is supported on the host. + type: boolean + IPv4Forwarding: + description: Indicates IPv4 forwarding is enabled. + type: boolean + example: true + Debug: + description: | + Indicates if the daemon is running in debug-mode / with debug-level + logging enabled. + type: boolean + example: true + NFd: + description: | + The total number of file Descriptors in use by the daemon process. + + This information is only returned if debug-mode is enabled. + type: integer + example: 64 + NGoroutines: + description: | + The number of goroutines that currently exist. + + This information is only returned if debug-mode is enabled. + type: integer + example: 174 + SystemTime: + description: | + Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + format with nano-seconds. + type: string + example: 2017-08-08T20:28:29.06202363Z + LoggingDriver: + description: | + The logging driver to use as a default for new containers. + type: string + CgroupDriver: + description: | + The driver to use for managing cgroups. + type: string + enum: + - cgroupfs + - systemd + - none + default: cgroupfs + example: cgroupfs + CgroupVersion: + description: | + The version of the cgroup. + type: string + enum: + - "1" + - "2" + default: "1" + example: "1" + NEventsListener: + description: Number of event listeners subscribed. + type: integer + example: 30 + KernelVersion: + description: | + Kernel version of the host. + + On Linux, this information obtained from `uname`. On Windows this + information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ + registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. + type: string + example: 6.8.0-31-generic + OperatingSystem: + description: | + Name of the host's operating system, for example: "Ubuntu 24.04 LTS" + or "Windows Server 2016 Datacenter" + type: string + example: Ubuntu 24.04 LTS + OSVersion: + description: | + Version of the host's operating system + + + + + + + > **Note**: The information returned in this field, including its + > very existence, and the formatting of values, should not be considered + > stable, and may change without notice. + type: string + example: "24.04" + OSType: + description: | + Generic type of the operating system of the host, as returned by the + Go runtime (`GOOS`). + + Currently returned values are "linux" and "windows". A full list of + possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + type: string + example: linux + Architecture: + description: | + Hardware architecture of the host, as returned by the operating system. + This is equivalent to the output of `uname -m` on Linux. + + Unlike `Arch` (from `/version`), this reports the machine's native + architecture, which can differ from the Go runtime architecture when + running a binary compiled for a different architecture (for example, + a 32-bit binary running on 64-bit hardware). + type: string + example: x86_64 + NCPU: + description: | + The number of logical CPUs usable by the daemon. + + The number of available CPUs is checked by querying the operating + system when the daemon starts. Changes to operating system CPU + allocation after the daemon is started are not reflected. + type: integer + example: 4 + MemTotal: + description: | + Total amount of physical memory available on the host, in bytes. + type: integer + format: int64 + example: 2095882240 + IndexServerAddress: + description: | + Address / URL of the index server that is used for image search, + and as a default for user authentication for Docker Hub and Docker Cloud. + default: https://index.docker.io/v1/ + type: string + example: https://index.docker.io/v1/ + RegistryConfig: + $ref: "#/components/schemas/RegistryServiceConfig" + GenericResources: + $ref: "#/components/schemas/GenericResources" + HttpProxy: + description: | + HTTP-proxy configured for the daemon. This value is obtained from the + [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + are masked in the API response. + + Containers do not automatically inherit this configuration. + type: string + example: http://xxxxx:xxxxx@proxy.corp.example.com:8080 + HttpsProxy: + description: | + HTTPS-proxy configured for the daemon. This value is obtained from the + [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + are masked in the API response. + + Containers do not automatically inherit this configuration. + type: string + example: https://xxxxx:xxxxx@proxy.corp.example.com:4443 + NoProxy: + description: | + Comma-separated list of domain extensions for which no proxy should be + used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) + environment variable. + + Containers do not automatically inherit this configuration. + type: string + example: "*.local, 169.254/16" + Name: + description: Hostname of the host. + type: string + example: node5.corp.example.com + Labels: + description: | + User-defined labels (key/value metadata) as set on the daemon. + + + + + + + > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, + > set through the daemon configuration, and _node_ labels, set from a + > manager node in the Swarm. Node labels are not included in this + > field. Node labels can be retrieved using the `/nodes/(id)` endpoint + > on a manager node in the Swarm. + type: array + items: + type: string + example: + - storage=ssd + - production + ExperimentalBuild: + description: | + Indicates if experimental features are enabled on the daemon. + type: boolean + example: true + ServerVersion: + description: | + Version string of the daemon. + type: string + example: 27.0.1 + Runtimes: + description: | + List of [OCI compliant](https://github.com/opencontainers/runtime-spec) + runtimes configured on the daemon. Keys hold the "name" used to + reference the runtime. + + The Docker daemon relies on an OCI compliant runtime (invoked via the + `containerd` daemon) as its interface to the Linux kernel namespaces, + cgroups, and SELinux. + + The default runtime is `runc`, and automatically configured. Additional + runtimes can be configured by the user and will be listed here. + type: object + additionalProperties: + $ref: "#/components/schemas/Runtime" + default: + runc: + path: runc + example: + runc: + path: runc + runc-master: + path: /go/bin/runc + custom: + path: /usr/local/bin/my-oci-runtime + runtimeArgs: + - --debug + - --systemd-cgroup=false + DefaultRuntime: + description: | + Name of the default OCI runtime that is used when starting containers. + + The default can be overridden per-container at create time. + type: string + default: runc + example: runc + Swarm: + $ref: "#/components/schemas/SwarmInfo" + LiveRestoreEnabled: + description: | + Indicates if live restore is enabled. + + If enabled, containers are kept running when the daemon is shutdown + or upon daemon start if running containers are detected. + type: boolean + default: false + example: false + Isolation: + description: | + Represents the isolation technology to use as a default for containers. + The supported values are platform-specific. + + If no isolation value is specified on daemon start, on Windows client, + the default is `hyperv`, and on Windows server, the default is `process`. + + This option is currently not used on other platforms. + default: default + type: string + enum: + - default + - hyperv + - process + - "" + InitBinary: + description: | + Name and, optional, path of the `docker-init` binary. + + If the path is omitted, the daemon searches the host's `$PATH` for the + binary and uses the first result. + type: string + example: docker-init + ContainerdCommit: + $ref: "#/components/schemas/Commit" + RuncCommit: + $ref: "#/components/schemas/Commit" + InitCommit: + $ref: "#/components/schemas/Commit" + SecurityOptions: + description: | + List of security features that are enabled on the daemon, such as + apparmor, seccomp, SELinux, user-namespaces (userns), rootless and + no-new-privileges. + + Additional configuration options for each security feature may + be present, and are included as a comma-separated list of key/value + pairs. + type: array + items: + type: string + example: + - name=apparmor + - name=seccomp,profile=default + - name=selinux + - name=userns + - name=rootless + ProductLicense: + description: | + Reports a summary of the product license on the daemon. + + If a commercial license has been applied to the daemon, information + such as number of nodes, and expiration are included. + type: string + example: Community Engine + DefaultAddressPools: + description: | + List of custom default address pools for local networks, which can be + specified in the daemon.json file or dockerd option. + + Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 + 10.10.[0-255].0/24 address pools. + type: array + items: + type: object + properties: + Base: + description: The network address in CIDR format + type: string + example: 10.10.0.0/16 + Size: + description: The network pool size + type: integer + example: "24" + FirewallBackend: + $ref: "#/components/schemas/FirewallInfo" + DiscoveredDevices: + description: | + List of devices discovered by device drivers. + + Each device includes information about its source driver, kind, name, + and additional driver-specific attributes. + type: array + items: + $ref: "#/components/schemas/DeviceInfo" + NRI: + $ref: "#/components/schemas/NRIInfo" + Warnings: + description: | + List of warnings / informational messages about missing features, or + issues related to the daemon configuration. + + These messages can be printed by the client as information to the user. + type: array + items: + type: string + example: + - "WARNING: No memory limit support" + CDISpecDirs: + description: | + List of directories where (Container Device Interface) CDI + specifications are located. + + These specifications define vendor-specific modifications to an OCI + runtime specification for a container being created. + + An empty list indicates that CDI device injection is disabled. + + Note that since using CDI device injection requires the daemon to have + experimental enabled. For non-experimental daemons an empty list will + always be returned. + type: array + items: + type: string + example: + - /etc/cdi + - /var/run/cdi + Containerd: + $ref: "#/components/schemas/ContainerdInfo" + ContainerdInfo: + description: | + Information for connecting to the containerd instance that is used by the daemon. + This is included for debugging purposes only. + type: + - object + - "null" + properties: + Address: + description: The address of the containerd socket. + type: string + example: /run/containerd/containerd.sock + Namespaces: + description: | + The namespaces that the daemon uses for running containers and + plugins in containerd. These namespaces can be configured in the + daemon configuration, and are considered to be used exclusively + by the daemon, Tampering with the containerd instance may cause + unexpected behavior. + + As these namespaces are considered to be exclusively accessed + by the daemon, it is not recommended to change these values, + or to change them to a value that is used by other systems, + such as cri-containerd. + type: object + properties: + Containers: + description: | + The default containerd namespace used for containers managed + by the daemon. + + The default namespace for containers is "moby", but will be + suffixed with the `.` of the remapped `root` if + user-namespaces are enabled and the containerd image-store + is used. + type: string + default: moby + example: moby + Plugins: + description: | + The default containerd namespace used for plugins managed by + the daemon. + + The default namespace for plugins is "plugins.moby", but will be + suffixed with the `.` of the remapped `root` if + user-namespaces are enabled and the containerd image-store + is used. + type: string + default: plugins.moby + example: plugins.moby + FirewallInfo: + description: | + Information about the daemon's firewalling configuration. + + This field is currently only used on Linux, and omitted on other platforms. + type: + - object + - "null" + properties: + Driver: + description: | + The name of the firewall backend driver. + type: string + example: nftables + Info: + description: | + Information about the firewall backend, provided as + "label" / "value" pairs. + + + + + + + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: array + items: + type: array + items: + type: string + example: + - - ReloadedAt + - 2025-01-01T00:00:00Z + PluginsInfo: + description: | + Available plugins per type. + + + + + + + > **Note**: Only unmanaged (V1) plugins are included in this list. + > V1 plugins are "lazily" loaded, and are not returned in this list + > if there is no resource using the plugin. + type: object + properties: + Volume: + description: Names of available volume-drivers, and network-driver plugins. + type: array + items: + type: string + example: + - local + Network: + description: Names of available network-drivers, and network-driver plugins. + type: array + items: + type: string + example: + - bridge + - host + - ipvlan + - macvlan + - "null" + - overlay + Authorization: + description: Names of available authorization plugins. + type: array + items: + type: string + example: + - img-authz-plugin + - hbm + Log: + description: Names of available logging-drivers, and logging-driver plugins. + type: array + items: + type: string + example: + - awslogs + - fluentd + - gcplogs + - gelf + - journald + - json-file + - splunk + - syslog + RegistryServiceConfig: + description: | + RegistryServiceConfig stores daemon registry services configuration. + type: + - object + - "null" + properties: + InsecureRegistryCIDRs: + description: | + List of IP ranges of insecure registries, using the CIDR syntax + ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries + accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates + from unknown CAs) communication. + + By default, local registries (`::1/128` and `127.0.0.0/8`) are configured as + insecure. All other registries are secure. Communicating with an + insecure registry is not possible if the daemon assumes that registry + is secure. + + This configuration override this behavior, insecure communication with + registries whose resolved IP address is within the subnet described by + the CIDR syntax. + + Registries can also be marked insecure by hostname. Those registries + are listed under `IndexConfigs` and have their `Secure` field set to + `false`. + + > **Warning**: Using this option can be useful when running a local + > registry, but introduces security vulnerabilities. This option + > should therefore ONLY be used for testing purposes. For increased + > security, users should add their CA to their system's list of trusted + > CAs instead of enabling this option. + type: array + items: + type: string + example: + - ::1/128 + - 127.0.0.0/8 + IndexConfigs: + type: object + additionalProperties: + $ref: "#/components/schemas/IndexInfo" + example: + 127.0.0.1:5000: + Name: 127.0.0.1:5000 + Mirrors: [] + Secure: false + Official: false + "[2001:db8:a0b:12f0::1]:80": + Name: "[2001:db8:a0b:12f0::1]:80" + Mirrors: [] + Secure: false + Official: false + docker.io: + Name: docker.io + Mirrors: + - https://hub-mirror.corp.example.com:5000/ + Secure: true + Official: true + registry.internal.corp.example.com:3000: + Name: registry.internal.corp.example.com:3000 + Mirrors: [] + Secure: false + Official: false + Mirrors: + description: | + List of registry URLs that act as a mirror for the official + (`docker.io`) registry. + type: array + items: + type: string + example: + - https://hub-mirror.corp.example.com:5000/ + - https://[2001:db8:a0b:12f0::1]/ + IndexInfo: + description: IndexInfo contains information about a registry. + type: + - object + - "null" + properties: + Name: + description: | + Name of the registry, such as "docker.io". + type: string + example: docker.io + Mirrors: + description: | + List of mirrors, expressed as URIs. + type: array + items: + type: string + example: + - https://hub-mirror.corp.example.com:5000/ + - https://registry-2.docker.io/ + - https://registry-3.docker.io/ + Secure: + description: | + Indicates if the registry is part of the list of insecure + registries. + + If `false`, the registry is insecure. Insecure registries accept + un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from + unknown CAs) communication. + + > **Warning**: Insecure registries can be useful when running a local + > registry. However, because its use creates security vulnerabilities + > it should ONLY be enabled for testing purposes. For increased + > security, users should add their CA to their system's list of + > trusted CAs instead of enabling this option. + type: boolean + example: true + Official: + description: | + Indicates whether this is an official registry (i.e., Docker Hub / docker.io) + type: boolean + example: true + Runtime: + description: | + Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec) + runtime. + + The runtime is invoked by the daemon via the `containerd` daemon. OCI + runtimes act as an interface to the Linux kernel namespaces, cgroups, + and SELinux. + type: object + properties: + path: + description: | + Name and, optional, path, of the OCI executable binary. + + If the path is omitted, the daemon searches the host's `$PATH` for the + binary and uses the first result. + type: string + example: /usr/local/bin/my-oci-runtime + runtimeArgs: + description: | + List of command-line arguments to pass to the runtime when invoked. + type: + - array + - "null" + items: + type: string + example: + - --debug + - --systemd-cgroup=false + status: + description: | + Information specific to the runtime. + + While this API specification does not define data provided by runtimes, + the following well-known properties may be provided by runtimes: + + `org.opencontainers.runtime-spec.features`: features structure as defined + in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), + in a JSON string representation. + + + + + + + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: + - object + - "null" + additionalProperties: + type: string + example: + org.opencontainers.runtime-spec.features: '{"ociVersionMin":"1.0.0","ociVersionMax":"1.1.0","...":"..."}' + Commit: + description: | + Commit holds the Git-commit (SHA1) that a binary was built from, as + reported in the version-string of external tools, such as `containerd`, + or `runC`. + type: object + properties: + ID: + description: Actual commit ID of external tool. + type: string + example: cfb82a876ecc11b5ca0977d1733adbe58599088a + SwarmInfo: + description: | + Represents generic information about swarm. + type: object + properties: + NodeID: + description: Unique identifier of for this node in the swarm. + type: string + default: "" + example: k67qz4598weg5unwwffg6z1m1 + NodeAddr: + description: | + IP address at which this node can be reached by other nodes in the + swarm. + type: string + default: "" + example: 10.0.0.46 + LocalNodeState: + $ref: "#/components/schemas/LocalNodeState" + ControlAvailable: + type: boolean + default: false + example: true + Error: + type: string + default: "" + RemoteManagers: + description: | + List of ID's and addresses of other managers in the swarm. + type: + - array + - "null" + default: null + items: + $ref: "#/components/schemas/PeerNode" + example: + - NodeID: 71izy0goik036k48jg985xnds + Addr: 10.0.0.158:2377 + - NodeID: 79y6h1o4gv8n120drcprv5nmc + Addr: 10.0.0.159:2377 + - NodeID: k67qz4598weg5unwwffg6z1m1 + Addr: 10.0.0.46:2377 + Nodes: + description: Total number of nodes in the swarm. + type: + - integer + - "null" + example: 4 + Managers: + description: Total number of managers in the swarm. + type: + - integer + - "null" + example: 3 + Cluster: + $ref: "#/components/schemas/ClusterInfo" + LocalNodeState: + description: Current local status of this node. + type: string + default: "" + enum: + - "" + - inactive + - pending + - active + - error + - locked + example: active + PeerNode: + description: Represents a peer-node in the swarm + type: object + properties: + NodeID: + description: Unique identifier of for this node in the swarm. + type: string + Addr: + description: | + IP address and ports at which this node can be reached. + type: string + NetworkAttachmentConfig: + description: | + Specifies how a service should be attached to a particular network. + type: object + properties: + Target: + description: | + The target network for attachment. Must be a network name or ID. + type: string + Aliases: + description: | + Discoverable alternate names for the service on this network. + type: array + items: + type: string + DriverOpts: + description: | + Driver attachment options for the network target. + type: object + additionalProperties: + type: string + EventActor: + description: | + Actor describes something that generates events, like a container, network, + or a volume. + type: object + properties: + ID: + description: The ID of the object emitting the event + type: string + example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 + Attributes: + description: | + Various key/value attributes of the object, depending on its type. + type: object + additionalProperties: + type: string + example: + com.example.some-label: some-label-value + image: alpine:latest + name: my-container + EventMessage: + description: | + EventMessage represents the information an event contains. + type: object + title: SystemEventsResponse + properties: + Type: + description: The type of object emitting the event + type: string + enum: + - builder + - config + - container + - daemon + - image + - network + - node + - plugin + - secret + - service + - volume + example: container + Action: + description: The type of event + type: string + example: create + Actor: + $ref: "#/components/schemas/EventActor" + scope: + description: | + Scope of the event. Engine events are `local` scope. Cluster (Swarm) + events are `swarm` scope. + type: string + enum: + - local + - swarm + time: + description: Timestamp of event + type: integer + format: int64 + example: 1629574695 + timeNano: + description: Timestamp of event, with nanosecond accuracy + type: integer + format: int64 + example: 1629574695515050000 + OCIDescriptor: + type: object + x-go-name: Descriptor + description: | + A descriptor struct containing digest, media type, and size, as defined in + the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). + properties: + mediaType: + description: | + The media type of the object this schema refers to. + type: string + example: application/vnd.oci.image.manifest.v1+json + digest: + description: | + The digest of the targeted content. + type: string + example: sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96 + size: + description: | + The size in bytes of the blob. + type: integer + format: int64 + example: 424 + urls: + description: List of URLs from which this object MAY be downloaded. + type: + - array + - "null" + items: + type: string + format: uri + annotations: + description: Arbitrary metadata relating to the targeted content. + type: + - object + - "null" + additionalProperties: + type: string + example: + com.docker.official-images.bashbrew.arch: amd64 + org.opencontainers.image.base.digest: sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8 + org.opencontainers.image.base.name: scratch + org.opencontainers.image.created: 2025-01-27T00:00:00Z + org.opencontainers.image.revision: 9fabb4bad5138435b01857e2fe9363e2dc5f6a79 + org.opencontainers.image.source: https://git.launchpad.net/cloud-images/+oci/ubuntu-base + org.opencontainers.image.url: https://hub.docker.com/_/ubuntu + org.opencontainers.image.version: "24.04" + data: + type: + - string + - "null" + description: |- + Data is an embedding of the targeted content. This is encoded as a base64 + string when marshalled to JSON (automatically, by encoding/json). If + present, Data can be used directly to avoid fetching the targeted content. + example: null + platform: + $ref: "#/components/schemas/OCIPlatform" + artifactType: + description: ArtifactType is the IANA media type of this artifact. + type: + - string + - "null" + example: null + OCIPlatform: + type: + - object + - "null" + x-go-name: Platform + description: | + Describes the platform which the image in the manifest runs on, as defined + in the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md). + properties: + architecture: + description: | + The CPU architecture, for example `amd64` or `ppc64`. + type: string + example: arm + os: + description: | + The operating system, for example `linux` or `windows`. + type: string + example: windows + os.version: + description: | + Optional field specifying the operating system version, for example on + Windows `10.0.19041.1165`. + type: string + example: 10.0.19041.1165 + os.features: + description: | + Optional field specifying an array of strings, each listing a required + OS feature (for example on Windows `win32k`). + type: array + items: + type: string + example: + - win32k + variant: + description: | + Optional field specifying a variant of the CPU, for example `v7` to + specify ARMv7 when architecture is `arm`. + type: string + example: v7 + DistributionInspect: + type: object + x-go-name: DistributionInspect + title: DistributionInspectResponse + required: + - Descriptor + - Platforms + description: | + Describes the result obtained from contacting the registry to retrieve + image metadata. + properties: + Descriptor: + $ref: "#/components/schemas/OCIDescriptor" + Platforms: + type: array + description: | + An array containing all platforms supported by the image. + items: + $ref: "#/components/schemas/OCIPlatform" + ClusterVolume: + type: object + description: | + Options and information specific to, and only present on, Swarm CSI + cluster volumes. + properties: + ID: + type: string + description: | + The Swarm ID of this volume. Because cluster volumes are Swarm + objects, they have an ID, unlike non-cluster volumes. This ID can + be used to refer to the Volume instead of the name. + Version: + $ref: "#/components/schemas/ObjectVersion" + CreatedAt: + type: string + format: dateTime + UpdatedAt: + type: string + format: dateTime + Spec: + $ref: "#/components/schemas/ClusterVolumeSpec" + Info: + type: object + description: | + Information about the global status of the volume. + properties: + CapacityBytes: + type: integer + format: int64 + description: | + The capacity of the volume in bytes. A value of 0 indicates that + the capacity is unknown. + VolumeContext: + type: object + description: | + A map of strings to strings returned from the storage plugin when + the volume is created. + additionalProperties: + type: string + VolumeID: + type: string + description: | + The ID of the volume as returned by the CSI storage plugin. This + is distinct from the volume's ID as provided by Docker. This ID + is never used by the user when communicating with Docker to refer + to this volume. If the ID is blank, then the Volume has not been + successfully created in the plugin yet. + AccessibleTopology: + type: array + description: | + The topology this volume is actually accessible from. + items: + $ref: "#/components/schemas/Topology" + PublishStatus: + type: array + description: | + The status of the volume as it pertains to its publishing and use on + specific nodes + items: + type: object + properties: + NodeID: + type: string + description: | + The ID of the Swarm node the volume is published on. + State: + type: string + description: | + The published state of the volume. + * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. + * `published` The volume is published successfully to the node. + * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. + * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. + enum: + - pending-publish + - published + - pending-node-unpublish + - pending-controller-unpublish + PublishContext: + type: object + description: | + A map of strings to strings returned by the CSI controller + plugin when a volume is published. + additionalProperties: + type: string + ClusterVolumeSpec: + type: object + description: | + Cluster-specific options used to create the volume. + properties: + Group: + type: string + description: | + Group defines the volume group of this volume. Volumes belonging to + the same group can be referred to by group name when creating + Services. Referring to a volume by group instructs Swarm to treat + volumes in that group interchangeably for the purpose of scheduling. + Volumes with an empty string for a group technically all belong to + the same, emptystring group. + AccessMode: + type: object + description: | + Defines how the volume is used by tasks. + properties: + Scope: + type: string + description: | + The set of nodes this volume can be used on at one time. + - `single` The volume may only be scheduled to one node at a time. + - `multi` the volume may be scheduled to any supported number of nodes at a time. + default: single + enum: + - single + - multi + Sharing: + type: string + description: | + The number and way that different tasks can use this volume + at one time. + - `none` The volume may only be used by one task at a time. + - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly + - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. + - `all` The volume may have any number of readers and writers. + default: none + enum: + - none + - readonly + - onewriter + - all + MountVolume: + type: object + description: | + Options for using this volume as a Mount-type volume. + + Either MountVolume or BlockVolume, but not both, must be + present. + properties: + FsType: + type: "string" + description: | + Specifies the filesystem type for the mount volume. + Optional. + MountFlags: + type: "array" + description: | + Flags to pass when mounting the volume. Optional. + items: + type: "string" + BlockVolume: + type: "object" + description: | + Options for using this volume as a Block-type volume. + Intentionally empty. + Secrets: + type: array + description: | + Swarm Secrets that are passed to the CSI storage plugin when + operating on this volume. + items: + type: object + description: | + One cluster volume secret entry. Defines a key-value pair that + is passed to the plugin. + properties: + Key: + type: string + description: | + Key is the name of the key of the key-value pair passed to + the plugin. + Secret: + type: string + description: | + Secret is the swarm Secret object from which to read data. + This can be a Secret name or ID. The Secret data is + retrieved by swarm and used as the value of the key-value + pair passed to the plugin. + AccessibilityRequirements: + type: object + description: | + Requirements for the accessible topology of the volume. These + fields are optional. For an in-depth description of what these + fields mean, see the CSI specification. + properties: + Requisite: + type: array + description: | + A list of required topologies, at least one of which the + volume must be accessible from. + items: + $ref: "#/components/schemas/Topology" + Preferred: + type: array + description: | + A list of topologies that the volume should attempt to be + provisioned in. + items: + $ref: "#/components/schemas/Topology" + CapacityRange: + type: object + description: | + The desired capacity that the volume should be created with. If + empty, the plugin will decide the capacity. + properties: + RequiredBytes: + type: integer + format: int64 + description: | + The volume must be at least this big. The value of 0 + indicates an unspecified minimum + LimitBytes: + type: integer + format: int64 + description: | + The volume must not be bigger than this. The value of 0 + indicates an unspecified maximum. + Availability: + type: string + description: | + The availability of the volume for use in tasks. + - `active` The volume is fully available for scheduling on the cluster + - `pause` No new workloads should use the volume, but existing workloads are not stopped. + - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. + default: active + enum: + - active + - pause + - drain + Topology: + description: | + A map of topological domains to topological segments. For in depth + details, see documentation for the Topology object in the CSI + specification. + type: object + properties: + Segments: + type: object + additionalProperties: + type: string + AttestationStatement: + x-go-name: AttestationStatement + description: | + AttestationStatement is a single in-toto statement attached to an image. + type: object + required: + - Descriptor + - PredicateType + properties: + Descriptor: + $ref: "#/components/schemas/OCIDescriptor" + PredicateType: + description: The in-toto predicate type URI of this statement. + type: string + example: https://slsa.dev/provenance/v0.2 + Statement: + description: | + The verbatim in-toto statement JSON. Only included when the caller + opts in via the `statement=true` query parameter; otherwise absent. + type: + - object + - "null" + ImageManifestSummary: + x-go-name: ManifestSummary + description: | + ImageManifestSummary represents a summary of an image manifest. + type: object + required: + - ID + - Descriptor + - Available + - Size + - Kind + properties: + ID: + description: | + ID is the content-addressable ID of an image and is the same as the + digest of the image manifest. + type: string + example: sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f + Descriptor: + $ref: "#/components/schemas/OCIDescriptor" + Available: + description: Indicates whether all the child content (image config, layers) is fully available locally. + type: boolean + example: true + Size: + type: object + required: + - Content + - Total + properties: + Total: + type: integer + format: int64 + example: 8213251 + description: | + Total is the total size (in bytes) of all the locally present + data (both distributable and non-distributable) that's related to + this manifest and its children. + This equal to the sum of [Content] size AND all the sizes in the + [Size] struct present in the Kind-specific data struct. + For example, for an image kind (Kind == "image") + this would include the size of the image content and unpacked + image snapshots ([Size.Content] + [ImageData.Size.Unpacked]). + Content: + description: | + Content is the size (in bytes) of all the locally present + content in the content store (e.g. image config, layers) + referenced by this manifest and its children. + This only includes blobs in the content store. + type: integer + format: int64 + example: 3987495 + Kind: + type: string + example: image + enum: + - image + - attestation + - unknown + description: | + The kind of the manifest. + + kind | description + -------------|----------------------------------------------------------- + image | Image manifest that can be used to start a container. + attestation | Attestation manifest produced by the Buildkit builder for a specific image manifest. + ImageData: + description: | + The image data for the image manifest. + This field is only populated when Kind is "image". + type: + - object + - "null" + x-omitempty: true + required: + - Platform + - Containers + - Size + - UnpackedSize + properties: + Platform: + allOf: + - $ref: "#/components/schemas/OCIPlatform" + - description: | + OCI platform of the image. This will be the platform specified in the + manifest descriptor from the index/manifest list. + If it's not available, it will be obtained from the image config. + Identity: + allOf: + - $ref: "#/components/schemas/Identity" + - anyOf: + - description: | + Identity holds information about the identity and origin of this image. + For image list responses, this can duplicate Build/Pull fields across + image manifests, because those parts are image-level metadata. + - type: "null" + Containers: + description: | + The IDs of the containers that are using this image. + type: array + items: + type: string + example: + - ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430 + - abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e + Size: + type: object + required: + - Unpacked + properties: + Unpacked: + type: integer + format: int64 + example: 3987495 + description: | + Unpacked is the size (in bytes) of the locally unpacked + (uncompressed) image content that's directly usable by the containers + running this image. + It's independent of the distributable content - e.g. + the image might still have an unpacked data that's still used by + some container even when the distributable/compressed content is + already gone. + AttestationData: + description: | + The image data for the attestation manifest. + This field is only populated when Kind is "attestation". + type: + - object + - "null" + x-omitempty: true + required: + - For + properties: + For: + description: | + The digest of the image manifest that this attestation is for. + type: string + example: sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +security: [] diff --git a/prototypes/api-docs/converted/governance.yaml b/prototypes/api-docs/converted/governance.yaml new file mode 100644 index 000000000000..90db070ea1a7 --- /dev/null +++ b/prototypes/api-docs/converted/governance.yaml @@ -0,0 +1,1004 @@ +openapi: 3.2.0 +info: + title: Docker AI Governance Policy API + version: "1" + description: | + HTTP+JSON API for managing Docker governance policies and rules. + + **Resource model.** An organization owns one or more policies. Each policy + contains a list of rules grouped into a single domain: either `network` or + `filesystem`. A policy's domain is derived from its rule actions; mixing + domains within a single policy is not permitted. + + **Lifecycle.** Create a policy with CreatePolicy, then add rules with + CreateRule. Rules can be updated in place with UpdateRule or removed with + DeleteRule. Deleting all rules does not delete the policy itself. + + **Rule evaluation.** All rules in a policy are tested against every request. + `deny` always wins: if any rule matches with `decision: deny`, the request + is denied regardless of any `allow` rules. + + **Enforcement.** Organization policies take precedence over local sandbox + policies and cannot be overridden by individual users. + + **Propagation.** Policy changes take up to five minutes to reach developer + machines after being written. + + See https://docs.docker.com/ai/sandboxes/governance/ for product + documentation. + contact: + name: Docker + url: https://www.docker.com/products/ai-governance/ +tags: + - name: policies + description: Policy lifecycle management + summary: policies + kind: nav + - name: rules + description: Rule management within an allowlist policy + summary: rules + kind: nav +servers: + - url: https://hub.docker.com/v2 +security: + - bearerAuth: [] +paths: + /orgs/{org_name}/governance/policies: + parameters: + - $ref: "#/components/parameters/OrgName" + get: + operationId: listPolicies + tags: + - policies + summary: List policies + description: | + Returns a shallow summary of all policies for the org. The rule set is not included; use GetPolicy to fetch the full object. + responses: + "200": + description: Object wrapping an array of policy summaries under `data`. Rule sets are not included; use GetPolicy to fetch a full policy. + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: array + items: + $ref: "#/components/schemas/PolicySummary" + examples: + default: + value: + data: + - id: pol_06evsmp24r1pg71cm8500546pkbn + name: Security Research — hardened + org: my-org + scope: + teams: + - d290f1ee-6c54-4b01-90e6-d701748f0851 + created_at: 2026-04-22T00:00:00Z + updated_at: 2026-04-22T00:00:00Z + type: allowlist_v0 + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/PermissionDenied" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalError" + post: + operationId: createPolicy + tags: + - policies + summary: Create policy + description: | + Creates a new policy with an empty rule set. Rules are added separately via the rules sub-resource. + requestBody: + description: Policy name and optional scope. + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreatePolicyRequest" + examples: + default: + value: + name: Security Research — hardened + scope: + teams: + - d290f1ee-6c54-4b01-90e6-d701748f0851 + responses: + "201": + description: Policy created. Returns the new policy without its rule set. + content: + application/json: + schema: + $ref: "#/components/schemas/Policy" + examples: + default: + value: + id: pol_06evsmp24r1pg71cm8500546pkbn + name: Security Research — hardened + org: my-org + scope: + teams: + - d290f1ee-6c54-4b01-90e6-d701748f0851 + created_at: 2026-04-22T00:00:00Z + updated_at: 2026-04-22T00:00:00Z + "400": + $ref: "#/components/responses/InvalidArgument" + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "409": + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/InternalError" + /orgs/{org_name}/governance/policies/{policy_id}: + parameters: + - $ref: "#/components/parameters/OrgName" + - $ref: "#/components/parameters/PolicyID" + get: + operationId: getPolicy + tags: + - policies + summary: Get policy + description: Returns the full policy including its `allowlist_v0` rule set. + responses: + "200": + description: Full policy including its `allowlist_v0` rule set. + content: + application/json: + schema: + $ref: "#/components/schemas/Policy" + examples: + default: + value: + id: pol_06evsmp24r1pg71cm8500546pkbn + name: Security Research — hardened + org: my-org + scope: + teams: + - d290f1ee-6c54-4b01-90e6-d701748f0851 + created_at: 2026-04-22T00:00:00Z + updated_at: 2026-04-22T00:00:00Z + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: + - connect:tcp + - connect:udp + resources: + - research.mitre.org + - cve.mitre.org + decision: allow + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/PermissionDenied" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalError" + patch: + operationId: updatePolicy + tags: + - policies + summary: Update policy + description: | + Partially updates a policy's metadata. Only fields present in the + request body are updated; absent fields are left unchanged. The `scope` + object is patched per sub-field: sending `teams` replaces that list, + while an omitted sub-field is left untouched and an empty list clears + it (org-wide). + + The rule set is not modified here — use the rule endpoints for that. + At least one field must be present. Returns the policy in both its old + and new states. Changes may take up to five minutes to reach developer + machines. + requestBody: + description: Fields to update. Absent fields are left unchanged. + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdatePolicyRequest" + examples: + rename: + summary: Rename the policy + value: + name: Security Research + scope: + summary: Restrict to a team + value: + scope: + teams: + - d290f1ee-6c54-4b01-90e6-d701748f0851 + responses: + "200": + description: Policy updated, returns old and new states. + content: + application/json: + schema: + $ref: "#/components/schemas/UpdatePolicyResponse" + examples: + default: + value: + old: + id: pol_06evsmp24r1pg71cm8500546pkbn + name: Security Research — hardened + org: my-org + scope: + teams: + - d290f1ee-6c54-4b01-90e6-d701748f0851 + created_at: 2026-04-22T00:00:00Z + updated_at: 2026-04-22T00:00:00Z + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: + - connect:tcp + - connect:udp + resources: + - research.mitre.org + - cve.mitre.org + decision: allow + new: + id: pol_06evsmp24r1pg71cm8500546pkbn + name: Security Research + org: my-org + scope: + teams: + - d290f1ee-6c54-4b01-90e6-d701748f0851 + created_at: 2026-04-22T00:00:00Z + updated_at: 2026-04-22T10:00:00Z + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: + - connect:tcp + - connect:udp + resources: + - research.mitre.org + - cve.mitre.org + decision: allow + "400": + $ref: "#/components/responses/InvalidArgument" + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "409": + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/InternalError" + delete: + operationId: deletePolicy + tags: + - policies + summary: Delete policy + description: | + Permanently deletes the policy and its rule set. Returns the deleted + policy as a courtesy; its `updated_at` is unchanged by the deletion. + Changes may take up to five minutes to reach developer machines. + responses: + "200": + description: Policy deleted, returns the deleted policy. + content: + application/json: + schema: + $ref: "#/components/schemas/DeletePolicyResponse" + examples: + default: + value: + deleted: + id: pol_06evsmp24r1pg71cm8500546pkbn + name: Security Research — hardened + org: my-org + scope: + teams: + - d290f1ee-6c54-4b01-90e6-d701748f0851 + created_at: 2026-04-22T00:00:00Z + updated_at: 2026-04-22T00:00:00Z + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: + - connect:tcp + - connect:udp + resources: + - research.mitre.org + - cve.mitre.org + decision: allow + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/PermissionDenied" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalError" + /orgs/{org_name}/governance/policies/{policy_id}/rules: + parameters: + - $ref: "#/components/parameters/OrgName" + - $ref: "#/components/parameters/PolicyID" + post: + operationId: createRule + tags: + - rules + summary: Create rule + description: | + Adds a rule to the policy's rule set. All rules in a policy must share + the same domain (network or filesystem); mixing domains is rejected. + + **Network** actions: `connect:tcp`, `connect:udp`. Resources are + hostnames (for example, `example.com`), wildcard subdomains (`*.example.com` + for one level, `**.example.com` for any depth), hostnames with an optional + port (for example, `example.com:443`), or CIDRs in IPv4 or IPv6 notation + (for example, `10.0.0.0/8` or `2001:db8::/32`). + + **Filesystem** actions: `read`, `write`. Resources are paths (for example, + `/data`). Use `*` to match within a single path segment and `**` to match + recursively across segments (for example, `/data/**`). + + Changes may take up to five minutes to reach developer machines. + requestBody: + description: Rule definition including actions, resources, and decision. + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateRuleRequest" + examples: + network: + summary: Network rule + value: + name: allow research mirrors + actions: + - connect:tcp + - connect:udp + resources: + - research.mitre.org + - cve.mitre.org + decision: allow + filesystem: + summary: Filesystem rule + value: + name: allow data directory + actions: + - read + - write + resources: + - /data + decision: allow + responses: + "201": + description: Rule created and added to the policy's rule set. + content: + application/json: + schema: + $ref: "#/components/schemas/Rule" + examples: + network: + summary: Network rule + value: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: + - connect:tcp + - connect:udp + resources: + - research.mitre.org + - cve.mitre.org + decision: allow + filesystem: + summary: Filesystem rule + value: + id: rule_07fwtnr0kn2qetl1b9olfbyz8kob + name: allow data directory + actions: + - read + - write + resources: + - /data + decision: allow + "400": + $ref: "#/components/responses/InvalidArgument" + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "409": + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/InternalError" + /orgs/{org_name}/governance/policies/{policy_id}/rules/{rule_id}: + parameters: + - $ref: "#/components/parameters/OrgName" + - $ref: "#/components/parameters/PolicyID" + - $ref: "#/components/parameters/RuleID" + patch: + operationId: updateRule + tags: + - rules + summary: Update rule + description: | + Partially updates a rule. Only fields present in the request body are + updated; absent fields are left unchanged. Returns the rule in both its + old and new states. + + Changing `actions` across domains (for example, from network actions to + filesystem actions) is rejected. Changes may take up to five minutes to + reach developer machines. + requestBody: + description: Fields to update. Absent fields are left unchanged. + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateRuleRequest" + examples: + default: + value: + resources: + - research.mitre.org + responses: + "200": + description: Rule updated, returns old and new states. + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateRuleResponse" + examples: + default: + value: + old: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: + - connect:tcp + - connect:udp + resources: + - research.mitre.org + - cve.mitre.org + decision: allow + new: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: + - connect:tcp + - connect:udp + resources: + - research.mitre.org + decision: allow + "400": + $ref: "#/components/responses/InvalidArgument" + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/PermissionDenied" + "404": + $ref: "#/components/responses/NotFound" + "409": + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/InternalError" + delete: + operationId: deleteRule + tags: + - rules + summary: Delete rule + description: | + Deletes a rule from the policy. Returns the deleted rule. Changes may + take up to five minutes to reach developer machines. + responses: + "200": + description: Rule deleted, returns the deleted rule. + content: + application/json: + schema: + $ref: "#/components/schemas/DeleteRuleResponse" + examples: + default: + value: + deleted: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: + - connect:tcp + - connect:udp + resources: + - research.mitre.org + - cve.mitre.org + decision: allow + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/PermissionDenied" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalError" +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT + description: | + Short-lived JWT obtained by exchanging Docker Hub credentials at + `POST https://hub.docker.com/v2/auth/token`. Pass the JWT in the + `Authorization: Bearer ` header. Tokens expire after a short + period; request a fresh one when you receive a `401`. + + The `secret` field of the token request accepts any of the following + credential types: + + | Type | Format | Notes | + |------|--------|-------| + | Password | Plain text | Your Docker Hub account password. | + | Personal Access Token (PAT) | `dckr_pat_*` | Recommended over passwords. Create one under Account Settings → Security. | + | Organization Access Token (OAT) | `dckr_oat_*` | Scoped to an organization. Create one under Organization Settings → Access Tokens. | + + PAT and OAT strings can't be used directly as a bearer token. They must + be exchanged at the token endpoint first. + + See [Docker Hub authentication](https://docs.docker.com/reference/api/hub/latest/#tag/authentication-api/operation/AuthCreateAccessToken) + for full details. + parameters: + OrgName: + name: org_name + in: path + required: true + description: Docker Hub organization name. + schema: + type: string + examples: + default: + value: my-org + PolicyID: + name: policy_id + in: path + required: true + description: Unique policy identifier. + schema: + type: string + examples: + default: + value: pol_06evsmp24r1pg71cm8500546pkbn + RuleID: + name: rule_id + in: path + required: true + description: Unique rule identifier within the policy. + schema: + type: string + examples: + default: + value: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + schemas: + PolicySummary: + type: object + description: Shallow policy representation returned by ListPolicies. Excludes the rule set. + required: + - id + - name + - org + - scope + - created_at + - updated_at + - type + properties: + id: + type: string + examples: + - pol_06evsmp24r1pg71cm8500546pkbn + name: + type: string + description: Human-readable label, unique within the organization. + examples: + - Security Research — hardened + org: + type: string + examples: + - my-org + scope: + $ref: "#/components/schemas/Scope" + created_at: + type: string + format: date-time + examples: + - 2026-04-22T00:00:00Z + updated_at: + type: string + format: date-time + examples: + - 2026-04-22T00:00:00Z + type: + type: string + description: | + Identifies the rule-set format. Always `allowlist_v0`, corresponding to the `allowlist_v0` property on the full Policy object. + examples: + - allowlist_v0 + Policy: + type: object + description: Full policy representation including the allowlist rule set. + required: + - id + - name + - org + - scope + - created_at + - updated_at + properties: + id: + type: string + examples: + - pol_06evsmp24r1pg71cm8500546pkbn + name: + type: string + description: Human-readable label, unique within the organization. + examples: + - Security Research — hardened + org: + type: string + examples: + - my-org + scope: + $ref: "#/components/schemas/Scope" + created_at: + type: string + format: date-time + examples: + - 2026-04-22T00:00:00Z + updated_at: + type: string + format: date-time + examples: + - 2026-04-22T00:00:00Z + allowlist_v0: + $ref: "#/components/schemas/AllowlistV0" + Scope: + type: object + description: Restricts the policy to specific teams. An empty or absent list means the policy applies org-wide. + properties: + teams: + type: array + items: + type: string + description: Team UUIDs the policy applies to. Each must be a valid team in the org. + examples: + - - d290f1ee-6c54-4b01-90e6-d701748f0851 + AllowlistV0: + type: object + description: | + Network or filesystem allowlist containing a list of rules. Present on + Policy when `PolicySummary.type` is `allowlist_v0`; omitted when the + policy has no rules yet. All rules in an allowlist share the same domain. + All rules are evaluated on every request: `deny` always wins over `allow`. + required: + - rules + properties: + domain: + type: string + description: | + The access-control domain shared by all rules in this allowlist. Derived from rule actions: network actions (`connect:tcp`, `connect:udp`) produce `network`; filesystem actions (`read`, `write`) produce `filesystem`. Present when `rules` is non-empty; absent when the allowlist has no rules. + enum: + - network + - filesystem + examples: + - network + rules: + type: array + items: + $ref: "#/components/schemas/Rule" + Rule: + type: object + description: A single allow or deny rule within an allowlist policy. + required: + - id + - name + - actions + - resources + - decision + properties: + id: + type: string + examples: + - rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: + type: string + description: Human-readable label for the rule. + examples: + - allow research mirrors + actions: + $ref: "#/components/schemas/RuleActions" + resources: + $ref: "#/components/schemas/RuleResources" + decision: + $ref: "#/components/schemas/RuleDecision" + CreatePolicyRequest: + type: object + description: Fields required to create a new policy. + required: + - name + properties: + name: + type: string + description: Policy name, unique within the organization. + examples: + - Security Research — hardened + scope: + $ref: "#/components/schemas/Scope" + CreateRuleRequest: + type: object + description: Fields required to create a new rule within a policy's rule set. + required: + - name + - actions + - resources + - decision + properties: + name: + type: string + description: Human-readable label for the rule. + examples: + - allow research mirrors + actions: + $ref: "#/components/schemas/RuleActions" + resources: + $ref: "#/components/schemas/RuleResources" + decision: + $ref: "#/components/schemas/RuleDecision" + UpdateRuleRequest: + type: object + description: Partial update. Only fields present in the body are updated; absent fields are left unchanged. + properties: + name: + type: string + description: Human-readable label for the rule. + examples: + - allow research mirrors + actions: + $ref: "#/components/schemas/RuleActions" + resources: + $ref: "#/components/schemas/RuleResources" + decision: + $ref: "#/components/schemas/RuleDecision" + UpdateRuleResponse: + type: object + description: The rule state before and after the update. + required: + - old + - new + properties: + old: + $ref: "#/components/schemas/Rule" + new: + $ref: "#/components/schemas/Rule" + DeleteRuleResponse: + type: object + description: The deleted rule. + required: + - deleted + properties: + deleted: + $ref: "#/components/schemas/Rule" + UpdatePolicyRequest: + type: object + description: | + Partial update of a policy's metadata. Only fields present in the body are updated; the rule set is not modified here. At least one field must be present. + properties: + name: + type: string + minLength: 1 + description: Policy name, unique within the organization. + examples: + - Security Research + scope: + $ref: "#/components/schemas/ScopePatch" + ScopePatch: + type: object + description: | + Per-sub-field patch of a policy's scope. An omitted sub-field is left unchanged; a present list replaces that dimension, and an empty list clears it (making the policy org-wide for that dimension). + properties: + teams: + type: array + items: + type: string + examples: + - - d290f1ee-6c54-4b01-90e6-d701748f0851 + UpdatePolicyResponse: + type: object + description: The full policy before and after the update. + required: + - old + - new + properties: + old: + $ref: "#/components/schemas/Policy" + new: + $ref: "#/components/schemas/Policy" + DeletePolicyResponse: + type: object + description: The full deleted policy. + required: + - deleted + properties: + deleted: + $ref: "#/components/schemas/Policy" + RuleActions: + type: array + items: + type: string + enum: + - connect:tcp + - connect:udp + - read + - write + minItems: 1 + description: | + Network actions: `connect:tcp`, `connect:udp`. Filesystem actions: `read`, `write`. All actions in a rule must belong to the same domain; mixing network and filesystem actions in one rule is rejected. + examples: + - - connect:tcp + - connect:udp + RuleResources: + type: array + items: + type: string + minItems: 1 + description: | + Network domain: hostnames (for example, `example.com`), wildcard subdomains (`*.example.com` or `**.example.com`), hostnames with port (for example, `example.com:443`), or CIDRs in IPv4 or IPv6 notation (for example, `10.0.0.0/8` or `2001:db8::/32`). Filesystem domain: paths (for example, `/data`); `*` matches within one path segment, `**` matches recursively (for example, `/data/**`). + examples: + - - research.mitre.org + - cve.mitre.org + RuleDecision: + type: string + enum: + - allow + - deny + description: | + Outcome applied when this rule matches a request. `deny` always wins: if any rule in the policy matches with `decision: deny`, the request is denied even if other rules match with `decision: allow`. + examples: + - allow + Error: + type: object + description: Error envelope returned on all non-2xx responses. + required: + - error + properties: + error: + type: object + description: Error detail. + required: + - code + - message + examples: + - code: not_found + message: policy not found + properties: + code: + type: string + description: | + Machine-readable error code. `not_found`: the requested resource does not exist, the org does not exist, or the caller is not a member of the org (the org's existence is not revealed to callers who cannot access it). `conflict`: a resource with the same name already exists. `invalid_argument`: the request body is malformed or fails validation. `unauthenticated`: missing or invalid credentials. `permission_denied`: the org is not entitled to use governance. `limit_exceeded`: the org has reached its maximum number of policies, or the policy has reached its maximum number of rules. `unimplemented`: the endpoint or feature is not yet available. `internal`: unexpected server error. + enum: + - not_found + - conflict + - invalid_argument + - unauthenticated + - permission_denied + - limit_exceeded + - unimplemented + - internal + message: + type: string + responses: + NotFound: + description: Not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: not_found + message: policy not found + Conflict: + description: Conflict + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: conflict + message: policy name already in use + InvalidArgument: + description: Bad request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: invalid_argument + message: name is required + Unauthenticated: + description: Missing or invalid credentials + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: unauthenticated + message: unauthenticated + PermissionDenied: + description: | + Caller lacks the required permission for this org, or the org is not entitled to use governance. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: permission_denied + message: permission denied + Forbidden: + description: | + Caller lacks the required permission for this org, the org is not entitled to use governance (`permission_denied`), or a creation limit has been reached (`limit_exceeded`): the org already has the maximum number of policies, or the policy already has the maximum number of rules. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + permission_denied: + value: + error: + code: permission_denied + message: permission denied + limit_exceeded: + value: + error: + code: limit_exceeded + message: organization has reached the maximum of 100 policies + InternalError: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: internal + message: internal error +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base diff --git a/prototypes/api-docs/converted/hub.yaml b/prototypes/api-docs/converted/hub.yaml new file mode 100644 index 000000000000..e5eb668ef321 --- /dev/null +++ b/prototypes/api-docs/converted/hub.yaml @@ -0,0 +1,4515 @@ +openapi: 3.2.0 +info: + title: Docker HUB API + version: 2-beta + x-logo: + url: https://docs.docker.com/assets/images/logo-docker-main.png + href: /reference + description: | + Docker Hub is a service provided by Docker for finding and sharing container images with your team. + + It is the world's largest library and community for container images. + + In addition to the [Docker Hub UI](https://docs.docker.com/docker-hub/) and [Docker Hub CLI tool](https://github.com/docker/hub-tool#readme) (currently experimental), Docker provides an API that allows you to interact with Docker Hub. + + Browse through the Docker Hub API documentation to explore the supported endpoints. +servers: + - description: Docker HUB API + x-audience: public + url: https://hub.docker.com +tags: + - name: changelog + description: | + See the [Changelog](/reference/api/hub/changelog) for a summary of changes across Docker Hub API versions. + summary: Changelog + kind: info + - name: resources + description: | + The following resources are available to interact with the documented API: + - [Docker Hub CLI tool](https://github.com/docker/hub-tool#readme) (currently experimental) + summary: Resources + kind: info + - name: rate-limiting + description: | + The Docker Hub API is limited on the amount of requests you can perform per minute against it. + + If you haven't hit the limit, each request to the API will return the following headers in the response. + + - `X-RateLimit-Limit` - The limit of requests per minute. + - `X-RateLimit-Remaining` - The remaining amount of calls within the limit period. + - `X-RateLimit-Reset` - The unix timestamp of when the remaining resets. + + If you have hit the limit, you will receive a response status of `429` and the `Retry-After` header in the response. + + The [`Retry-After` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Retry-After) specifies the number of seconds to wait until you can call the API again. + + **Note**: These rate limits are separate from anti-abuse and Docker Hub download, or pull rate limiting. + To learn more about Docker Hub pull rate limiting, see [Usage and limits](https://docs.docker.com/docker-hub/usage/). + summary: Rate Limiting + kind: info + - name: authentication + description: |+ + Most Docker Hub API endpoints require you to authenticate using your Docker credentials before using them. + + Additionally, similar to the Docker Hub UI features, API endpoint responses may vary depending on your subscription (Personal, Pro, or Team) and your account's permissions. + + To learn more about the features available in each subscription and to upgrade your existing subscription, see [Docker Pricing](https://www.docker.com/pricing?ref=Docs&refAction=DocsApiHub). + + # Types + + The Docker Hub API supports the following authentication types. + + You must use each authentication type with the [Create access token](#tag/authentication-api/operation/AuthCreateAccessToken) route to obtain a bearer token. + + ## Password + Using a username and password is the most powerful, yet least secure way + to authenticate with Docker as a user. It allows access to resources + for the user without scopes. + + _In general, it is recommended to use a personal access token (PAT) instead._ + + _**The password authentication type is not available if your organization has SSO enforced.**_ + + ## Personal Access Token (PAT) + Using a username and PAT is the most secure way to authenticate with + Docker as a user. PATs are scoped to specific resources and scopes. + + Currently, a PAT is a more secure password due to limited functionality. + In the future, we may add fine-grained access like organization + access tokens for enhanced usage and security. + + ## Organization Access Token (OAT) + Organization access tokens are scoped to specific resources and scopes + in an organization. They are managed by organization owners. + + These tokens are meant for automation and are not meant to be used by + users. + + # Labels + + These labels will show up on routes in this reference that allow for use of bearer + tokens issued from them. + + + + summary: Authentication + kind: info + - name: authentication-api + description: | + The authentication endpoints allow you to authenticate with Docker Hub APIs. + + For more information, see [Authentication](#tag/authentication). + summary: Authentication + kind: nav + - name: access-tokens + description: | + The Personal Access Token endpoints lets you manage personal access tokens. For more information, see [Access Tokens](https://docs.docker.com/security/access-tokens/personal-access-tokens/). + + You can use a personal access token instead of a password in the [Docker CLI](https://docs.docker.com/engine/reference/commandline/cli/) or in the [Create an authentication token](#operation/PostUsersLogin) route to obtain a bearer token. + + ### Scopes + + For each scope grouping (in this case "repo"), you only need to define 1 scope as any lower scopes are assumed. + For example: If you define `repo:write`, the API assumes the scope of both `repo:read` *and* `repo:public_read` as well. + If you were to define both `repo:write` *and* `repo:read`, then `repo:read` is assumed by `repo:write` and ignored. + + ***Treat your personal access token like your password and keep it secret. You cannot retrieve your token after it is generated.*** + summary: Personal Access Tokens + kind: nav + - name: audit-logs + description: | + The Audit Logs API endpoints allow you to query audit log events across a namespace. + + For more information, see [Audit Logs](https://docs.docker.com/admin/activity-logs/). + summary: Audit Logs + kind: nav + - name: org-settings + description: | + The Org Settings API endpoints allow you to manage your organization's settings. + summary: Org Settings + kind: nav + - name: repositories + description: | + The repository endpoints allow you to access your repository's tags. + summary: Repositories + kind: nav + - name: orgs + x-audience: public + description: | + The organization endpoints allow you to interact with and manage your organizations. + + For more information, see [Organization administration overview](https://docs.docker.com/admin/organization/). + summary: Organizations + kind: nav + - name: groups + x-audience: public + description: | + The groups endpoints allow you to manage your organization's teams and their members. + + For more information, see [Create and manage a team](https://docs.docker.com/admin/organization/manage/manage-a-team/). + summary: Groups (Teams) + kind: nav + - name: invites + x-audience: public + description: | + The invites endpoints allow you to manage invites for users to join your Docker organization. + + For more information, see [Invite members](https://docs.docker.com/admin/organization/manage/members/#invite-members). + summary: Invites + kind: nav + - name: scim + x-audience: public + description: | + SCIM is a provisioning system that lets you manage users within your identity provider (IdP). + + For more information, see [System for Cross-domain Identity management](https://docs.docker.com/security/for-admins/provisioning/scim/). + summary: SCIM + kind: nav + - name: org-access-tokens + x-audience: public + description: | + The organization access token endpoints allow you to manage organization access tokens (OATs). See [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information. + + OATs only authenticate requests to the modern namespace-scoped routes under `/v2/namespaces/{namespace}/repositories/`. Legacy repository paths are OAT unsupported, regardless of the token's scopes, and reject every OAT with `403 token issued from organization access token is not allowed`: + + - `GET /v2/repositories/{namespace}/{repository}` — use [Get repository](#tag/repositories/operation/GetRepository) instead. + - `GET /v2/repositories/{namespace}` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead. + - `GET /v2/users/{username}/repositories` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead. + summary: Organization Access Tokens + kind: nav +paths: + /v2/users/login: + post: + tags: + - authentication-api + summary: Create an authentication token + operationId: PostUsersLogin + security: [] + deprecated: true + description: |+ + Creates and returns a bearer token in JWT format that you can use to authenticate with Docker Hub APIs. + + The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. + + _**As of September 16, 2024, this route requires a personal access token (PAT) instead of a password if your organization has SSO enforced.**_ + + + Deprecated: Use [Create access token](#tag/authentication-api/operation/AuthCreateAccessToken) instead. + + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/UsersLoginRequest" + description: Login details. + required: true + responses: + "200": + description: Authentication successful + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" + "401": + description: Authentication failed or second factor required + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginErrorResponse" + /v2/users/2fa-login: + post: + tags: + - authentication-api + summary: Second factor authentication + operationId: PostUsers2FALogin + security: [] + description: | + When a user has two-factor authentication (2FA) enabled, this is the second call to perform after `/v2/users/login` call. + + Creates and returns a bearer token in JWT format that you can use to authenticate with Docker Hub APIs. + + The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. + + Most Docker Hub APIs require this token either to consume or to get detailed information. For example, to list images in a private repository. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/Users2FALoginRequest" + description: Login details. + required: true + responses: + "200": + description: Authentication successful + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" + "401": + description: Authentication failed + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsers2FALoginErrorResponse" + /v2/auth/token: + post: + tags: + - authentication-api + security: [] + summary: Create access token + operationId: AuthCreateAccessToken + description: | + Creates and returns a short-lived access token in JWT format for use as a bearer when calling Docker APIs. + + If successful, the access token returned should be used in the HTTP Authorization header like + `Authorization: Bearer {access_token}`. + + _**If your organization has SSO enforced, you must use a personal access token (PAT) instead of a password.**_ + requestBody: + content: + application/json: + schema: + description: Request to create access token + type: object + required: + - identifier + - secret + properties: + identifier: + description: | + The identifier of the account to create an access token for. If using a password or personal access token, + this must be a username. If using an organization access token, this must be an organization name. + type: string + example: myusername + secret: + description: | + The secret of the account to create an access token for. This can be a password, personal access token, or + organization access token. + type: string + example: dckr_pat_124509ugsdjga93 + responses: + "200": + description: Token created + content: + application/json: + schema: + $ref: "#/components/schemas/AuthCreateTokenResponse" + "401": + description: Authentication failed + $ref: "#/components/responses/unauthorized" + /v2/access-tokens: + post: + summary: Create personal access token + description: Creates and returns a personal access token. + tags: + - access-tokens + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/createAccessTokenRequest" + required: true + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/createAccessTokensResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" + operationId: postV2AccessTokens + get: + summary: List personal access tokens + description: Returns a paginated list of personal access tokens. + tags: + - access-tokens + security: + - bearerAuth: [] + parameters: + - in: query + name: page + schema: + type: number + default: 1 + - in: query + name: page_size + schema: + type: number + default: 10 + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/getAccessTokensResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" + operationId: getV2AccessTokens + /v2/access-tokens/{uuid}: + parameters: + - in: path + name: uuid + required: true + schema: + type: string + patch: + summary: Update personal access token + description: | + Updates a personal access token partially. You can either update the token's label or enable/disable it. + tags: + - access-tokens + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/patchAccessTokenRequest" + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/patchAccessTokenResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" + operationId: patchV2AccessTokensByUuid + get: + summary: Get personal access token + description: Returns a personal access token by UUID. + tags: + - access-tokens + security: + - bearerAuth: [] + responses: + "200": + description: OK + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/accessToken" + - type: object + properties: + token: + type: string + example: "" + "401": + $ref: "#/components/responses/Unauthorized" + "404": + $ref: "#/components/responses/NotFound" + operationId: getV2AccessTokensByUuid + delete: + summary: Delete personal access token + description: | + Deletes a personal access token permanently. This cannot be undone. + tags: + - access-tokens + security: + - bearerAuth: [] + responses: + "204": + description: A successful response. + "401": + $ref: "#/components/responses/Unauthorized" + "404": + $ref: "#/components/responses/NotFound" + operationId: deleteV2AccessTokensByUuid + /v2/auditlogs/{account}/actions: + get: + summary: List audit log actions + description: |+ + List audit log actions for a namespace to be used as a filter for querying audit log events. + + + operationId: AuditLogs_ListAuditActions + security: + - bearerAuth: [] + responses: + "200": + description: A successful response. + content: + application/json: + schema: + $ref: "#/components/schemas/GetAuditActionsResponse" + examples: + response: + value: + actions: + billing: + actions: + - name: plan.upgrade + description: Occurs when your organization’s billing plan is upgraded to a higher tier plan. + label: Plan Upgraded + - name: plan.downgrade + description: Occurs when your organization’s billing plan is downgraded to a lower tier plan. + label: Plan Downgraded + - name: plan.seat_add + description: Occurs when a seat is added to your organization’s billing plan. + label: Seat Added + - name: plan.seat_remove + description: Occurs when a seat is removed from your organization’s billing plan. + label: Seat Removed + - name: plan.cycle_change + description: Occurs when there is a change in the recurring interval that your organization is charged. + label: Billing Cycle Changed + - name: plan.downgrade_cancel + description: Occurs when a scheduled plan downgrade for your organization is canceled. + label: Plan Downgrade Canceled + - name: plan.seat_removal_cancel + description: Occurs when a scheduled seat removal for an organization’s billing plan is canceled. + label: Seat Removal Canceled + - name: plan.upgrade.request + description: Occurs when a user in your organization requests a plan upgrade. + label: Plan Upgrade Requested + - name: plan.downgrade.request + description: Occurs when a user in your organization requests a plan downgrade. + label: Plan Downgrade Requested + - name: plan.seat_add.request + description: Occurs when a user in your organization requests an increase in the number of seats. + label: Seat Addition Requested + - name: plan.seat_removal.request + description: Occurs when a user in your organization requests a decrease in the number of seats. + label: Seat Removal Requested + - name: plan.cycle_change.request + description: Occurs when a user in your organization requests a change in the billing cycle. + label: Billing Cycle Change Requested + - name: plan.downgrade_cancel.request + description: Occurs when a user in your organization requests a cancellation of a scheduled plan downgrade. + label: Plan Downgrade Cancellation Requested + - name: plan.seat_removal_cancel.request + description: Occurs when a user in your organization requests a cancellation of a scheduled seat removal. + label: Seat Removal Cancellation Requested + - name: plan.product_change + description: Occurs when there is a change in the product that your organization subscribes to. + label: Billing Product Changed + label: Billing + enterprise: + actions: + - name: setting.policy.create + description: Details of adding an admin settings policy + label: Policy created + - name: setting.policy.update + description: Details of updating an admin settings policy + label: Policy updated + - name: setting.policy.delete + description: Details of deleting an admin settings policy + label: Policy deleted + - name: setting.policy.transfer + description: Details of transferring an admin settings policy to another owner + label: Policy transferred + - name: sso.connection.create + description: Details of creating a new org/company SSO connection + label: Create SSO Connection + - name: sso.connection.update + description: Details of updating an existing org/company SSO connection + label: Update SSO Connection + - name: sso.connection.delete + description: Details of deleting an existing org/company SSO connection + label: Delete SSO Connection + - name: sso.connection.enforcement_toggle + description: Details of toggling enforcement on an existing org/company SSO connection + label: Enforce SSO + - name: sso.connection.scim_toggle + description: Details of toggling SCIM on an existing org/company SSO connection + label: Enforce SCIM + - name: sso.connection.scim_token_refresh + description: Details of a SCIM token refresh on an existing org/company SSO connection + label: Refresh SCIM Token + - name: sso.connection.connection_type_change + description: Details of a connection type change on an existing org/company SSO connection + label: Change SSO Connection Type + - name: sso.connection.jit_toggle + description: Details of a JIT toggle on an existing org/company SSO connection + label: Toggle JIT provisioning + label: Enterprise + offload: + actions: + - name: lease.start + description: Details of the started Offload lease. + label: Offload lease start + - name: lease.end + description: Details of the ended Offload lease. + label: Offload lease end + label: Offload + oidc: + actions: + - name: connection.create + description: Details of creating an OIDC connection. + label: OIDC connection created + - name: connection.update + description: Details of updating an OIDC connection. + label: OIDC connection updated + - name: connection.delete + description: Details of deleting an OIDC connection. + label: OIDC connection deleted + label: OIDC + org: + actions: + - name: create + description: Activities related to the creation of a new organization + label: Organization Created + - name: member.add + description: Details of the member added to your organization + label: Organization Member Added + - name: member.remove + description: Details about the member removed from your organization + label: Organization Member Removed + - name: member.role.change + description: Details about the role changed for a member in your organization + label: Member Role Changed + - name: member.invite.send + description: Details of the member invited to your organization + label: Org Member Invited + - name: team.create + description: Activities related to the creation of a team + label: Organization Created + - name: team.update + description: Activities related to the modification of a team + label: Organization Deleted + - name: team.delete + description: Activities related to the deletion of a team + label: Organization Deleted + - name: team.member.add + description: Details of the member added to your team + label: Team Member Added + - name: team.member.remove + description: Details of the member removed from your team + label: Team Member Removed + - name: domain.create + description: Details of the single sign-on domain added to your organization + label: Single Sign-On domain added + - name: domain.verify + description: Details of the single sign-on domain verified for your organization + label: Single Sign-On domain verified + - name: domain.delete + description: Details of the single sign-on domain removed from your organization + label: Single Sign-On domain deleted + - name: domain.auto-provisioning.toggle + description: Details of toggling the Auto-Provisioning feature on a domain on or off + label: Organization Auto-Provisioning Toggled + - name: settings.update + description: Details related to the organization setting that was updated + label: Organization Settings Updated + - name: registry_access.enabled + description: Activities related to enabling Registry Access Management + label: Registry Access Management enabled + - name: registry_access.disabled + description: Activities related to disabling Registry Access Management + label: Registry Access Management disabled + - name: registry_access.registry_added + description: Activities related to the addition of a registry + label: Registry Access Management registry added + - name: registry_access.registry_updated + description: Details related to the registry that was updated + label: Registry Access Management registry updated + - name: registry_access.registry_removed + description: Activities related to the removal of a registry + label: Registry Access Management registry removed + - name: access_token.create + description: Access token created in organization + label: Access token created + - name: access_token.update + description: Access token updated in organization + label: Access token updated + - name: access_token.delete + description: Access token deleted in organization + label: Access token deleted + - name: customrole.create + description: A custom role was created + label: Custom role created + - name: customrole.update + description: An existing custom role was updated + label: Custom role updated + - name: customrole.delete + description: A custom role was deleted + label: Custom role deleted + - name: securepolicyconfigure.create + description: A secure policy configuration was created + label: Secure Policy Configuration created + - name: securepolicyconfigure.update + description: A secure policy configuration was updated + label: Secure Policy Configuration updated + - name: securepolicyconfigure.delete + description: A secure policy configuration was deleted + label: Secure Policy Configuration deleted + - name: securepolicyclient.create + description: A secure policy client was created + label: Secure Policy Client created + - name: securepolicyclient.update + description: A secure policy client was updated + label: Secure Policy Client updated + - name: securepolicyclient.delete + description: A secure policy client was deleted + label: Secure Policy Client deleted + - name: securepolicyprofile.create + description: A secure policy profile was created + label: Secure Policy Profile created + - name: securepolicyprofile.update + description: A secure policy profile was updated + label: Secure Policy Profile updated + - name: securepolicyprofile.delete + description: A secure policy profile was deleted + label: Secure Policy Profile deleted + label: Organization + repo: + actions: + - name: create + description: Activities related to the creation of a new repository + label: Repository Created + - name: update + description: Activities related to the modification of a repository + label: Repository Updated + - name: delete + description: Activities related to the deletion of a repository + label: Repository Deleted + - name: change_privacy + description: Details related to the privacy policies that were updated + label: Privacy Changed + - name: category.updated + description: Details related to updating a repository categories + label: Categories updated + - name: immutable.tags.updated + description: Details related to updating tag immutability of a repository + label: Tag immutability updated + - name: tag.push + description: Activities related to the tags pushed + label: Tag Pushed + - name: tag.delete + description: Activities related to the tags deleted + label: Tag Deleted + label: Repository + "429": + description: "" + content: + application/json: + schema: {} + examples: + response: + value: + detail: Rate limit exceeded + error: false + "500": + description: "" + content: + application/json: + schema: {} + default: + description: An unexpected error response. + content: + application/json: + schema: + $ref: "#/components/schemas/rpcStatus" + parameters: + - name: account + description: Namespace to query audit log actions for. + in: path + required: true + schema: + type: string + tags: + - audit-logs + /v2/auditlogs/{account}: + get: + summary: List audit log events + description: |+ + List audit log events for a given namespace. + + + operationId: AuditLogs_ListAuditLogs + security: + - bearerAuth: [] + responses: + "200": + description: A successful response. + content: + application/json: + schema: + $ref: "#/components/schemas/GetAuditLogsResponse" + examples: + response: + value: + logs: + - account: docker + action: repo.tag.push + name: docker/example + actor: docker + data: + digest: sha256:c1ae9c435032a276f80220c7d9b40f76266bbe79243d34f9cda30b76fe114dfa + tag: latest + timestamp: 2021-02-19T01:34:35Z + action_description: | + pushed the tag latest with the digest sha256:c1ae9c435032a to the repository docker/example + - account: docker + action: offload.lease.end + name: docker + actor: docker + data: + lease_id: l_3EgPuRCjtUqT279CFPOQWcO8zOf + resource_type: run_4cpu_8mem + started_at: 2026-06-04T18:24:21Z + updated_at: 2026-06-04T18:36:43Z + org_id: b908ca6e-b9a9-4a53-a9a5-6bec96f72432 + user_id: ecae6747-e42c-43cb-925d-cfce1ab32b02 + timestamp: 2026-06-04T18:36:43Z + action_description: offload lease 'l_3EgPuRCjtUqT279CFPOQWcO8zOf' ended, ran for '12m22s' + "429": + description: "" + content: + application/json: + schema: {} + examples: + response: + value: + detail: Rate limit exceeded + error: false + "500": + description: "" + content: + application/json: + schema: {} + default: + description: An unexpected error response. + content: + application/json: + schema: + $ref: "#/components/schemas/rpcStatus" + parameters: + - name: account + description: Namespace to query audit logs for. + in: path + required: true + schema: + type: string + - name: action + description: | + action name one of ["repo.tag.push", ...]. Optional parameter to filter specific audit log actions. + in: query + required: false + schema: + type: string + - name: name + description: | + name. Optional parameter to filter audit log events to a specific name. For repository events, this is the name of the repository. For organization events, this is the name of the organization. For team member events, this is the username of the team member. + in: query + required: false + schema: + type: string + - name: actor + description: | + actor name. Optional parameter to filter audit log events to the specific user who triggered the event. + in: query + required: false + schema: + type: string + - name: from + description: Start of the time window you wish to query audit events for. + in: query + required: false + schema: + type: string + format: date-time + - name: to + description: End of the time window you wish to query audit events for. + in: query + required: false + schema: + type: string + format: date-time + - name: page + description: page - specify page number. Page number to get. + in: query + required: false + schema: + type: integer + format: int32 + default: 1 + - name: page_size + description: page_size - specify page size. Number of events to return per page. + in: query + required: false + schema: + type: integer + format: int32 + default: 25 + tags: + - audit-logs + /v2/orgs/{name}/settings: + parameters: + - in: path + name: name + description: Name of the organization. + required: true + schema: + type: string + get: + summary: Get organization settings + description: | + Returns organization settings by name. + tags: + - org-settings + security: + - bearerAuth: [] + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/orgSettings" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + operationId: getV2OrgsByNameSettings + put: + summary: Update organization settings + description: | + Updates an organization's settings. Some settings are only used when the organization is on a business subscription. + + ***Only users with administrative privileges for the organization (owner role) can modify these settings.*** + + The following settings are only used on a business subscription: + - `restricted_images` + tags: + - org-settings + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + required: + - restricted_images + properties: + restricted_images: + allOf: + - $ref: "#/components/schemas/restricted_images" + - type: object + required: + - enabled + - allow_official_images + - allow_verified_publishers + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/orgSettings" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + operationId: putV2OrgsByNameSettings + /v2/orgs/{name}/access-tokens: + post: + summary: Create access token + description: | + Create an access token for an organization. + tags: + - org-access-tokens + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/createOrgAccessTokenRequest" + required: true + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/createOrgAccessTokenResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + operationId: postV2OrgsByNameAccessTokens + get: + summary: List access tokens + description: | + List access tokens for an organization. + tags: + - org-access-tokens + security: + - bearerAuth: [] + parameters: + - in: query + name: page + schema: + type: number + default: 1 + - in: query + name: page_size + schema: + type: number + default: 10 + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/getOrgAccessTokensResponse" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + operationId: getV2OrgsByNameAccessTokens + /v2/orgs/{org_name}/access-tokens/{access_token_id}: + parameters: + - $ref: "#/components/parameters/org_name" + - in: path + name: access_token_id + required: true + schema: + type: string + description: The ID of the access token to retrieve + example: a7a5ef25-8889-43a0-8cc7-f2a94268e861 + get: + summary: Get access token + description: | + Get details of a specific access token for an organization. + tags: + - org-access-tokens + security: + - bearerAuth: [] + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/getOrgAccessTokenResponse" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + operationId: getV2OrgsByOrgNameAccessTokensByAccessTokenId + patch: + summary: Update access token + description: | + Update a specific access token for an organization. + tags: + - org-access-tokens + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/updateOrgAccessTokenRequest" + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/updateOrgAccessTokenResponse" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + operationId: patchV2OrgsByOrgNameAccessTokensByAccessTokenId + delete: + summary: Delete access token + description: | + Delete a specific access token for an organization. This action cannot be undone. + tags: + - org-access-tokens + security: + - bearerAuth: [] + responses: + "204": + description: Access token deleted successfully + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + operationId: deleteV2OrgsByOrgNameAccessTokensByAccessTokenId + /v2/namespaces/{namespace}/repositories/{repository}/tags: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + get: + operationId: ListRepositoryTags + summary: List repository tags + description: |+ + Returns the list of tags for the specified repository. + + + tags: + - repositories + security: + - bearerAuth: [] + parameters: + - in: query + name: page + required: false + schema: + type: integer + description: Page number to get. Defaults to 1. + - in: query + name: page_size + required: false + schema: + type: integer + description: Number of items to get per page. Defaults to 10. Max of 100. + responses: + "200": + $ref: "#/components/responses/list_tags" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + head: + summary: Check repository tags + description: |+ + Checks whether the repository has any tags. + + + tags: + - repositories + security: + - bearerAuth: [] + responses: + "200": + description: Repository contains tags + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + operationId: headV2NamespacesByNamespaceRepositoriesByRepositoryTags + /v2/namespaces/{namespace}/repositories/{repository}/tags/{tag}: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + - $ref: "#/components/parameters/tag" + get: + operationId: GetRepositoryTag + summary: Read repository tag + description: |+ + Returns details for a specific tag in the specified repository. + + + tags: + - repositories + security: + - bearerAuth: [] + responses: + "200": + $ref: "#/components/responses/get_tag" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + head: + summary: Check repository tag + description: |+ + Checks whether the specified tag exists in the repository. + + + tags: + - repositories + security: + - bearerAuth: [] + responses: + "200": + description: Repository tag exists + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + operationId: headV2NamespacesByNamespaceRepositoriesByRepositoryTagsByTag + /v2/namespaces/{namespace}/repositories/{repository}/immutabletags: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + patch: + operationId: UpdateRepositoryImmutableTags + summary: Update repository immutable tags + description: |+ + Updates the immutable tags configuration for this repository. + + **Only users with administrative privileges for the repository can modify these settings.** + + + tags: + - repositories + security: + - bearerAuth: [] + requestBody: + $ref: "#/components/requestBodies/update_repository_immutable_tags_request" + responses: + "200": + $ref: "#/components/responses/update_repository_immutable_tags_response" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + /v2/namespaces/{namespace}/repositories/{repository}/immutabletags/verify: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + post: + operationId: VerifyRepositoryImmutableTags + summary: Verify repository immutable tags + description: |+ + Validates the immutable tags regex passed in the request body and returns a list of tags matching it in this repository. + + **Only users with administrative privileges for the repository can call this endpoint.** + + + tags: + - repositories + security: + - bearerAuth: [] + requestBody: + $ref: "#/components/requestBodies/immutable_tags_verify_request" + responses: + "200": + $ref: "#/components/responses/immutable_tags_verify_response" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + /v2/repositories/{namespace}/{repository}/groups: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + post: + summary: Assign a group (Team) to a repository for access + description: |+ + Assigns an organization group (team) to a repository with a specified permission level. + + + tags: + - repositories + operationId: CreateRepositoryGroup + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/RepositoryGroupCreationRequest" + example: + group_id: 12345 + permission: write + responses: + "200": + description: Repository group permission created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/RepositoryGroup" + example: + group_name: developers + permission: write + group_id: 12345 + "400": + description: Bad Request - Invalid request parameters + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/NotFound" + /v2/namespaces/{namespace}/repositories: + parameters: + - $ref: "#/components/parameters/namespace" + get: + operationId: listNamespaceRepositories + summary: List repositories in a namespace + description: | + Returns a list of repositories within the specified namespace (organization or user). + + Public repositories are accessible to everyone, while private repositories require appropriate authentication and permissions. + + + + **OAT listing behavior**: an OAT with the `scope-repository-list` scope sees all repositories including private ones. An OAT without that scope only sees public repositories. This filtering is silent: the response is a normal `200` with no indication that private repositories were withheld. + tags: + - repositories + security: + - bearerAuth: [] + - {} + parameters: + - in: query + name: page + required: false + schema: + type: integer + minimum: 1 + default: 1 + description: Page number to get. Defaults to 1. + - in: query + name: page_size + required: false + schema: + type: integer + minimum: 1 + maximum: 100 + default: 10 + description: Number of repositories to get per page. Defaults to 10. Max of 100. + - in: query + name: name + required: false + schema: + type: string + description: Filter repositories by name (partial match). + - in: query + name: ordering + required: false + schema: + type: string + enum: + - name + - -name + - last_updated + - -last_updated + - pull_count + - -pull_count + description: | + Order repositories by the specified field. Prefix with '-' for descending order. + Available options: + - `name` / `-name`: Repository name (ascending/descending) + - `last_updated` / `-last_updated`: Last update time (ascending/descending) + - `pull_count` / `-pull_count`: Number of pulls (ascending/descending) + responses: + "200": + description: List of repositories + content: + application/json: + schema: + $ref: "#/components/schemas/list_repositories_response" + examples: + repositories_list: + value: + count: 287 + next: https://hub.docker.com/v2/namespaces/docker/repositories?page=2&page_size=2 + previous: null + results: + - name: highland_builder + namespace: docker + repository_type: image + status: 1 + status_description: active + description: Image for performing Docker build requests + is_private: false + star_count: 7 + pull_count: 15722123 + last_updated: 2023-06-20T10:44:45.459826Z + last_modified: 2024-10-16T13:48:34.145251Z + date_registered: 2015-05-19T21:13:35.937763Z + affiliation: "" + media_types: + - application/octet-stream + - application/vnd.docker.container.image.v1+json + - application/vnd.docker.distribution.manifest.v1+prettyjws + content_types: + - unrecognized + - image + categories: + - name: Languages & frameworks + slug: languages-and-frameworks + - name: Integration & delivery + slug: integration-and-delivery + - name: Operating systems + slug: operating-systems + storage_size: 488723114800 + - name: whalesay + namespace: docker + repository_type: null + status: 1 + status_description: active + description: An image for use in the Docker demo tutorial + is_private: false + star_count: 757 + pull_count: 130737682 + last_updated: 2015-06-19T19:06:27.388123Z + last_modified: 2024-10-16T13:48:34.145251Z + date_registered: 2015-06-09T18:16:36.527329Z + affiliation: "" + media_types: + - application/vnd.docker.distribution.manifest.v1+prettyjws + content_types: + - image + categories: + - name: Languages & frameworks + slug: languages-and-frameworks + - name: Integration & delivery + slug: integration-and-delivery + storage_size: 103666708 + "400": + description: Bad Request - Invalid request parameters + content: + application/json: + schema: + $ref: "#/components/schemas/error" + examples: + invalid_ordering: + summary: Invalid ordering value + value: + fields: + ordering: + - "Invalid ordering value. Must be one of: name, -name, last_updated, -last_updated, pull_count, -pull_count" + text: Invalid ordering value + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + description: Page not found - occurs when requesting a page number `>1` that exceeds the available results + content: + application/json: + schema: + $ref: "#/components/schemas/error" + post: + summary: Create a new repository + description: |+ + Creates a new repository within the specified namespace. The repository will be created + with the provided metadata including name, description, and privacy settings. + + + operationId: CreateRepository + tags: + - repositories + security: + - BearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/repo_creation_request" + example: + name: my-app + namespace: myorganization + description: A sample application repository + full_description: This is a comprehensive description of my application repository that contains additional details about the project. + registry: docker.io + is_private: false + responses: + "201": + description: Repository created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/repository_info" + example: + name: my-app + namespace: myorganization + repository_type: image + status: 1 + status_description: Active + description: A sample application repository + is_private: false + is_automated: false + star_count: 0 + pull_count: 0 + last_updated: 2025-01-20T10:30:00Z + date_registered: 2025-01-20T10:30:00Z + collaborator_count: 0 + hub_user: myorganization + has_starred: false + full_description: This is a comprehensive description of my application repository that contains additional details about the project. + media_types: [] + content_types: [] + categories: [] + immutable_tags_settings: + enabled: false + rules: [] + storage_size: null + source: null + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + "500": + $ref: "#/components/responses/internal_error" + /v2/namespaces/{namespace}/repositories/{repository}: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + get: + operationId: GetRepository + summary: Get repository in a namespace + description: |+ + Returns a repository within the specified namespace (organization or user). + + Public repositories are accessible to everyone, while private repositories require appropriate authentication and permissions. + + + tags: + - repositories + security: + - bearerAuth: [] + - {} + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/repository_info" + example: + name: my-app + namespace: myorganization + repository_type: image + status: 1 + status_description: Active + description: A sample application repository + is_private: false + is_automated: false + star_count: 0 + pull_count: 0 + last_updated: 2025-01-20T10:30:00Z + date_registered: 2025-01-20T10:30:00Z + collaborator_count: 0 + hub_user: myorganization + has_starred: false + full_description: This is a comprehensive description of my application repository that contains additional details about the project. + media_types: [] + content_types: [] + categories: [] + immutable_tags_settings: + enabled: false + rules: [] + storage_size: null + source: null + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + "500": + $ref: "#/components/responses/internal_error" + head: + operationId: CheckRepository + summary: Check repository in a namespace + description: |+ + Check a repository within the specified namespace (organization or user). + + Public repositories are accessible to everyone, while private repositories require appropriate authentication and permissions. + + + tags: + - repositories + security: + - bearerAuth: [] + - {} + responses: + "200": {} + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + "500": + $ref: "#/components/responses/internal_error" + /v2/orgs/{org_name}/members: + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/search" + - $ref: "#/components/parameters/page" + - $ref: "#/components/parameters/page_size" + - $ref: "#/components/parameters/invites" + - $ref: "#/components/parameters/type" + - $ref: "#/components/parameters/role" + get: + summary: List org members + description: |+ + Returns a list of members for an organization. + + _The following fields are only visible to orgs with insights enabled._ + + - `last_logged_in_at` + - `last_seen_at` + - `last_desktop_version` + + To make visible, please see [View Insights for organization users](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). + + + tags: + - orgs + security: + - bearerAuth: [] + responses: + "200": + description: List of members + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/org_member_paginated" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: getV2OrgsByOrgNameMembers + /v2/orgs/{org_name}/members/export: + parameters: + - $ref: "#/components/parameters/org_name" + get: + summary: Export org members CSV + description: |+ + Export members of an organization as a CSV + + + tags: + - orgs + security: + - bearerAuth: [] + responses: + "200": + description: Exported members + content: + text/csv: + schema: + type: array + items: + type: object + required: + - Name + - Username + - Email + - Type + - Role + - Date Joined + properties: + Name: + type: string + description: First and last name of the member + Username: + type: string + description: Username of the member + Email: + type: string + description: Email address of the member + Type: + type: string + description: Type of the member + enum: + - Invitee + - User + Permission: + type: string + description: Permission of the member + enum: + - Owner + - Member + Teams: + type: string + description: Comma-separated list of teams the member is part of + example: team-1, team-2 + Date Joined: + type: string + description: Date the member joined the organization + example: 2020-01-01 15:00:51.193355 +0000 UTC + headers: + Content-Disposition: + schema: + type: string + example: attachment;filename="{org_name}-members-{timestamp}.csv" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: getV2OrgsByOrgNameMembersExport + /v2/orgs/{org_name}/members/{username}: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/username" + put: + summary: Update org member (role) + description: |+ + Updates the role of a member in the organization. + ***Only users in the "owners" group of the organization can use this endpoint.*** + + + tags: + - orgs + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + required: + - role + properties: + role: + type: string + description: | + Role of the member. Valid values are the core roles + `owner`, `editor`, and `member`, or the name of an + existing [custom role](https://docs.docker.com/enterprise/security/roles-and-permissions/custom-roles/manage/). + Use the custom role's name identifier, not its label or UUID. + example: owner + responses: + "200": + description: Member role updated + content: + application/json: + schema: + $ref: "#/components/schemas/org_member" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: putV2OrgsByOrgNameMembersByUsername + delete: + summary: Remove member from org + description: |+ + Removes the member from the org, ie. all groups in the org, unless they're the last owner + + + tags: + - orgs + security: + - bearerAuth: [] + responses: + "204": + description: Member removed successfully + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: deleteV2OrgsByOrgNameMembersByUsername + /v2/orgs/{org_name}/invites: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + get: + summary: List org invites + description: |+ + Return all pending invites for a given org, only team owners can call this endpoint + + + tags: + - invites + security: + - bearerAuth: [] + responses: + "200": + description: "" + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + $ref: "#/components/schemas/invite" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: getV2OrgsByOrgNameInvites + /v2/orgs/{org_name}/groups: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + get: + summary: Get groups of an organization + description: Get groups of an organization. + tags: + - groups + security: + - bearerAuth: [] + parameters: + - $ref: "#/components/parameters/page" + - $ref: "#/components/parameters/page_size" + - in: query + name: username + schema: + type: string + description: Get groups for the specified username in the organization. + - in: query + name: search + schema: + type: string + description: Get groups for the specified group in the organization. + responses: + "200": + description: "" + content: + application/json: + schema: + properties: + count: + type: number + example: 1 + next: + type: string + example: null + previous: + type: string + example: null + results: + type: array + items: + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: getV2OrgsByOrgNameGroups + post: + summary: Create a new group + description: |+ + Create a new group within an organization. + + + tags: + - groups + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + required: + - name + properties: + name: + type: string + description: + type: string + responses: + "201": + description: Group created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/org_group" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + operationId: postV2OrgsByOrgNameGroups + /v2/orgs/{org_name}/groups/{group_name}: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" + get: + summary: Get a group of an organization + description: Get a group of an organization. + tags: + - groups + security: + - bearerAuth: [] + responses: + "200": + description: "" + content: + application/json: + schema: + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: getV2OrgsByOrgNameGroupsByGroupName + put: + summary: Update the details for an organization group + description: Update the details for an organization group. + tags: + - groups + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + required: + - name + properties: + name: + type: string + description: + type: string + responses: + "200": + description: "" + content: + application/json: + schema: + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: putV2OrgsByOrgNameGroupsByGroupName + patch: + summary: Update some details for an organization group + description: Update some details for an organization group. + tags: + - groups + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + properties: + name: + type: string + description: + type: string + role: + type: string + description: | + Role assigned to the team. Valid values are the core roles + `owner`, `editor`, and `member`, or the name of an + existing [custom role](https://docs.docker.com/enterprise/security/roles-and-permissions/custom-roles/manage/). + Use the custom role's name identifier, not its label or UUID. + responses: + "200": + description: "" + content: + application/json: + schema: + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: patchV2OrgsByOrgNameGroupsByGroupName + delete: + summary: Delete an organization group + description: Delete an organization group. + tags: + - groups + security: + - bearerAuth: [] + responses: + "204": + description: Group deleted successfully + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: deleteV2OrgsByOrgNameGroupsByGroupName + /v2/orgs/{org_name}/groups/{group_name}/members: + x-audience: public + get: + security: + - bearerAuth: [] + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" + - $ref: "#/components/parameters/page" + - $ref: "#/components/parameters/page_size" + - in: query + name: search + schema: + type: string + description: Search members by username, full_name or email. + summary: List members of a group + description: |+ + List the members (users) that are in a group. + If user is owner of the org or has otherwise elevated permissions, they can search by email and the result will also contain emails. + + + tags: + - groups + responses: + "200": + description: "" + content: + application/json: + schema: + properties: + count: + type: number + example: 1 + next: + type: string + example: null + previous: + type: string + example: null + results: + type: array + items: + $ref: "#/components/schemas/group_member" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: getV2OrgsByOrgNameGroupsByGroupNameMembers + post: + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" + summary: Add a member to a group + description: Add a member to a group. + tags: + - groups + security: + - bearerAuth: [] + requestBody: + $ref: "#/components/requestBodies/add_member_to_org_group" + responses: + "200": + description: OK + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + "500": + $ref: "#/components/responses/internal_error" + operationId: postV2OrgsByOrgNameGroupsByGroupNameMembers + /v2/orgs/{org_name}/groups/{group_name}/members/{username}: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" + - $ref: "#/components/parameters/username" + delete: + summary: Remove a user from a group + description: Remove a user from a group. + tags: + - groups + security: + - bearerAuth: [] + responses: + "204": + description: User removed successfully + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: deleteV2OrgsByOrgNameGroupsByGroupNameMembersByUsername + /v2/invites/{id}: + x-audience: public + parameters: + - in: path + name: id + required: true + schema: + type: string + delete: + summary: Cancel an invite + description: |+ + Mark the invite as cancelled so it doesn't show up on the list of pending invites + + + tags: + - invites + security: + - bearerAuth: [] + responses: + "204": + description: "" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: deleteV2InvitesById + /v2/invites/{id}/resend: + x-audience: public + parameters: + - in: path + name: id + schema: + type: string + required: true + patch: + summary: Resend an invite + description: |+ + Resend a pending invite to the user, any org owner can resend an invite + + + tags: + - invites + security: + - bearerAuth: [] + responses: + "204": + description: "" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + operationId: patchV2InvitesByIdResend + /v2/invites/bulk: + x-audience: public + parameters: + - $ref: "#/components/parameters/bulk_invite" + post: + summary: Bulk create invites + description: |+ + Create multiple invites by emails or DockerIDs. Only a team owner can create invites. + + + tags: + - invites + requestBody: + $ref: "#/components/requestBodies/bulk_invite_request" + security: + - bearerAuth: [] + responses: + "202": + description: Accepted + content: + application/json: + schema: + type: object + properties: + invitees: + $ref: "#/components/schemas/bulk_invite" + "400": + $ref: "#/components/responses/bad_request" + "409": + $ref: "#/components/responses/conflict" + operationId: postV2InvitesBulk + /v2/scim/2.0/ServiceProviderConfig: + x-audience: public + get: + summary: Get service provider config + description: | + Returns a service provider config for Docker's configuration. + tags: + - scim + security: + - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_service_provider_config_resp" + "401": + $ref: "#/components/responses/scim_unauthorized" + "500": + $ref: "#/components/responses/scim_error" + operationId: getV2Scim20ServiceProviderConfig + /v2/scim/2.0/ResourceTypes: + x-audience: public + get: + summary: List resource types + description: | + Returns all resource types supported for the SCIM configuration. + tags: + - scim + security: + - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_resource_types_resp" + "401": + $ref: "#/components/responses/scim_unauthorized" + "500": + $ref: "#/components/responses/scim_error" + operationId: getV2Scim20ResourceTypes + /v2/scim/2.0/ResourceTypes/{name}: + x-audience: public + get: + summary: Get a resource type + description: | + Returns a resource type by name. + tags: + - scim + parameters: + - name: name + in: path + schema: + type: string + example: User + required: true + security: + - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_resource_type_resp" + "401": + $ref: "#/components/responses/scim_unauthorized" + "404": + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" + operationId: getV2Scim20ResourceTypesByName + /v2/scim/2.0/Schemas: + x-audience: public + get: + summary: List schemas + description: | + Returns all schemas supported for the SCIM configuration. + tags: + - scim + security: + - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_schemas_resp" + "401": + $ref: "#/components/responses/scim_unauthorized" + "500": + $ref: "#/components/responses/scim_error" + operationId: getV2Scim20Schemas + /v2/scim/2.0/Schemas/{id}: + x-audience: public + get: + summary: Get a schema + description: | + Returns a schema by ID. + tags: + - scim + parameters: + - name: id + in: path + schema: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + required: true + security: + - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_schema_resp" + "401": + $ref: "#/components/responses/scim_unauthorized" + "404": + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" + operationId: getV2Scim20SchemasById + /v2/scim/2.0/Users: + x-audience: public + get: + summary: List users + description: | + Returns paginated users for an organization. Use `startIndex` and `count` query parameters to receive paginated results. + + **Sorting:** + + Sorting allows you to specify the order in which resources are returned by specifying a combination of `sortBy` and `sortOrder` query parameters. + + The `sortBy` parameter specifies the attribute whose value will be used to order the returned responses. The `sortOrder` parameter defines the order in which the `sortBy` parameter is applied. Allowed values are "ascending" and "descending". + + **Filtering:** + + You can request a subset of resources by specifying the `filter` query parameter containing a filter expression. Attribute names and attribute operators used in filters are case insensitive. The filter parameter must contain at least one valid expression. Each expression must contain an attribute name followed by an attribute operator and an optional value. + + Supported operators are listed below. + + - `eq` equal + - `ne` not equal + - `co` contains + - `sw` starts with + - `and` Logical "and" + - `or` Logical "or" + - `not` "Not" function + - `()` Precedence grouping + tags: + - scim + security: + - scimToken: [] + parameters: + - name: startIndex + in: query + schema: + type: integer + minimum: 1 + description: "" + example: 1 + - name: count + in: query + schema: + type: integer + minimum: 1 + maximum: 200 + description: "" + example: 10 + - name: filter + in: query + schema: + type: string + description: "" + example: userName eq "jon.snow@docker.com" + - $ref: "#/components/parameters/scim_attributes" + - name: sortOrder + in: query + schema: + type: string + enum: + - ascending + - descending + - name: sortBy + in: query + schema: + type: string + description: User attribute to sort by. + example: userName + responses: + "200": + $ref: "#/components/responses/scim_get_users_resp" + "400": + $ref: "#/components/responses/scim_bad_request" + "401": + $ref: "#/components/responses/scim_unauthorized" + "403": + $ref: "#/components/responses/scim_forbidden" + "404": + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" + operationId: getV2Scim20Users + post: + summary: Create user + description: | + Creates a user. If the user already exists by email, they are assigned to the organization on the "company" team. + tags: + - scim + security: + - scimToken: [] + requestBody: + $ref: "#/components/requestBodies/scim_create_user_request" + responses: + "201": + $ref: "#/components/responses/scim_create_user_resp" + "400": + $ref: "#/components/responses/scim_bad_request" + "401": + $ref: "#/components/responses/scim_unauthorized" + "403": + $ref: "#/components/responses/scim_forbidden" + "404": + $ref: "#/components/responses/scim_not_found" + "409": + $ref: "#/components/responses/scim_conflict" + "500": + $ref: "#/components/responses/scim_error" + operationId: postV2Scim20Users + /v2/scim/2.0/Users/{id}: + x-audience: public + parameters: + - $ref: "#/components/parameters/scim_user_id" + get: + summary: Get a user + description: | + Returns a user by ID. + tags: + - scim + security: + - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_user_resp" + "400": + $ref: "#/components/responses/scim_bad_request" + "401": + $ref: "#/components/responses/scim_unauthorized" + "403": + $ref: "#/components/responses/scim_forbidden" + "404": + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" + operationId: getV2Scim20UsersById + put: + summary: Update a user + description: | + Updates a user. This route is used to change the user's name, activate, and deactivate the user. + tags: + - scim + security: + - scimToken: [] + requestBody: + $ref: "#/components/requestBodies/scim_update_user_request" + responses: + "200": + $ref: "#/components/responses/scim_update_user_resp" + "400": + $ref: "#/components/responses/scim_bad_request" + "401": + $ref: "#/components/responses/scim_unauthorized" + "403": + $ref: "#/components/responses/scim_forbidden" + "404": + $ref: "#/components/responses/scim_not_found" + "409": + $ref: "#/components/responses/scim_conflict" + "500": + $ref: "#/components/responses/scim_error" + operationId: putV2Scim20UsersById +components: + responses: + BadRequest: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/ValueError" + Unauthorized: + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + Forbidden: + description: Forbidden + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + NotFound: + description: Not Found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + list_tags: + description: list repository tags + content: + application/json: + schema: + $ref: "#/components/schemas/paginated_tags" + get_tag: + description: repository tag + content: + application/json: + schema: + $ref: "#/components/schemas/tag" + bad_request: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/error" + unauthorized: + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/error" + forbidden: + description: Forbidden + content: + application/json: + schema: + $ref: "#/components/schemas/error" + not_found: + description: Not Found + content: + application/json: + schema: + $ref: "#/components/schemas/error" + conflict: + description: Conflict + content: + application/json: + schema: + $ref: "#/components/schemas/error" + internal_error: + description: Internal + content: + application/json: + schema: + $ref: "#/components/schemas/error" + scim_bad_request: + description: Bad Request + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "400" + scimType: + type: string + description: Some types of errors will return this per the specification. + scim_unauthorized: + description: Unauthorized + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "401" + scim_forbidden: + description: Forbidden + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "403" + scim_not_found: + description: Not Found + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "404" + scim_conflict: + description: Conflict + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "409" + scim_error: + description: Internal Error + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "500" + scim_get_service_provider_config_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_service_provider_config" + scim_get_resource_types_resp: + description: "" + content: + application/scim+json: + schema: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + totalResults: + type: integer + example: 1 + resources: + type: array + items: + $ref: "#/components/schemas/scim_resource_type" + scim_get_resource_type_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_resource_type" + scim_get_schemas_resp: + description: "" + content: + application/scim+json: + schema: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + totalResults: + type: integer + example: 1 + resources: + type: array + items: + $ref: "#/components/schemas/scim_schema" + scim_get_schema_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_schema" + scim_get_users_resp: + description: "" + content: + application/scim+json: + schema: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - urn:ietf:params:scim:api:messages:2.0:ListResponse + totalResults: + type: integer + example: 1 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 10 + resources: + type: array + items: + $ref: "#/components/schemas/scim_user" + scim_create_user_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_user" + scim_get_user_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_user" + scim_update_user_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_user" + update_repository_immutable_tags_response: + description: "" + content: + application/json: + schema: + $ref: "#/components/schemas/repository_info" + immutable_tags_verify_response: + description: "" + content: + application/json: + schema: + $ref: "#/components/schemas/immutable_tags_verify_response" + schemas: + update_repository_immutable_tags_request: + type: object + properties: + immutable_tags: + type: boolean + description: Whether immutable tags are enabled + immutable_tags_rules: + type: array + items: + type: string + description: List of immutable tag rules + example: + - v.* + - .*-RELEASE + required: + - immutable_tags + - immutable_tags_rules + repo_creation_request: + type: object + required: + - name + - namespace + properties: + name: + type: string + description: | + The name of the repository. Must be 2-255 characters long and may only include + alphanumeric characters, periods (.), underscores (_), or hyphens (-). + Letters must be lowercase. + minLength: 2 + maxLength: 255 + pattern: ^[a-z0-9]+(?:[._-][a-z0-9]+)*$ + example: my-app + namespace: + type: string + description: The namespace where the repository will be created + example: myorganization + description: + type: string + description: Short description of the repository + maxLength: 100 + example: A sample application repository + full_description: + type: string + description: Detailed description of the repository + maxLength: 25000 + example: This is a comprehensive description of my application repository that contains additional details about the project, its purpose, usage instructions, and other relevant information. + registry: + type: string + description: The registry where the repository will be hosted + example: docker.io + is_private: + type: boolean + description: Whether the repository should be private + default: false + example: false + RepositoryGroupCreationRequest: + type: object + required: + - group_id + - permission + properties: + group_id: + type: integer + format: int64 + description: The ID of the organization group to grant access to + example: 12345 + permission: + type: string + description: | + The permission level to grant to the group: + - read: Can view and pull from the repository + - write: Can view, pull, and push to the repository + - admin: Can view, pull, push, and manage repository settings + enum: + - read + - write + - admin + example: write + RepositoryGroup: + type: object + properties: + group_name: + type: string + description: The name of the group + example: developers + permission: + type: string + description: The permission level granted to the group + enum: + - read + - write + - admin + example: write + group_id: + type: integer + format: int64 + description: The ID of the group + example: 12345 + repository_info: + type: object + properties: + user: + type: string + description: Username of the repository owner + name: + type: string + description: Repository name + namespace: + type: string + description: Repository namespace + repository_type: + type: + - string + - "null" + description: Type of the repository + status: + type: integer + description: Repository status code + status_description: + type: string + description: Description of the repository status + description: + type: string + description: Short description of the repository + is_private: + type: boolean + description: Whether the repository is private + is_automated: + type: boolean + description: Whether the repository has automated builds + star_count: + type: integer + format: int64 + description: Number of stars + pull_count: + type: integer + format: int64 + description: Number of pulls + last_updated: + type: string + format: date-time + example: 2021-01-05T21:06:53.506400Z + description: ISO 8601 timestamp of when repository was last updated + last_modified: + type: + - string + - "null" + format: date-time + example: 2021-01-05T21:06:53.506400Z + description: ISO 8601 timestamp of when repository was last modified + date_registered: + type: string + format: date-time + example: 2021-01-05T21:06:53.506400Z + description: ISO 8601 timestamp of when repository was created + collaborator_count: + type: integer + format: int64 + description: Number of collaborators + affiliation: + type: + - string + - "null" + description: Repository affiliation + hub_user: + type: + - string + - "null" + description: Hub user information + has_starred: + type: boolean + description: Whether the current user has starred this repository + full_description: + type: + - string + - "null" + description: Full description of the repository + permissions: + $ref: "#/components/schemas/repo_permissions" + media_types: + type: array + items: + type: + - string + - "null" + description: Supported media types + content_types: + type: array + items: + type: string + description: Supported content types + categories: + type: array + items: + $ref: "#/components/schemas/category" + description: Repository categories + immutable_tags_settings: + $ref: "#/components/schemas/immutable_tags_settings" + storage_size: + type: + - integer + - "null" + format: int64 + description: Storage size in bytes + source: + type: + - string + - "null" + description: Source of the repository, where it was created from + required: + - user + - name + - namespace + - status + - status_description + - description + - is_private + - is_automated + - star_count + - pull_count + - last_updated + - date_registered + - collaborator_count + - has_starred + - permissions + - media_types + - content_types + - categories + - immutable_tags_settings + repo_permissions: + type: object + properties: + read: + type: boolean + description: Read permission + write: + type: boolean + description: Write permission + admin: + type: boolean + description: Admin permission + required: + - read + - write + - admin + immutable_tags_settings: + type: object + properties: + enabled: + type: boolean + description: Whether immutable tags are enabled + rules: + type: array + items: + type: string + description: List of immutable tag rules + required: + - enabled + - rules + immutable_tags_verify_request: + type: object + properties: + regex: + type: string + pattern: ^[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*(\\/[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*)*$ + description: "Immutable tags rule regex pattern. Must match format: [a-z0-9]+((\\\\.|_|__|-+)[a-z0-9]+)*(\\\\/[a-z0-9]+((\\\\.|_|__|-+)[a-z0-9]+)*)*" + example: v.* + required: + - regex + immutable_tags_verify_response: + type: object + properties: + tags: + type: array + items: + type: string + description: List of tags that match the provided regex pattern + example: + - v1.0.0 + - v2.1.3 + - latest + required: + - tags + repository_list_entry: + type: object + properties: + name: + type: string + description: Name of the repository + example: hello-world + namespace: + type: string + description: Namespace (organization or username) that owns the repository + example: docker + repository_type: + type: + - string + - "null" + description: Type of repository + enum: + - image + - plugin + - null + example: image + status: + type: integer + description: Repository status code + example: 1 + status_description: + type: string + description: Human-readable repository status + enum: + - active + - inactive + example: active + description: + type: + - string + - "null" + description: Repository description + example: Hello World! (an example of minimal Dockerization) + is_private: + type: boolean + description: Whether the repository is private + example: false + star_count: + type: integer + description: Number of users who starred this repository + minimum: 0 + example: 1234 + pull_count: + type: integer + description: Total number of pulls for this repository + minimum: 0 + example: 50000000 + last_updated: + type: + - string + - "null" + format: date-time + description: ISO 8601 timestamp of when the repository was last updated + example: 2023-12-01T10:30:00Z + last_modified: + type: + - string + - "null" + format: date-time + description: ISO 8601 timestamp of when the repository was last modified + example: 2023-12-01T10:30:00Z + date_registered: + type: string + format: date-time + description: ISO 8601 timestamp of when the repository was created + example: 2013-06-19T19:07:54Z + affiliation: + type: string + description: User's affiliation with the repository (empty string if no affiliation) + example: "" + media_types: + type: array + description: Media types supported by this repository + items: + type: string + example: + - application/vnd.docker.plugin.v1+json + content_types: + type: array + description: Content types supported by this repository + items: + type: string + example: + - plugin + categories: + type: array + description: Categories associated with this repository + items: + $ref: "#/components/schemas/category" + example: [] + storage_size: + type: integer + description: Storage size in bytes used by this repository + minimum: 0 + example: 232719127 + category: + type: object + required: + - name + - slug + properties: + name: + type: string + description: Human-readable name of the category + example: Databases + minLength: 1 + slug: + type: string + description: URL-friendly identifier for the category + example: databases + minLength: 1 + pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$ + description: Repository category for classification and discovery + list_repositories_response: + allOf: + - $ref: "#/components/schemas/page" + - type: object + properties: + results: + type: array + items: + $ref: "#/components/schemas/repository_list_entry" + UsersLoginRequest: + description: User login details + type: object + required: + - username + - password + properties: + username: + description: The username of the Docker Hub account to authenticate with. + type: string + example: myusername + password: + description: | + The password or personal access token (PAT) of the Docker Hub account to authenticate with. + type: string + example: p@ssw0rd + AuthCreateTokenResponse: + description: successful access token response + type: object + properties: + access_token: + description: The created access token. This expires in 10 minutes. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + PostUsersLoginSuccessResponse: + description: successful user login response + type: object + properties: + token: + description: | + Created authentication token. + This token can be used in the HTTP Authorization header as a JWT to authenticate with the Docker Hub APIs. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + PostUsersLoginErrorResponse: + description: failed user login response or second factor required + type: object + required: + - detail + properties: + detail: + description: Description of the error. + type: string + example: Incorrect authentication credentials + login_2fa_token: + description: | + Short time lived token to be used on `/v2/users/2fa-login` to complete the authentication. This field is present only if 2FA is enabled. + type: + - string + - "null" + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + Users2FALoginRequest: + description: Second factor user login details + type: object + required: + - login_2fa_token + - code + properties: + login_2fa_token: + description: The intermediate 2FA token returned from `/v2/users/login` API. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + code: + description: | + The Time-based One-Time Password of the Docker Hub account to authenticate with. + type: string + example: 123456 + PostUsers2FALoginErrorResponse: + description: failed second factor login response. + type: object + properties: + detail: + description: Description of the error. + type: string + example: Incorrect authentication credentials + protobufAny: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + rpcStatus: + type: object + properties: + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + $ref: "#/components/schemas/protobufAny" + AuditLogAction: + type: object + properties: + name: + type: string + description: Name of audit log action. + description: + type: string + description: Description of audit log action. + label: + type: string + description: Label for audit log action. + description: Audit Log action + AuditLogActions: + type: object + properties: + actions: + type: array + items: + $ref: "#/components/schemas/AuditLogAction" + description: List of audit log actions. + label: + type: string + description: Grouping label for a particular set of audit log actions. + GetAuditActionsResponse: + type: object + properties: + actions: + type: object + additionalProperties: + $ref: "#/components/schemas/AuditLogActions" + description: Map of audit log actions. + description: GetAuditActions response. + GetAuditLogsResponse: + type: object + properties: + logs: + type: array + items: + $ref: "#/components/schemas/AuditLog" + description: List of audit log events. + description: GetAuditLogs response. + AuditLog: + type: object + properties: + account: + type: string + action: + type: string + name: + type: string + actor: + type: string + data: + type: object + additionalProperties: + type: string + timestamp: + type: string + format: date-time + action_description: + type: string + description: Audit log event. + ValueError: + type: object + description: Used to error if input validation fails. + properties: + fields: + type: object + items: + type: string + text: + type: string + Error: + type: object + properties: + detail: + type: string + message: + type: string + accessToken: + type: object + properties: + uuid: + type: string + example: b30bbf97-506c-4ecd-aabc-842f3cb484fb + client_id: + type: string + example: HUB + creator_ip: + type: string + example: 127.0.0.1 + creator_ua: + type: string + example: some user agent + created_at: + type: string + example: 2021-07-20T12:00:00.000000Z + last_used: + type: + - string + - "null" + example: null + generated_by: + type: string + example: manual + is_active: + type: boolean + example: true + token: + type: string + example: a7a5ef25-8889-43a0-8cc7-f2a94268e861 + token_label: + type: string + example: My read only token + scopes: + type: array + example: + - repo:read + items: + type: string + expires_at: + type: string + format: date-time + example: 2021-10-28T18:30:19.520861Z + createAccessTokenRequest: + type: object + required: + - token_label + - scopes + properties: + token_label: + type: string + description: Friendly name for you to identify the token. + example: My read only token + minLength: 1 + maxLength: 100 + scopes: + type: array + description: | + Valid scopes: "repo:admin", "repo:write", "repo:read", "repo:public_read" + example: + - repo:read + items: + type: string + expires_at: + type: string + description: | + Optional expiration date for the token. + If omitted, the token will remain valid indefinitely. + format: date-time + example: 2021-10-28T18:30:19.520861Z + createAccessTokensResponse: + $ref: "#/components/schemas/accessToken" + getAccessTokensResponse: + type: object + properties: + count: + type: number + example: 1 + next: + type: string + example: null + previous: + type: string + example: null + active_count: + type: number + example: 1 + results: + type: array + items: + allOf: + - $ref: "#/components/schemas/accessToken" + - type: object + properties: + token: + type: string + example: "" + patchAccessTokenRequest: + type: object + properties: + token_label: + type: string + example: My read only token + minLength: 1 + maxLength: 100 + is_active: + type: boolean + example: false + patchAccessTokenResponse: + $ref: "#/components/schemas/accessToken" + orgSettings: + type: object + properties: + restricted_images: + $ref: "#/components/schemas/restricted_images" + restricted_images: + type: object + properties: + enabled: + type: boolean + description: Whether or not to restrict image usage for users in the organization. + example: true + allow_official_images: + type: boolean + description: Allow usage of official images if "enabled" is `true`. + example: true + allow_verified_publishers: + type: boolean + description: Allow usage of verified publisher images if "enabled" is `true`. + example: true + layer: + type: object + properties: + digest: + type: + - string + - "null" + description: image layer digest + size: + type: integer + description: size of the layer + instruction: + type: string + description: Dockerfile instruction + image: + type: object + properties: + architecture: + type: string + description: CPU architecture + features: + type: string + description: CPU features + variant: + type: string + description: CPU variant + digest: + type: + - string + - "null" + description: image digest + layers: + type: array + items: + $ref: "#/components/schemas/layer" + os: + type: string + description: operating system + os_features: + type: string + description: OS features + os_version: + type: string + description: OS version + size: + type: integer + description: size of the image + status: + type: string + enum: + - active + - inactive + description: Status of the image + last_pulled: + type: + - string + - "null" + example: 2021-01-05T21:06:53.506400Z + description: datetime of last pull + last_pushed: + type: + - string + - "null" + example: 2021-01-05T21:06:53.506400Z + description: datetime of last push + tag: + type: object + properties: + id: + type: integer + description: tag ID + images: + type: object + $ref: "#/components/schemas/image" + creator: + type: integer + description: ID of the user that pushed the tag + last_updated: + type: + - string + - "null" + example: 2021-01-05T21:06:53.506400Z + description: datetime of last update + last_updater: + type: integer + description: ID of the last user that updated the tag + last_updater_username: + type: string + description: Hub username of the user that updated the tag + name: + type: string + description: name of the tag + repository: + type: integer + description: repository ID + full_size: + type: integer + description: compressed size (sum of all layers) of the tagged image + v2: + type: string + description: repository API version + status: + type: string + enum: + - active + - inactive + description: whether a tag has been pushed to or pulled in the past month + tag_last_pulled: + type: + - string + - "null" + example: 2021-01-05T21:06:53.506400Z + description: datetime of last pull + tag_last_pushed: + type: + - string + - "null" + example: 2021-01-05T21:06:53.506400Z + description: datetime of last push + paginated_tags: + allOf: + - $ref: "#/components/schemas/page" + - type: object + properties: + results: + type: array + items: + $ref: "#/components/schemas/tag" + page: + type: object + properties: + count: + type: integer + description: total number of results available across all pages + next: + type: + - string + - "null" + description: link to next page of results if any + previous: + type: + - string + - "null" + description: link to previous page of results if any + scim_schema_attribute: + type: object + properties: + name: + type: string + example: userName + type: + enum: + - string + - boolean + - complex + type: string + example: string + multiValued: + type: boolean + example: false + description: + type: string + example: Unique identifier for the User, typically used by the user to directly authenticate to the service provider. Each User MUST include a non-empty userName value. This identifier MUST be unique across the service provider's entire set of Users. + required: + type: boolean + example: true + caseExact: + type: boolean + example: false + mutability: + type: string + example: readWrite + returned: + type: string + example: default + uniqueness: + type: string + example: server + scim_schema_parent_attribute: + allOf: + - $ref: "#/components/schemas/scim_schema_attribute" + - type: object + properties: + subAttributes: + type: array + items: + $ref: "#/components/schemas/scim_schema_attribute" + invite: + type: object + properties: + id: + type: string + description: uuid representing the invite id + example: e36eca69-4cc8-4f17-9845-ae8c2b832691 + inviter_username: + type: string + example: moby + invitee: + type: string + description: can either be a dockerID for registered users or an email for non-registered users + example: invitee@docker.com + org: + type: string + description: name of the org to join + example: docker + team: + type: string + description: name of the team (user group) to join + example: owners + created_at: + type: string + example: 2021-10-28T18:30:19.520861Z + bulk_invite: + type: object + properties: + invitees: + type: array + description: A list of invitees + items: + type: object + properties: + invitee: + type: string + description: invitee email or Docker ID + status: + type: string + description: status of the invite or validation error + invite: + description: Invite data if successfully invited + $ref: "#/components/schemas/invite" + example: + invitees: + - invitee: invitee@docker.com + status: invited + invite: + id: e36eca69-4cc8-4f17-9845-ae8c2b832691 + inviter_username: moby + invitee: invitee@docker.com + org: docker + team: owners + created_at: 2021-10-28T18:30:19.520861Z + - invitee: invitee2@docker.com + status: existing_org_member + - invitee: invitee3@docker.com + status: invalid_email_or_docker_id + error: + type: object + properties: + errinfo: + type: object + items: + type: string + detail: + type: string + message: + type: string + scim_error: + type: object + properties: + status: + type: string + description: The status code for the response in string format. + schemas: + type: array + items: + type: string + default: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + description: Details about why the request failed. + user: + type: object + properties: + id: + type: string + example: 0ab70deb065a43fcacd55d48caa945d8 + description: The UUID trimmed + company: + type: string + example: Docker Inc + date_joined: + type: string + example: 2021-01-05T21:06:53.506400Z + full_name: + type: string + example: Jon Snow + gravatar_email: + type: string + gravatar_url: + type: string + location: + type: string + profile_url: + type: string + type: + type: string + enum: + - User + - Org + example: User + username: + type: string + example: dockeruser + org_member: + allOf: + - $ref: "#/components/schemas/user" + properties: + email: + type: string + description: User's email address + example: example@docker.com + role: + type: string + description: | + The member's role in the organization (`Owner`, `Editor`, + `Member`, or `Invitee` for pending invites). + enum: + - Owner + - Editor + - Member + - Invitee + example: Owner + groups: + type: array + description: Groups (Teams) that the user is member of + items: + type: string + example: + - developers + - owners + is_guest: + type: boolean + description: If the organization has verified domains, members that have email addresses outside of those domains will be flagged as guests. + example: false + primary_email: + type: string + description: The user's email primary address. + example: example@docker.com + deprecated: true + last_logged_in_at: + type: string + format: date-time + description: | + Last time the user logged in. To access this field, you must have insights visible for your organization. See + [Insights](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). + example: 2021-01-05T21:06:53.506400Z + last_seen_at: + type: string + format: date-time + description: | + Last time the user was seen. To access this field, you must have insights visible for your organization. See + [Insights](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). + example: 2021-01-05T21:06:53.506400Z + last_desktop_version: + type: string + description: | + Last desktop version the user used. To access this field, you must have insights visible for your organization. See + [Insights](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). + example: 4.29.0 + org_member_paginated: + type: object + properties: + count: + type: number + description: The total number of items that match with the search. + example: 120 + previous: + type: string + description: The URL or link for the previous page of items. + example: https://hub.docker.com/v2/some/resources/items?page=1&page_size=20 + next: + type: string + description: The URL or link for the next page of items. + example: https://hub.docker.com/v2/some/resources/items?page=3&page_size=20 + results: + type: array + description: List of accounts. + items: + $ref: "#/components/schemas/org_member" + org_group: + type: object + properties: + id: + type: number + example: 10 + description: Group ID + uuid: + type: string + description: UUID for the group + name: + type: string + example: mygroup + description: Name of the group + description: + type: string + example: Groups description + description: Description of the group + member_count: + type: number + example: 10 + description: Member count of the group + role: + type: string + description: | + Role assigned to the team. A core role (`owner`, `editor`, or `member`) + or the name of a custom role (not the label or UUID). + group_member: + type: object + properties: + id: + type: string + example: 0ab70deb065a43fcacd55d48caa945d8 + description: The UUID trimmed + company: + type: string + example: Docker Inc + date_joined: + type: string + format: date-time + example: 2021-01-05T21:06:53.506400Z + full_name: + type: string + example: John Snow + gravatar_email: + type: string + gravatar_url: + type: string + location: + type: string + profile_url: + type: string + type: + type: string + enum: + - User + - Org + example: User + username: + type: string + example: dockeruser + email: + type: string + example: dockeruser@docker.com + email_address: + type: object + properties: + id: + type: number + user_id: + type: number + email: + type: string + example: dockeruser@docker.com + verified: + type: boolean + primary: + type: boolean + legacy_email_address: + allOf: + - $ref: "#/components/schemas/email_address" + - type: object + properties: + user: + type: string + example: dockeruser + email_with_username: + allOf: + - $ref: "#/components/schemas/email_address" + - type: object + properties: + username: + type: string + example: dockeruser + scim_service_provider_config: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig + documentationUri: + type: string + example: "" + patch: + properties: + supported: + type: boolean + example: false + bulk: + type: object + properties: + supported: + type: boolean + example: false + maxOperations: + type: integer + maxPayloadSize: + type: integer + filter: + type: object + properties: + supported: + type: boolean + example: true + maxResults: + type: integer + example: 99999 + changePassword: + type: object + properties: + supported: + type: boolean + example: false + sort: + type: object + properties: + supported: + type: boolean + example: true + etag: + type: object + properties: + supported: + type: boolean + example: false + authenticationSchemes: + type: object + properties: + name: + type: string + example: OAuth 2.0 Bearer Token + description: + type: string + example: The OAuth 2.0 Bearer Token Authentication scheme. OAuth enables clients to access protected resources by obtaining an access token, which is defined in RFC 6750 as "a string representing an access authorization issued to the client", rather than using the resource owner's credentials directly. + specUri: + type: string + example: http://tools.ietf.org/html/rfc6750 + type: + type: string + example: oauthbearertoken + scim_resource_type: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - urn:ietf:params:scim:schemas:core:2.0:ResourceType + id: + type: string + example: User + name: + type: string + example: User + description: + type: string + example: User + endpoint: + type: string + example: /Users + schema: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + scim_schema: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - urn:ietf:params:scim:schemas:core:2.0:Schema + id: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + name: + type: string + example: User + description: + type: string + example: User Account + attributes: + type: array + example: [] + items: + $ref: "#/components/schemas/scim_schema_parent_attribute" + scim_email: + type: object + properties: + value: + type: string + example: jon.snow@docker.com + display: + type: string + example: jon.snow@docker.com + primary: + type: boolean + example: true + scim_group: + type: object + properties: + value: + type: string + example: nightswatch + display: + type: string + example: nightswatch + scim_user_username: + type: string + description: The user's email address. This must be reachable via email. + example: jon.snow@docker.com + scim_user_name: + type: object + properties: + givenName: + type: string + example: Jon + familyName: + type: string + example: Snow + scim_user_display_name: + type: string + description: The username in Docker. Also known as the "Docker ID". + example: jonsnow + scim_user_schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + minItems: 1 + scim_user_id: + type: string + example: d80f7c79-7730-49d8-9a41-7c42fb622d9c + description: The unique identifier for the user. A v4 UUID. + scim_user: + type: object + properties: + schemas: + $ref: "#/components/schemas/scim_user_schemas" + id: + $ref: "#/components/schemas/scim_user_id" + userName: + $ref: "#/components/schemas/scim_user_username" + name: + $ref: "#/components/schemas/scim_user_name" + displayName: + $ref: "#/components/schemas/scim_user_display_name" + active: + type: boolean + example: true + emails: + type: array + items: + $ref: "#/components/schemas/scim_email" + groups: + type: array + items: + $ref: "#/components/schemas/scim_group" + meta: + type: object + properties: + resourceType: + type: string + example: User + location: + type: string + example: https://hub.docker.com/v2/scim/2.0/Users/d80f7c79-7730-49d8-9a41-7c42fb622d9c + created: + type: string + format: date-time + description: The creation date for the user as a RFC3339 formatted string. + example: 2022-05-20T00:54:18Z + lastModified: + type: string + format: date-time + description: The date the user was last modified as a RFC3339 formatted string. + example: 2022-05-20T00:54:18Z + orgAccessToken: + type: object + properties: + id: + type: string + example: a7a5ef25-8889-43a0-8cc7-f2a94268e861 + label: + type: string + example: My organization token + created_by: + type: string + example: johndoe + is_active: + type: boolean + example: true + created_at: + type: string + format: date-time + example: 2022-05-20T00:54:18Z + expires_at: + type: + - string + - "null" + format: date-time + example: 2023-05-20T00:54:18Z + last_used_at: + type: + - string + - "null" + format: date-time + example: 2022-06-15T12:30:45Z + orgAccessTokenResource: + type: object + properties: + type: + type: string + enum: + - TYPE_REPO + - TYPE_ORG + example: TYPE_REPO + description: The type of resource + path: + type: string + example: myorg/myrepo + description: | + The path of the resource. The format of this will change depending on the type of resource. + + For TYPE_REPO resources: + - Must be an existing repository name (e.g., "myorg/myrepo") + - Can use glob patterns (e.g., "myorg/*" for all repositories in the organization) + - Use "*/*/public" to reference all public repositories + scopes: + type: array + description: The scopes this token has access to + items: + type: string + example: scope-image-pull + required: + - type + - path + - scopes + getOrgAccessTokensResponse: + type: object + properties: + total: + type: number + example: 10 + next: + type: string + example: https://hub.docker.com/v2/orgs/docker/access-tokens?page=2&page_size=10 + previous: + type: string + example: https://hub.docker.com/v2/orgs/docker/access-tokens?page=1&page_size=10 + results: + type: array + items: + $ref: "#/components/schemas/orgAccessToken" + getOrgAccessTokenResponse: + allOf: + - $ref: "#/components/schemas/orgAccessToken" + - type: object + properties: + resources: + type: array + description: Resources this token has access to + items: + $ref: "#/components/schemas/orgAccessTokenResource" + createOrgAccessTokenRequest: + type: object + properties: + label: + type: string + description: Label for the access token + example: My organization token + description: + type: string + description: Description of the access token + example: Token for CI/CD pipeline + resources: + type: array + description: Resources this token has access to + items: + $ref: "#/components/schemas/orgAccessTokenResource" + expires_at: + type: + - string + - "null" + format: date-time + description: Expiration date for the token + example: 2023-05-20T00:54:18Z + required: + - label + createOrgAccessTokenResponse: + type: object + allOf: + - type: object + properties: + id: + type: string + example: a7a5ef25-8889-43a0-8cc7-f2a94268e861 + label: + type: string + example: My organization token + is_active: + type: boolean + example: true + created_at: + type: string + format: date-time + example: 2022-05-20T00:54:18Z + expires_at: + type: + - string + - "null" + format: date-time + example: 2023-05-20T00:54:18Z + last_used_at: + type: + - string + - "null" + format: date-time + example: 2022-06-15T12:30:45Z + - type: object + properties: + token: + type: string + description: The actual token value that can be used for authentication + example: dckr_oat_7awgM4jG5SQvxcvmNzhKj8PQjxo + resources: + type: array + items: + $ref: "#/components/schemas/orgAccessTokenResource" + updateOrgAccessTokenRequest: + type: object + properties: + label: + type: string + description: Label for the access token + example: My organization token + description: + type: string + description: Description of the access token + example: Token for CI/CD pipeline + resources: + type: array + description: Resources this token has access to + items: + $ref: "#/components/schemas/orgAccessTokenResource" + is_active: + type: boolean + description: Whether the token is active + example: true + updateOrgAccessTokenResponse: + type: object + allOf: + - $ref: "#/components/schemas/orgAccessToken" + - type: object + properties: + resources: + type: array + description: Resources this token has access to + items: + $ref: "#/components/schemas/orgAccessTokenResource" + team_repo: + allOf: + - $ref: "#/components/schemas/repository_info" + properties: + group_name: + type: string + description: Name of the group + permission: + type: string + description: Repo access permission + enum: + - read + - write + - admin + parameters: + namespace: + in: path + name: namespace + required: true + schema: + type: string + repository: + in: path + name: repository + required: true + schema: + type: string + tag: + in: path + name: tag + required: true + schema: + type: string + org_name: + in: path + name: org_name + description: Name of the organization (namespace). + schema: + type: string + example: myorganization + required: true + group_name: + in: path + name: group_name + description: Name of the group (team) in the organization. + schema: + type: string + example: developers + required: true + username: + in: path + name: username + description: Username, identifier for the user (namespace, DockerID). + schema: + type: string + example: jonsnow + required: true + page: + in: query + name: page + description: Page number (starts on 1). + schema: + type: integer + page_size: + in: query + name: page_size + description: Number of items (rows) per page. + schema: + type: integer + invites: + in: query + name: invites + description: Include invites in the response. + schema: + type: boolean + search: + in: query + name: search + schema: + type: integer + description: Search term. + scim_attributes: + in: query + name: attributes + schema: + type: string + description: Comma delimited list of attributes to limit to in the response. + example: userName,displayName + scim_user_id: + name: id + in: path + schema: + type: string + description: The user ID. + example: d80f7c79-7730-49d8-9a41-7c42fb622d9c + required: true + type: + in: query + name: type + schema: + type: string + enum: + - all + - invitee + - member + example: all + role: + in: query + name: role + schema: + type: string + enum: + - owner + - editor + - member + example: owner + bulk_invite: + in: header + name: X-Analytics-Client-Feature + description: Optional string that indicates the feature used to submit the bulk invites (e.g.'file', 'web') + schema: + type: string + requestBodies: + bulk_invite_request: + required: true + content: + application/json: + schema: + type: object + required: + - org + - invitees + properties: + org: + type: string + description: organization name + example: docker + team: + type: string + description: team name + example: owners + role: + type: string + description: role for invitees + example: member + invitees: + type: array + description: list of invitees emails or Docker Ids + items: + type: string + description: invitee email or Docker ID + example: + - invitee1DockerId + - invitee2@docker.com + - invitee3@docker.com + dry_run: + type: boolean + description: Optional, run through validation but don't actually change data. + example: true + scim_create_user_request: + required: true + content: + application/scim+json: + schema: + type: object + required: + - schemas + - userName + properties: + schemas: + $ref: "#/components/schemas/scim_user_schemas" + userName: + $ref: "#/components/schemas/scim_user_username" + name: + $ref: "#/components/schemas/scim_user_name" + scim_update_user_request: + required: true + content: + application/scim+json: + schema: + type: object + required: + - schemas + properties: + schemas: + $ref: "#/components/schemas/scim_user_schemas" + name: + allOf: + - $ref: "#/components/schemas/scim_user_name" + - description: If this is omitted from the request, the update will skip the update on it. We will only ever change the name, but not clear it. + enabled: + type: boolean + default: false + description: If this is omitted from the request, it will default to false resulting in a deactivated user. + add_member_to_org_group: + required: true + content: + application/json: + schema: + type: object + required: + - member + properties: + member: + type: string + example: jonsnow + update_repository_immutable_tags_request: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/update_repository_immutable_tags_request" + immutable_tags_verify_request: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/immutable_tags_verify_request" + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT + bearerSCIMAuth: + type: http + scheme: bearer + scimToken: + type: http + scheme: bearer + description: Use the SCIM provisioning token configured for the organization. +x-tagGroups: + - name: General + tags: + - changelog + - resources + - rate-limiting + - authentication + - name: API + tags: + - authentication-api + - access-tokens + - images + - audit-logs + - org-settings + - repositories + - scim + - orgs + - org-access-tokens + - groups + - invites +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +security: [] diff --git a/prototypes/api-docs/converted/registry.yaml b/prototypes/api-docs/converted/registry.yaml new file mode 100644 index 000000000000..809419006d80 --- /dev/null +++ b/prototypes/api-docs/converted/registry.yaml @@ -0,0 +1,1295 @@ +openapi: 3.2.0 +info: + title: Supported registry API for Docker Hub + description: | + Docker Hub is an OCI-compliant registry, which means it adheres to the open + standards defined by the Open Container Initiative (OCI) for distributing + container images. This ensures compatibility with a wide range of tools and + platforms in the container ecosystem. + + This reference documents the Docker Hub-supported subset of the Registry HTTP API V2. + It focuses on pulling, pushing, and deleting images. It does not cover the full OCI Distribution Specification. + + For the complete OCI specification, see [OCI Distribution Specification](https://github.com/opencontainers/distribution-spec). + version: "2" +servers: + - description: Docker Hub registry API + x-audience: public + url: https://registry-1.docker.io +tags: + - name: overview + description: | + All endpoints in this API are prefixed by the version and repository name, for example: + + ``` + /v2// + ``` + + This format provides structured access control and URI-based scoping of image operations. + + For example, to interact with the `library/ubuntu` repository, use: + + ``` + /v2/library/ubuntu/ + ``` + + Repository names must meet these requirements: + 1. Consist of path components matching `[a-z0-9]+(?:[._-][a-z0-9]+)*` + 2. If more than one component, they must be separated by `/` + 3. Full repository name must be fewer than 256 characters + summary: Overview + kind: info + - name: authentication + description: | + Specifies registry authentication. + externalDocs: + description: Detailed authentication workflow and token usage + url: https://docs.docker.com/reference/api/registry/auth/ + summary: Authentication + kind: info + - name: Manifests + description: | + Image manifests are JSON documents that describe an image: its configuration blob, the digests of each layer blob, and metadata such as media‑types and annotations. + summary: Manifests + kind: nav + - name: Blobs + description: | + Blobs are the binary objects referenced from manifests: + the config JSON and one or more compressed layer tarballs. + summary: Blobs + kind: nav + - name: pull + description: | + Pulling an image involves retrieving the manifest and downloading each of the image's layer blobs. This section outlines the general steps followed by a working example. + + 1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/). + 2. [Get the image manifest](#operation/GetImageManifest). + 3. If the response in the previous step is a multi-architecture manifest list, you must do the following: + - Parse the `manifests[]` array to locate the digest for your target platform (e.g., `linux/amd64`). + - [Get the image manifest](#operation/GetImageManifest) using the located digest. + 4. [Check if the blob exists](#operation/CheckBlobExists) before downloading. The client should send a `HEAD` request for each layer digest. + 5. [Download each layer blob](#operation/GetBlob) using the digest obtained from the manifest. The client should send a `GET` request for each layer digest. + + The following bash script example pulls `library/ubuntu:latest` from Docker Hub. + + ```bash + #!/bin/bash + + # Step 1: Get a bearer token + TOKEN=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull" | jq -r .token) + + # Step 2: Get the image manifest. In this example, an image manifest list is returned. + curl -s -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.list.v2+json" \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/latest \ + -o manifest-list.json + + # Step 3a: Parse the `manifests[]` array to locate the digest for your target platform (e.g., `linux/amd64`). + IMAGE_MANIFEST_DIGEST=$(jq -r '.manifests[] | select(.platform.architecture == "amd64" and .platform.os == "linux") | .digest' manifest-list.json) + + # Step 3b: Get the platform-specific image manifest + curl -s -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/$IMAGE_MANIFEST_DIGEST \ + -o manifest.json + + # Step 4: Send a HEAD request to check if the layer blob exists + DIGEST=$(jq -r '.layers[0].digest' manifest.json) + curl -I -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/$DIGEST + + # Step 5: Download the layer blob + curl -L -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/$DIGEST + ``` + + This example pulls the manifest and the first layer for the `ubuntu:latest` image on the `linux/amd64` platform. Repeat steps 4 and 5 for each digest in the `.layers[]` array in the manifest. + summary: Pulling Images + kind: info + - name: push + description: | + Pushing an image involves uploading any image blobs (such as the config or layers), and then uploading the manifest that references those blobs. + + This section outlines the basic steps to push an image using the registry API. + + 1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/) + + 2. [Check if the blob exists](#operation/CheckBlobExists) using a `HEAD` request for each blob digest. + + 3. If the blob does not exist, [upload the blob](#operation/CompleteBlobUpload) using a monolithic `PUT` request: + - First, [initiate the upload](#operation/InitiateBlobUpload) with `POST`. + - Then [upload and complete](#operation/CompleteBlobUpload) with `PUT`. + + **Note**: Alternatively, you can upload the blob in multiple chunks by using `PATCH` requests to send each chunk, followed by a final `PUT` request to complete the upload. This is known as a [chunked upload](#operation/UploadBlobChunk) and is useful for large blobs or when resuming interrupted uploads. + + + 4. [Upload the image manifest](#operation/PutImageManifest) using a `PUT` request to associate the config and layers. + + The following bash script example pushes a dummy config blob and manifest to `yourusername/helloworld:latest` on Docker Hub. You can replace `yourusername` with your Docker Hub username and `dckr_pat` with your Docker Hub personal access token. + + ```bash + #!/bin/bash + + USERNAME=yourusername + PASSWORD=dckr_pat + REPO=yourusername/helloworld + TAG=latest + CONFIG=config.json + MIME_TYPE=application/vnd.docker.container.image.v1+json + + # Step 1: Get a bearer token + TOKEN=$(curl -s -u "$USERNAME:$PASSWORD" \ + "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO:push,pull" \ + | jq -r .token) + + # Create a dummy config blob and compute its digest + echo '{"architecture":"amd64","os":"linux","config":{},"rootfs":{"type":"layers","diff_ids":[]}}' > $CONFIG + DIGEST="sha256:$(sha256sum $CONFIG | awk '{print $1}')" + + # Step 2: Check if the blob exists + STATUS=$(curl -s -o /dev/null -w "%{http_code}" -I \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/$REPO/blobs/$DIGEST) + + if [ "$STATUS" != "200" ]; then + # Step 3: Upload blob using monolithic upload + LOCATION=$(curl -sI -X POST \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/$REPO/blobs/uploads/ \ + | grep -i Location | tr -d '\r' | awk '{print $2}') + + curl -s -X PUT "$LOCATION&digest=$DIGEST" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @$CONFIG + fi + + # Step 4: Upload the manifest that references the config blob + MANIFEST=$(cat < **Note** + > + > Manifest deletion operations may experience latency and could return a `500 Internal Server Error` during deletion. The system automatically retries the deletion in the background, so the manifest will eventually be removed. You do not need to manually retry the request. + + This section outlines the basic steps to delete an image using the registry API. + + 1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/). + 2. [Get the manifest](#operation/GetImageManifest) using the image's tag. + 3. Retrieve the `Docker-Content-Digest` header from the manifest response. This digest uniquely identifies the manifest. + 4. [Delete the manifest](#operation/DeleteImageManifest) using a `DELETE` request and the digest. + + The following bash script example deletes the `latest` tag from `yourusername/helloworld` on Docker Hub. Replace `yourusername` with your Docker Hub username and `dckr_pat` with your Docker Hub personal access token. + + ```bash + #!/bin/bash + + USERNAME=yourusername + PASSWORD=dckr_pat + REPO=yourusername/helloworld + TAG=latest + + # Step 1: Get a bearer token + TOKEN=$(curl -s -u "$USERNAME:$PASSWORD" \ + "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO:pull,push,delete" \ + | jq -r .token) + + # Step 2 and 3: Get the manifest and extract the digest from response headers + DIGEST=$(curl -sI -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + https://registry-1.docker.io/v2/$REPO/manifests/$TAG \ + | grep -i Docker-Content-Digest | tr -d '\r' | awk '{print $2}') + + echo "Deleting manifest with digest: $DIGEST" + + # Step 4: Delete the manifest by digest + curl -s -X DELETE \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/$REPO/manifests/$DIGEST + + echo "Deleted image: $REPO@$DIGEST" + ``` + + This example deletes the manifest for the `latest` tag. To fully delete all references to an image, ensure no other tags or referrers point to the same manifest digest. + summary: Deleting Images + kind: info +paths: + /v2/{name}/manifests/{reference}: + get: + tags: + - Manifests + x-displayName: Manifests + summary: Get image manifest + operationId: GetImageManifest + description: | + Fetch the manifest identified by `name` and `reference`, where `reference` can be a tag (e.g., `latest`) or a digest (e.g., `sha256:...`). + + The manifest contains metadata about the image, including configuration and layer digests. It is required for pulling images from the registry. + + This endpoint requires authentication. Use the `Authorization: Bearer ` header. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # GET a manifest (by tag or digest) + curl -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/latest + parameters: + - name: name + in: path + required: true + description: Name of the target repository + example: library/ubuntu + schema: + type: string + - name: reference + in: path + required: true + description: Tag or digest of the target manifest + examples: + by-tag: + summary: Tag + value: latest + by-digest: + summary: Digest + value: sha256:abc123def456... + schema: + type: string + - name: Authorization + in: header + required: true + description: RFC7235-compliant authorization header (e.g., `Bearer `). + schema: + type: string + - name: Accept + in: header + required: false + description: | + Media type(s) the client supports for the manifest. + + The registry supports the following media types: + - application/vnd.docker.distribution.manifest.v2+json + - application/vnd.docker.distribution.manifest.list.v2+json + - application/vnd.oci.image.manifest.v1+json + - application/vnd.oci.image.index.v1+json + schema: + type: string + responses: + "200": + description: Manifest fetched successfully. + headers: + Docker-Content-Digest: + description: Digest of the returned manifest content. + schema: + type: string + Content-Type: + description: Media type of the returned manifest. + schema: + type: string + content: + application/vnd.docker.distribution.manifest.v2+json: + schema: + type: object + required: + - schemaVersion + - mediaType + - config + - layers + properties: + schemaVersion: + type: integer + example: 2 + mediaType: + type: string + example: application/vnd.docker.distribution.manifest.v2+json + config: + type: object + properties: + mediaType: + type: string + example: application/vnd.docker.container.image.v1+json + size: + type: integer + example: 7023 + digest: + type: string + example: sha256:a3f3e...c1234 + layers: + type: array + items: + type: object + properties: + mediaType: + type: string + example: application/vnd.docker.image.rootfs.diff.tar.gzip + size: + type: integer + example: 32654 + digest: + type: string + example: sha256:bcf2...78901 + examples: + docker-manifest: + summary: Docker image manifest (schema v2) + value: + schemaVersion: 2 + mediaType: application/vnd.docker.distribution.manifest.v2+json + config: + mediaType: application/vnd.docker.container.image.v1+json + size: 7023 + digest: sha256:123456abcdef... + layers: + - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip + size: 32654 + digest: sha256:abcdef123456... + - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip + size: 16724 + digest: sha256:7890abcdef12... + "400": + description: Invalid name or reference. + "401": + description: Authentication required. + "403": + description: Access denied. + "404": + description: Repository or manifest not found. + "429": + description: Too many requests. + put: + tags: + - Manifests + summary: Put image manifest + operationId: PutImageManifest + description: | + Upload an image manifest for a given tag or digest. This operation registers a manifest in a repository, allowing it to be pulled using the specified reference. + + This endpoint is typically used after all layer and config blobs have been uploaded to the registry. + + The manifest must conform to the expected schema and media type. For Docker image manifest schema version 2, use: + `application/vnd.docker.distribution.manifest.v2+json` + + Requires authentication via a bearer token with `push` scope for the target repository. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # PUT a manifest (tag = latest) + curl -X PUT \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/vnd.docker.distribution.manifest.v2+json" \ + --data-binary @manifest.json \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/latest + parameters: + - name: name + in: path + required: true + description: Name of the target Repository + example: library/ubuntu + schema: + type: string + - name: reference + in: path + required: true + description: Tag or digest to associate with the uploaded Manifest + examples: + by-tag: + summary: Tag + value: latest + by-digest: + summary: Digest + value: sha256:abc123def456... + schema: + type: string + - name: Authorization + in: header + required: true + description: RFC7235-compliant authorization header (e.g., `Bearer `). + schema: + type: string + - name: Content-Type + in: header + required: true + description: Media type of the manifest being uploaded. + schema: + type: string + example: application/vnd.docker.distribution.manifest.v2+json + requestBody: + required: true + content: + application/vnd.docker.distribution.manifest.v2+json: + schema: + type: object + required: + - schemaVersion + - mediaType + - config + - layers + properties: + schemaVersion: + type: integer + example: 2 + mediaType: + type: string + example: application/vnd.docker.distribution.manifest.v2+json + config: + type: object + required: + - mediaType + - size + - digest + properties: + mediaType: + type: string + example: application/vnd.docker.container.image.v1+json + size: + type: integer + example: 7023 + digest: + type: string + example: sha256:123456abcdef... + layers: + type: array + items: + type: object + required: + - mediaType + - size + - digest + properties: + mediaType: + type: string + example: application/vnd.docker.image.rootfs.diff.tar.gzip + size: + type: integer + example: 32654 + digest: + type: string + example: sha256:abcdef123456... + examples: + sample-manifest: + summary: Sample Docker image manifest (schema v2) + value: + schemaVersion: 2 + mediaType: application/vnd.docker.distribution.manifest.v2+json + config: + mediaType: application/vnd.docker.container.image.v1+json + size: 7023 + digest: sha256:123456abcdef... + layers: + - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip + size: 32654 + digest: sha256:abcdef123456... + responses: + "201": + description: Manifest created successfully. + headers: + Docker-Content-Digest: + description: Digest of the stored manifest. + schema: + type: string + example: sha256:abcdef123456... + Location: + description: Canonical location of the uploaded manifest. + schema: + type: string + example: /v2/library/ubuntu/manifests/latest + Content-Length: + description: Always zero. + schema: + type: integer + example: 0 + "400": + description: Invalid name, reference, or manifest. + "401": + description: Authentication required. + "403": + description: Access denied. + "404": + description: Repository not found. + "405": + description: Operation not allowed. + "429": + description: Too many requests. + head: + tags: + - Manifests + summary: Check if manifest exists + operationId: HeadImageManifest + description: | + Use this endpoint to verify whether a manifest exists by tag or digest. + + This is a lightweight operation that returns only headers (no body). It is useful for: + - Checking for the existence of a specific image version + - Determining the digest or size of a manifest before downloading or deleting + + This endpoint requires authentication with pull scope. + parameters: + - name: name + in: path + required: true + description: Name of the Repository + example: library/ubuntu + schema: + type: string + - name: reference + in: path + required: true + description: Tag or digest to check + examples: + by-tag: + summary: Tag + value: latest + by-digest: + summary: Digest + value: sha256:abc123def456... + schema: + type: string + - name: Authorization + in: header + required: true + schema: + type: string + description: Bearer token for authentication + - name: Accept + in: header + required: false + schema: + type: string + example: application/vnd.docker.distribution.manifest.v2+json + description: | + Media type of the manifest to check. The response will match one of the accepted types. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # HEAD /v2/{name}/manifests/{reference} + curl -I \ + -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/latest + responses: + "200": + description: Manifest exists. + headers: + Content-Length: + description: Size of the manifest in bytes + schema: + type: integer + example: 7082 + Docker-Content-Digest: + description: Digest of the manifest + schema: + type: string + example: sha256:abc123... + Content-Type: + description: Media type of the manifest + schema: + type: string + example: application/vnd.docker.distribution.manifest.v2+json + "401": + description: Authentication required. + "403": + description: Access denied. + "404": + description: Manifest not found. + "429": + description: Too many requests. + delete: + tags: + - Manifests + summary: Delete image manifest + operationId: DeleteImageManifest + description: | + Delete an image manifest from a repository by digest. + + Only untagged or unreferenced manifests can be deleted. If the manifest is still referenced by a tag or another image, the registry will return `403 Forbidden`. + + This operation requires `delete` access to the repository. + + > **Note** + > + > Manifest deletion operations may take some time and could return a `500 Internal Server Error`. The system automatically retries the deletion in the background. Manual intervention is not required. + parameters: + - name: name + in: path + required: true + description: Name of the repository + example: yourusername/helloworld + schema: + type: string + - name: reference + in: path + required: true + description: Digest of the manifest to delete (e.g., `sha256:...`) + example: sha256:abc123def456... + schema: + type: string + - name: Authorization + in: header + required: true + description: Bearer token with `delete` access + schema: + type: string + x-codeSamples: + - lang: Bash + label: cURL + source: | + # DELETE a manifest by digest + curl -X DELETE \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/yourusername/helloworld/manifests/sha256:abc123def456... + responses: + "202": + description: Manifest deleted successfully. No content returned. + "401": + description: Authentication required. + "403": + description: Access denied. The manifest may still be referenced. + "404": + description: Manifest or repository not found. + "405": + description: Only digest-based deletion is allowed. + "429": + description: Too many requests. + /v2/{name}/blobs/uploads/: + post: + tags: + - Blobs + summary: Initiate blob upload or attempt cross-repository blob mount + operationId: InitiateBlobUpload + description: | + Initiate an upload session for a blob (layer or config) in a repository. + + This is the first step in uploading a blob. It returns a `Location` URL where the blob can be uploaded using `PATCH` (chunked) or `PUT` (monolithic). + + Instead of uploading a blob, a client may attempt to mount a blob from another repository (if it has read access) by including the `mount` and `from` query parameters. + + If successful, the registry responds with `201 Created` and the blob is reused without re-upload. + + If the mount fails, the upload proceeds as usual and returns a `202 Accepted`. + + You must authenticate with `push` access to the target repository. + x-codeSamples: + - lang: Bash + label: cURL (Initiate Standard Upload) + source: | + # Initiate a standard blob upload session + curl -i -X POST \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/ + - lang: Bash + label: cURL (Cross-Repository Blob Mount) + source: | + # Attempt a cross-repository blob mount + curl -i -X POST \ + -H "Authorization: Bearer $TOKEN" \ + "https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/?mount=sha256:abc123def456...&from=library/busybox" + parameters: + - name: name + in: path + required: true + description: Name of the target repository + example: library/ubuntu + schema: + type: string + - name: mount + in: query + required: false + description: Digest of the blob to mount from another repository + schema: + type: string + example: sha256:abc123def456... + - name: from + in: query + required: false + description: Source repository to mount the blob from + schema: + type: string + example: library/busybox + - name: Authorization + in: header + required: true + schema: + type: string + description: Bearer token for authentication with `push` scope + responses: + "201": + description: Blob successfully mounted from another repository. + headers: + Location: + description: URL where the mounted blob is accessible + schema: + type: string + example: /v2/library/ubuntu/blobs/sha256:abc123... + Docker-Content-Digest: + description: Canonical digest of the mounted blob + schema: + type: string + example: sha256:abc123... + Content-Length: + description: Always zero + schema: + type: integer + example: 0 + "202": + description: Upload initiated successfully (fallback if mount fails). + headers: + Location: + description: Upload location URL for `PATCH` or `PUT` requests + schema: + type: string + example: /v2/library/ubuntu/blobs/uploads/abc123 + Docker-Upload-UUID: + description: Server-generated UUID for the upload session + schema: + type: string + example: abc123 + Range: + description: Current upload byte range (typically `0-0` at init) + schema: + type: string + example: 0-0 + Content-Length: + description: Always zero + schema: + type: integer + example: 0 + "401": + description: Authentication required. + "403": + description: Access denied. + "404": + description: Repository not found. + "429": + description: Too many requests. + /v2/{name}/blobs/{digest}: + head: + tags: + - Blobs + summary: Check existence of blob + operationId: CheckBlobExists + description: | + Check whether a blob (layer or config) exists in the registry. + + This is useful before uploading a blob to avoid duplicates. + + If the blob is present, the registry returns a `200 OK` response with headers like `Content-Length` and `Docker-Content-Digest`. + + If the blob does not exist, the response will be `404 Not Found`. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # HEAD to check if a blob exists + curl -I \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/sha256:abc123... + parameters: + - name: name + in: path + required: true + description: Name of the Repository + example: library/ubuntu + schema: + type: string + - name: digest + in: path + required: true + description: Digest of the blob + schema: + type: string + example: sha256:abc123def4567890... + - name: Authorization + in: header + required: true + description: Bearer token with pull or push scope + schema: + type: string + example: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6... + responses: + "200": + description: Blob exists + headers: + Content-Length: + description: Size of the blob in bytes + schema: + type: integer + example: 32654 + Docker-Content-Digest: + description: Digest of the blob + schema: + type: string + example: sha256:abc123def4567890... + Content-Type: + description: MIME type of the blob content + schema: + type: string + example: application/octet-stream + "401": + description: Authentication required + "403": + description: Access denied + "404": + description: Blob not found + "429": + description: Too many requests + get: + tags: + - Blobs + summary: Retrieve blob + operationId: GetBlob + description: | + Download the blob identified by digest from the registry. + + Blobs include image layers and configuration objects. Clients must use the digest from the manifest to retrieve a blob. + + This endpoint may return a `307 Temporary Redirect` to a CDN or storage location. Clients must follow the redirect to obtain the actual blob content. + + The blob content is typically a gzipped tarball (for layers) or JSON (for configs). The MIME type is usually `application/octet-stream`. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # GET (download) a blob + curl -L \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/sha256:abc123... \ + -o layer.tar.gz + parameters: + - name: name + in: path + required: true + description: Repository Name + example: library/ubuntu + schema: + type: string + - name: digest + in: path + required: true + description: Digest of the Blob + schema: + type: string + example: sha256:abc123def456... + - name: Authorization + in: header + required: true + schema: + type: string + description: Bearer token with pull scope + example: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6... + responses: + "200": + description: Blob content returned directly + headers: + Content-Length: + description: Size of the blob in bytes + schema: + type: integer + example: 32768 + Content-Type: + description: MIME type of the blob + schema: + type: string + example: application/octet-stream + Docker-Content-Digest: + description: Digest of the returned blob + schema: + type: string + example: sha256:abc123def456... + content: + application/octet-stream: + schema: + type: string + format: binary + examples: + small-layer: + summary: Example binary blob (gzipped tar layer) + value: + "307": + description: Temporary redirect to blob location + headers: + Location: + description: Redirect URL for blob download (e.g., S3 or CDN) + schema: + type: string + example: https://cdn.docker.io/blobs/library/ubuntu/abc123... + "401": + description: Authentication required + "403": + description: Access denied + "404": + description: Blob not found + "429": + description: Too many requests + /v2/{name}/blobs/uploads/{uuid}: + get: + tags: + - Blobs + summary: Get blob upload status + operationId: GetBlobUploadStatus + description: | + Retrieve the current status of an in-progress blob upload. + + This is useful for: + - Resuming an interrupted upload + - Determining how many bytes have been accepted so far + - Retrying from the correct offset in chunked uploads + + The response includes the `Range` header indicating the byte range received so far, and a `Docker-Upload-UUID` for identifying the session. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # GET upload status + curl -I \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123 + parameters: + - name: name + in: path + required: true + description: Repository Name + example: library/ubuntu + schema: + type: string + - name: uuid + in: path + required: true + description: Upload session UUID + schema: + type: string + example: abc123 + - name: Authorization + in: header + required: true + schema: + type: string + example: Bearer eyJhbGciOi... + responses: + "204": + description: Upload in progress. No body is returned. + headers: + Range: + description: Current byte range uploaded (inclusive) + schema: + type: string + example: 0-16383 + Docker-Upload-UUID: + description: UUID of the upload session + schema: + type: string + example: abc123 + Location: + description: URL to continue or complete the upload + schema: + type: string + example: /v2/library/ubuntu/blobs/uploads/abc123 + "401": + description: Authentication required + "403": + description: Access denied + "404": + description: Upload session not found + "429": + description: Too many requests + put: + tags: + - Blobs + summary: Complete blob upload + operationId: CompleteBlobUpload + description: | + Complete the upload of a blob by finalizing an upload session. + + This request must include the `digest` query parameter and optionally the last chunk of data. When the registry receives this request, it verifies the digest and stores the blob. + + This endpoint supports: + - Monolithic uploads (upload entire blob in this request) + - Finalizing chunked uploads (last chunk plus `digest`) + x-codeSamples: + - lang: Bash + label: cURL + source: | + # PUT – complete upload (monolithic or final chunk) + curl -X PUT \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @layer.tar.gz \ + "https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123?digest=sha256:abcd1234..." + parameters: + - name: name + in: path + required: true + description: Repository name + schema: + type: string + example: library/ubuntu + - name: uuid + in: path + required: true + description: Upload session UUID returned from the POST request + schema: + type: string + example: abc123 + - name: digest + in: query + required: true + description: Digest of the uploaded blob + schema: + type: string + example: sha256:abcd1234... + - name: Authorization + in: header + required: true + schema: + type: string + example: Bearer eyJhbGciOi... + requestBody: + required: false + content: + application/octet-stream: + schema: + type: string + format: binary + examples: + layer-upload: + summary: Layer tarball blob + value: + responses: + "201": + description: Upload completed successfully + headers: + Docker-Content-Digest: + description: Canonical digest of the stored blob + schema: + type: string + example: sha256:abcd1234... + Location: + description: URL where the blob is now accessible + schema: + type: string + example: /v2/library/ubuntu/blobs/sha256:abcd1234... + Content-Length: + description: Always zero for completed uploads + schema: + type: integer + example: 0 + "400": + description: Invalid digest or missing parameters + "401": + description: Authentication required + "403": + description: Access denied + "404": + description: Upload session not found + "416": + description: Requested range not satisfiable (if used in chunked mode) + "429": + description: Too many requests + patch: + tags: + - Blobs + summary: Upload blob chunk + operationId: UploadBlobChunk + description: | + Upload a chunk of a blob to an active upload session. + + Use this method for **chunked uploads**, especially for large blobs or when resuming interrupted uploads. + + The client sends binary data using `PATCH`, optionally including a `Content-Range` header. + + After each chunk is accepted, the registry returns a `202 Accepted` response with: + - `Range`: current byte range stored + - `Docker-Upload-UUID`: identifier for the upload session + - `Location`: URL to continue the upload or finalize with `PUT` + x-codeSamples: + - lang: Bash + label: cURL + source: | + # PATCH – upload a chunk (first 64 KiB) + curl -X PATCH \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @chunk-0.bin \ + "https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123" + parameters: + - name: name + in: path + required: true + description: Repository name + schema: + type: string + example: library/ubuntu + - name: uuid + in: path + required: true + description: Upload session UUID + schema: + type: string + example: abc123 + - name: Authorization + in: header + required: true + schema: + type: string + example: Bearer eyJhbGciOi... + - name: Content-Range + in: header + required: false + schema: + type: string + example: bytes 0-65535 + description: Optional. Byte range of the chunk being sent + requestBody: + required: true + content: + application/octet-stream: + schema: + type: string + format: binary + examples: + chunk-0: + summary: Upload chunk 0 of a blob + value: + responses: + "202": + description: Chunk accepted and stored + headers: + Location: + description: URL to continue or finalize the upload + schema: + type: string + example: /v2/library/ubuntu/blobs/uploads/abc123 + Range: + description: Byte range uploaded so far (inclusive) + schema: + type: string + example: 0-65535 + Docker-Upload-UUID: + description: Upload session UUID + schema: + type: string + example: abc123 + "400": + description: Malformed content or range + "401": + description: Authentication required + "403": + description: Access denied + "404": + description: Upload session not found + "416": + description: Range error (e.g., chunk out of order) + "429": + description: Too many requests + delete: + tags: + - Blobs + summary: Cancel blob upload + operationId: CancelBlobUpload + description: | + Cancel an in-progress blob upload session. + + This operation discards any data that has been uploaded and invalidates the upload session. + + Use this when: + - An upload fails or is aborted mid-process + - The client wants to clean up unused upload sessions + + After cancellation, the UUID is no longer valid and a new `POST` must be issued to restart the upload. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # DELETE – cancel an upload session + curl -X DELETE \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123` + parameters: + - name: name + in: path + required: true + description: Name of the repository + schema: + type: string + example: library/ubuntu + - name: uuid + in: path + required: true + description: Upload session UUID + schema: + type: string + example: abc123 + - name: Authorization + in: header + required: true + schema: + type: string + example: Bearer eyJhbGciOi... + responses: + "204": + description: Upload session cancelled successfully. No body is returned. + headers: + Content-Length: + description: Always zero + schema: + type: integer + example: 0 + "401": + description: Authentication required + "403": + description: Access denied + "404": + description: Upload session not found + "429": + description: Too many requests +x-tagGroups: + - name: General + tags: + - overview + - authentication + - pull + - push + - delete + - name: API + tags: + - Manifests + - Blobs +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +components: + securitySchemes: + registryToken: + type: http + scheme: bearer + description: Follow the WWW-Authenticate challenge and obtain a repository-scoped registry token. This is separate from the Hub API token exchange. +security: + - registryToken: [] diff --git a/prototypes/api-docs/dialects/lock.json b/prototypes/api-docs/dialects/lock.json new file mode 100644 index 000000000000..7fb2c1b1cdad --- /dev/null +++ b/prototypes/api-docs/dialects/lock.json @@ -0,0 +1,20 @@ +[ + { + "file": "oas-dialect.json", + "uri": "https://spec.openapis.org/oas/3.1/dialect/base", + "resolvedURL": "https://spec.openapis.org/oas/3.1/dialect/base", + "sha256": "8a0e89e365dadbebce2921ce6244340c1090e9d544c60d977e9ad6b97a61227b" + }, + { + "file": "oas-vocabulary.json", + "uri": "https://spec.openapis.org/oas/3.1/meta/base", + "resolvedURL": "https://spec.openapis.org/oas/3.1/meta/base", + "sha256": "267a88226e64e96dfc8c89dbd7e863160c84715e0fb893ca1d9fbf9f830f1f54" + }, + { + "file": "oas-document.json", + "uri": "https://spec.openapis.org/oas/3.2/schema/2025-09-17", + "resolvedURL": "https://spec.openapis.org/oas/3.2/schema/2025-09-17", + "sha256": "0c9d74bf25f9b9388b2d81e421ef60fdefa9feffa94898dadfc501b342b3bfcc" + } +] diff --git a/prototypes/api-docs/dialects/oas-dialect.json b/prototypes/api-docs/dialects/oas-dialect.json new file mode 100644 index 000000000000..eae8386e8ad3 --- /dev/null +++ b/prototypes/api-docs/dialects/oas-dialect.json @@ -0,0 +1,25 @@ +{ + "$id": "https://spec.openapis.org/oas/3.1/dialect/base", + "$schema": "https://json-schema.org/draft/2020-12/schema", + + "title": "OpenAPI 3.1 Schema Object Dialect", + "description": "A JSON Schema dialect describing schemas found in OpenAPI documents", + + "$vocabulary": { + "https://json-schema.org/draft/2020-12/vocab/core": true, + "https://json-schema.org/draft/2020-12/vocab/applicator": true, + "https://json-schema.org/draft/2020-12/vocab/unevaluated": true, + "https://json-schema.org/draft/2020-12/vocab/validation": true, + "https://json-schema.org/draft/2020-12/vocab/meta-data": true, + "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, + "https://json-schema.org/draft/2020-12/vocab/content": true, + "https://spec.openapis.org/oas/3.1/vocab/base": false + }, + + "$dynamicAnchor": "meta", + + "allOf": [ + { "$ref": "https://json-schema.org/draft/2020-12/schema" }, + { "$ref": "https://spec.openapis.org/oas/3.1/meta/base" } + ] +} diff --git a/prototypes/api-docs/dialects/oas-document.json b/prototypes/api-docs/dialects/oas-document.json new file mode 100644 index 000000000000..9453eeb20bec --- /dev/null +++ b/prototypes/api-docs/dialects/oas-document.json @@ -0,0 +1,1666 @@ +{ + "$id": "https://spec.openapis.org/oas/3.2/schema/2025-09-17", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "The description of OpenAPI v3.2.x Documents without Schema Object validation", + "type": "object", + "properties": { + "openapi": { + "type": "string", + "pattern": "^3\\.2\\.\\d+(-.+)?$" + }, + "$self": { + "type": "string", + "format": "uri-reference", + "$comment": "MUST NOT contain a fragment", + "pattern": "^[^#]*$" + }, + "info": { + "$ref": "#/$defs/info" + }, + "jsonSchemaDialect": { + "type": "string", + "format": "uri-reference", + "default": "https://spec.openapis.org/oas/3.2/dialect/2025-09-17" + }, + "servers": { + "type": "array", + "items": { + "$ref": "#/$defs/server" + }, + "default": [ + { + "url": "/" + } + ] + }, + "paths": { + "$ref": "#/$defs/paths" + }, + "webhooks": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/path-item" + } + }, + "components": { + "$ref": "#/$defs/components" + }, + "security": { + "type": "array", + "items": { + "$ref": "#/$defs/security-requirement" + } + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/$defs/tag" + } + }, + "externalDocs": { + "$ref": "#/$defs/external-documentation" + } + }, + "required": [ + "openapi", + "info" + ], + "anyOf": [ + { + "required": [ + "paths" + ] + }, + { + "required": [ + "components" + ] + }, + { + "required": [ + "webhooks" + ] + } + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false, + "$defs": { + "info": { + "$comment": "https://spec.openapis.org/oas/v3.2#info-object", + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "description": { + "type": "string" + }, + "termsOfService": { + "type": "string", + "format": "uri-reference" + }, + "contact": { + "$ref": "#/$defs/contact" + }, + "license": { + "$ref": "#/$defs/license" + }, + "version": { + "type": "string" + } + }, + "required": [ + "title", + "version" + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "contact": { + "$comment": "https://spec.openapis.org/oas/v3.2#contact-object", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri-reference" + }, + "email": { + "type": "string", + "format": "email" + } + }, + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "license": { + "$comment": "https://spec.openapis.org/oas/v3.2#license-object", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "identifier": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri-reference" + } + }, + "required": [ + "name" + ], + "dependentSchemas": { + "identifier": { + "not": { + "required": [ + "url" + ] + } + } + }, + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "server": { + "$comment": "https://spec.openapis.org/oas/v3.2#server-object", + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "variables": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/server-variable" + } + } + }, + "required": [ + "url" + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "server-variable": { + "$comment": "https://spec.openapis.org/oas/v3.2#server-variable-object", + "type": "object", + "properties": { + "enum": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "default": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "default" + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "components": { + "$comment": "https://spec.openapis.org/oas/v3.2#components-object", + "type": "object", + "properties": { + "schemas": { + "type": "object", + "additionalProperties": { + "$dynamicRef": "#meta" + } + }, + "responses": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/response-or-reference" + } + }, + "parameters": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/parameter-or-reference" + } + }, + "examples": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/example-or-reference" + } + }, + "requestBodies": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/request-body-or-reference" + } + }, + "headers": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/header-or-reference" + } + }, + "securitySchemes": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/security-scheme-or-reference" + } + }, + "links": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/link-or-reference" + } + }, + "callbacks": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/callbacks-or-reference" + } + }, + "pathItems": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/path-item" + } + }, + "mediaTypes": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/media-type-or-reference" + } + } + }, + "patternProperties": { + "^(?:schemas|responses|parameters|examples|requestBodies|headers|securitySchemes|links|callbacks|pathItems|mediaTypes)$": { + "$comment": "Enumerating all of the property names in the regex above is necessary for unevaluatedProperties to work as expected", + "propertyNames": { + "pattern": "^[a-zA-Z0-9._-]+$" + } + } + }, + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "paths": { + "$comment": "https://spec.openapis.org/oas/v3.2#paths-object", + "type": "object", + "patternProperties": { + "^/": { + "$ref": "#/$defs/path-item" + } + }, + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "path-item": { + "$comment": "https://spec.openapis.org/oas/v3.2#path-item-object", + "type": "object", + "properties": { + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "summary": { + "type": "string" + }, + "description": { + "type": "string" + }, + "servers": { + "type": "array", + "items": { + "$ref": "#/$defs/server" + } + }, + "parameters": { + "$ref": "#/$defs/parameters" + }, + "additionalOperations": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/operation" + }, + "propertyNames": { + "$comment": "RFC9110 restricts methods to \"1*tchar\" in ABNF", + "pattern": "^[a-zA-Z0-9!#$%&'*+.^_`|~-]+$", + "not": { + "enum": [ + "GET", + "PUT", + "POST", + "DELETE", + "OPTIONS", + "HEAD", + "PATCH", + "TRACE", + "QUERY" + ] + } + } + }, + "get": { + "$ref": "#/$defs/operation" + }, + "put": { + "$ref": "#/$defs/operation" + }, + "post": { + "$ref": "#/$defs/operation" + }, + "delete": { + "$ref": "#/$defs/operation" + }, + "options": { + "$ref": "#/$defs/operation" + }, + "head": { + "$ref": "#/$defs/operation" + }, + "patch": { + "$ref": "#/$defs/operation" + }, + "trace": { + "$ref": "#/$defs/operation" + }, + "query": { + "$ref": "#/$defs/operation" + } + }, + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "operation": { + "$comment": "https://spec.openapis.org/oas/v3.2#operation-object", + "type": "object", + "properties": { + "tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "summary": { + "type": "string" + }, + "description": { + "type": "string" + }, + "externalDocs": { + "$ref": "#/$defs/external-documentation" + }, + "operationId": { + "type": "string" + }, + "parameters": { + "$ref": "#/$defs/parameters" + }, + "requestBody": { + "$ref": "#/$defs/request-body-or-reference" + }, + "responses": { + "$ref": "#/$defs/responses" + }, + "callbacks": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/callbacks-or-reference" + } + }, + "deprecated": { + "default": false, + "type": "boolean" + }, + "security": { + "type": "array", + "items": { + "$ref": "#/$defs/security-requirement" + } + }, + "servers": { + "type": "array", + "items": { + "$ref": "#/$defs/server" + } + } + }, + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "external-documentation": { + "$comment": "https://spec.openapis.org/oas/v3.2#external-documentation-object", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri-reference" + } + }, + "required": [ + "url" + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "parameters": { + "type": "array", + "items": { + "$ref": "#/$defs/parameter-or-reference" + }, + "not": { + "allOf": [ + { + "contains": { + "type": "object", + "properties": { + "in": { + "const": "query" + } + }, + "required": [ + "in" + ] + } + }, + { + "contains": { + "type": "object", + "properties": { + "in": { + "const": "querystring" + } + }, + "required": [ + "in" + ] + } + } + ] + }, + "contains": { + "type": "object", + "properties": { + "in": { + "const": "querystring" + } + }, + "required": [ + "in" + ] + }, + "minContains": 0, + "maxContains": 1 + }, + "parameter": { + "$comment": "https://spec.openapis.org/oas/v3.2#parameter-object", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "in": { + "enum": [ + "query", + "querystring", + "header", + "path", + "cookie" + ] + }, + "description": { + "type": "string" + }, + "required": { + "default": false, + "type": "boolean" + }, + "deprecated": { + "default": false, + "type": "boolean" + }, + "schema": { + "$dynamicRef": "#meta" + }, + "content": { + "$ref": "#/$defs/content", + "minProperties": 1, + "maxProperties": 1 + } + }, + "required": [ + "name", + "in" + ], + "oneOf": [ + { + "required": [ + "schema" + ] + }, + { + "required": [ + "content" + ] + } + ], + "allOf": [ + { + "$ref": "#/$defs/examples" + }, + { + "$ref": "#/$defs/specification-extensions" + }, + { + "if": { + "properties": { + "in": { + "const": "query" + } + } + }, + "then": { + "properties": { + "allowEmptyValue": { + "default": false, + "type": "boolean" + } + } + } + }, + { + "if": { + "properties": { + "in": { + "const": "querystring" + } + } + }, + "then": { + "required": [ + "content" + ] + } + } + ], + "dependentSchemas": { + "schema": { + "properties": { + "style": { + "type": "string" + }, + "explode": { + "type": "boolean" + }, + "allowReserved": { + "default": false, + "type": "boolean" + } + }, + "allOf": [ + { + "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-path" + }, + { + "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-header" + }, + { + "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-query" + }, + { + "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-cookie" + }, + { + "$ref": "#/$defs/styles-for-form" + } + ], + "$defs": { + "styles-for-path": { + "if": { + "properties": { + "in": { + "const": "path" + } + } + }, + "then": { + "properties": { + "style": { + "default": "simple", + "enum": [ + "matrix", + "label", + "simple" + ] + }, + "required": { + "const": true + } + }, + "required": [ + "required" + ] + } + }, + "styles-for-header": { + "if": { + "properties": { + "in": { + "const": "header" + } + } + }, + "then": { + "properties": { + "style": { + "default": "simple", + "const": "simple" + } + } + } + }, + "styles-for-query": { + "if": { + "properties": { + "in": { + "const": "query" + } + } + }, + "then": { + "properties": { + "style": { + "default": "form", + "enum": [ + "form", + "spaceDelimited", + "pipeDelimited", + "deepObject" + ] + } + } + } + }, + "styles-for-cookie": { + "if": { + "properties": { + "in": { + "const": "cookie" + } + } + }, + "then": { + "properties": { + "style": { + "default": "form", + "enum": [ + "form", + "cookie" + ] + } + } + } + } + } + } + }, + "unevaluatedProperties": false + }, + "parameter-or-reference": { + "if": { + "type": "object", + "required": [ + "$ref" + ] + }, + "then": { + "$ref": "#/$defs/reference" + }, + "else": { + "$ref": "#/$defs/parameter" + } + }, + "request-body": { + "$comment": "https://spec.openapis.org/oas/v3.2#request-body-object", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "content": { + "$ref": "#/$defs/content" + }, + "required": { + "default": false, + "type": "boolean" + } + }, + "required": [ + "content" + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "request-body-or-reference": { + "if": { + "type": "object", + "required": [ + "$ref" + ] + }, + "then": { + "$ref": "#/$defs/reference" + }, + "else": { + "$ref": "#/$defs/request-body" + } + }, + "content": { + "$comment": "https://spec.openapis.org/oas/v3.2#fixed-fields-10", + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/media-type-or-reference" + }, + "propertyNames": { + "format": "media-range" + } + }, + "media-type": { + "$comment": "https://spec.openapis.org/oas/v3.2#media-type-object", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "schema": { + "$dynamicRef": "#meta" + }, + "itemSchema": { + "$dynamicRef": "#meta" + }, + "encoding": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/encoding" + } + }, + "prefixEncoding": { + "type": "array", + "items": { + "$ref": "#/$defs/encoding" + } + }, + "itemEncoding": { + "$ref": "#/$defs/encoding" + } + }, + "dependentSchemas": { + "encoding": { + "properties": { + "prefixEncoding": false, + "itemEncoding": false + } + } + }, + "allOf": [ + { + "$ref": "#/$defs/examples" + }, + { + "$ref": "#/$defs/specification-extensions" + } + ], + "unevaluatedProperties": false + }, + "media-type-or-reference": { + "if": { + "type": "object", + "required": [ + "$ref" + ] + }, + "then": { + "$ref": "#/$defs/reference" + }, + "else": { + "$ref": "#/$defs/media-type" + } + }, + "encoding": { + "$comment": "https://spec.openapis.org/oas/v3.2#encoding-object", + "type": "object", + "properties": { + "contentType": { + "type": "string", + "format": "media-range" + }, + "headers": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/header-or-reference" + } + }, + "style": { + "enum": [ + "form", + "spaceDelimited", + "pipeDelimited", + "deepObject" + ] + }, + "explode": { + "type": "boolean" + }, + "allowReserved": { + "type": "boolean" + }, + "encoding": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/encoding" + } + }, + "prefixEncoding": { + "type": "array", + "items": { + "$ref": "#/$defs/encoding" + } + }, + "itemEncoding": { + "$ref": "#/$defs/encoding" + } + }, + "dependentSchemas": { + "encoding": { + "properties": { + "prefixEncoding": false, + "itemEncoding": false + } + }, + "style": { + "properties": { + "allowReserved": { + "default": false + } + } + }, + "explode": { + "properties": { + "style": { + "default": "form" + }, + "allowReserved": { + "default": false + } + } + }, + "allowReserved": { + "properties": { + "style": { + "default": "form" + } + } + } + }, + "allOf": [ + { + "$ref": "#/$defs/specification-extensions" + }, + { + "$ref": "#/$defs/styles-for-form" + } + ], + "unevaluatedProperties": false + }, + "responses": { + "$comment": "https://spec.openapis.org/oas/v3.2#responses-object", + "type": "object", + "properties": { + "default": { + "$ref": "#/$defs/response-or-reference" + } + }, + "patternProperties": { + "^[1-5](?:[0-9]{2}|XX)$": { + "$ref": "#/$defs/response-or-reference" + } + }, + "minProperties": 1, + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false, + "if": { + "$comment": "either default, or at least one response code property must exist", + "patternProperties": { + "^[1-5](?:[0-9]{2}|XX)$": false + } + }, + "then": { + "required": [ + "default" + ] + } + }, + "response": { + "$comment": "https://spec.openapis.org/oas/v3.2#response-object", + "type": "object", + "properties": { + "summary": { + "type": "string" + }, + "description": { + "type": "string" + }, + "headers": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/header-or-reference" + } + }, + "content": { + "$ref": "#/$defs/content" + }, + "links": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/link-or-reference" + } + } + }, + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "response-or-reference": { + "if": { + "type": "object", + "required": [ + "$ref" + ] + }, + "then": { + "$ref": "#/$defs/reference" + }, + "else": { + "$ref": "#/$defs/response" + } + }, + "callbacks": { + "$comment": "https://spec.openapis.org/oas/v3.2#callback-object", + "type": "object", + "$ref": "#/$defs/specification-extensions", + "additionalProperties": { + "$ref": "#/$defs/path-item" + } + }, + "callbacks-or-reference": { + "if": { + "type": "object", + "required": [ + "$ref" + ] + }, + "then": { + "$ref": "#/$defs/reference" + }, + "else": { + "$ref": "#/$defs/callbacks" + } + }, + "example": { + "$comment": "https://spec.openapis.org/oas/v3.2#example-object", + "type": "object", + "properties": { + "summary": { + "type": "string" + }, + "description": { + "type": "string" + }, + "dataValue": true, + "serializedValue": { + "type": "string" + }, + "value": true, + "externalValue": { + "type": "string", + "format": "uri-reference" + } + }, + "allOf": [ + { + "not": { + "required": [ + "value", + "externalValue" + ] + } + }, + { + "not": { + "required": [ + "value", + "dataValue" + ] + } + }, + { + "not": { + "required": [ + "value", + "serializedValue" + ] + } + }, + { + "not": { + "required": [ + "serializedValue", + "externalValue" + ] + } + } + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "example-or-reference": { + "if": { + "type": "object", + "required": [ + "$ref" + ] + }, + "then": { + "$ref": "#/$defs/reference" + }, + "else": { + "$ref": "#/$defs/example" + } + }, + "link": { + "$comment": "https://spec.openapis.org/oas/v3.2#link-object", + "type": "object", + "properties": { + "operationRef": { + "type": "string", + "format": "uri-reference" + }, + "operationId": { + "type": "string" + }, + "parameters": { + "$ref": "#/$defs/map-of-strings" + }, + "requestBody": true, + "description": { + "type": "string" + }, + "server": { + "$ref": "#/$defs/server" + } + }, + "oneOf": [ + { + "required": [ + "operationRef" + ] + }, + { + "required": [ + "operationId" + ] + } + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "link-or-reference": { + "if": { + "type": "object", + "required": [ + "$ref" + ] + }, + "then": { + "$ref": "#/$defs/reference" + }, + "else": { + "$ref": "#/$defs/link" + } + }, + "header": { + "$comment": "https://spec.openapis.org/oas/v3.2#header-object", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "required": { + "default": false, + "type": "boolean" + }, + "deprecated": { + "default": false, + "type": "boolean" + }, + "schema": { + "$dynamicRef": "#meta" + }, + "content": { + "$ref": "#/$defs/content", + "minProperties": 1, + "maxProperties": 1 + } + }, + "oneOf": [ + { + "required": [ + "schema" + ] + }, + { + "required": [ + "content" + ] + } + ], + "dependentSchemas": { + "schema": { + "properties": { + "style": { + "default": "simple", + "const": "simple" + }, + "explode": { + "default": false, + "type": "boolean" + }, + "allowReserved": { + "default": false, + "type": "boolean" + } + } + } + }, + "allOf": [ + { + "$ref": "#/$defs/examples" + }, + { + "$ref": "#/$defs/specification-extensions" + } + ], + "unevaluatedProperties": false + }, + "header-or-reference": { + "if": { + "type": "object", + "required": [ + "$ref" + ] + }, + "then": { + "$ref": "#/$defs/reference" + }, + "else": { + "$ref": "#/$defs/header" + } + }, + "tag": { + "$comment": "https://spec.openapis.org/oas/v3.2#tag-object", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "description": { + "type": "string" + }, + "externalDocs": { + "$ref": "#/$defs/external-documentation" + }, + "parent": { + "type": "string" + }, + "kind": { + "type": "string" + } + }, + "required": [ + "name" + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "reference": { + "$comment": "https://spec.openapis.org/oas/v3.2#reference-object", + "type": "object", + "properties": { + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "summary": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "schema": { + "$comment": "https://spec.openapis.org/oas/v3.2#schema-object", + "$dynamicAnchor": "meta", + "type": [ + "object", + "boolean" + ] + }, + "security-scheme": { + "$comment": "https://spec.openapis.org/oas/v3.2#security-scheme-object", + "type": "object", + "properties": { + "type": { + "enum": [ + "apiKey", + "http", + "mutualTLS", + "oauth2", + "openIdConnect" + ] + }, + "description": { + "type": "string" + }, + "deprecated": { + "default": false, + "type": "boolean" + } + }, + "required": [ + "type" + ], + "allOf": [ + { + "$ref": "#/$defs/specification-extensions" + }, + { + "$ref": "#/$defs/security-scheme/$defs/type-apikey" + }, + { + "$ref": "#/$defs/security-scheme/$defs/type-http" + }, + { + "$ref": "#/$defs/security-scheme/$defs/type-http-bearer" + }, + { + "$ref": "#/$defs/security-scheme/$defs/type-oauth2" + }, + { + "$ref": "#/$defs/security-scheme/$defs/type-oidc" + } + ], + "unevaluatedProperties": false, + "$defs": { + "type-apikey": { + "if": { + "properties": { + "type": { + "const": "apiKey" + } + } + }, + "then": { + "properties": { + "name": { + "type": "string" + }, + "in": { + "enum": [ + "query", + "header", + "cookie" + ] + } + }, + "required": [ + "name", + "in" + ] + } + }, + "type-http": { + "if": { + "properties": { + "type": { + "const": "http" + } + } + }, + "then": { + "properties": { + "scheme": { + "type": "string" + } + }, + "required": [ + "scheme" + ] + } + }, + "type-http-bearer": { + "if": { + "properties": { + "type": { + "const": "http" + }, + "scheme": { + "type": "string", + "pattern": "^[Bb][Ee][Aa][Rr][Ee][Rr]$" + } + }, + "required": [ + "type", + "scheme" + ] + }, + "then": { + "properties": { + "bearerFormat": { + "type": "string" + } + } + } + }, + "type-oauth2": { + "if": { + "properties": { + "type": { + "const": "oauth2" + } + } + }, + "then": { + "properties": { + "flows": { + "$ref": "#/$defs/oauth-flows" + }, + "oauth2MetadataUrl": { + "type": "string", + "format": "uri-reference" + } + }, + "required": [ + "flows" + ] + } + }, + "type-oidc": { + "if": { + "properties": { + "type": { + "const": "openIdConnect" + } + } + }, + "then": { + "properties": { + "openIdConnectUrl": { + "type": "string", + "format": "uri-reference" + } + }, + "required": [ + "openIdConnectUrl" + ] + } + } + } + }, + "security-scheme-or-reference": { + "if": { + "type": "object", + "required": [ + "$ref" + ] + }, + "then": { + "$ref": "#/$defs/reference" + }, + "else": { + "$ref": "#/$defs/security-scheme" + } + }, + "oauth-flows": { + "type": "object", + "properties": { + "implicit": { + "$ref": "#/$defs/oauth-flows/$defs/implicit" + }, + "password": { + "$ref": "#/$defs/oauth-flows/$defs/password" + }, + "clientCredentials": { + "$ref": "#/$defs/oauth-flows/$defs/client-credentials" + }, + "authorizationCode": { + "$ref": "#/$defs/oauth-flows/$defs/authorization-code" + }, + "deviceAuthorization": { + "$ref": "#/$defs/oauth-flows/$defs/device-authorization" + } + }, + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false, + "$defs": { + "implicit": { + "type": "object", + "properties": { + "authorizationUrl": { + "type": "string", + "format": "uri-reference" + }, + "refreshUrl": { + "type": "string", + "format": "uri-reference" + }, + "scopes": { + "$ref": "#/$defs/map-of-strings" + } + }, + "required": [ + "authorizationUrl", + "scopes" + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "password": { + "type": "object", + "properties": { + "tokenUrl": { + "type": "string", + "format": "uri-reference" + }, + "refreshUrl": { + "type": "string", + "format": "uri-reference" + }, + "scopes": { + "$ref": "#/$defs/map-of-strings" + } + }, + "required": [ + "tokenUrl", + "scopes" + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "client-credentials": { + "type": "object", + "properties": { + "tokenUrl": { + "type": "string", + "format": "uri-reference" + }, + "refreshUrl": { + "type": "string", + "format": "uri-reference" + }, + "scopes": { + "$ref": "#/$defs/map-of-strings" + } + }, + "required": [ + "tokenUrl", + "scopes" + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "authorization-code": { + "type": "object", + "properties": { + "authorizationUrl": { + "type": "string", + "format": "uri-reference" + }, + "tokenUrl": { + "type": "string", + "format": "uri-reference" + }, + "refreshUrl": { + "type": "string", + "format": "uri-reference" + }, + "scopes": { + "$ref": "#/$defs/map-of-strings" + } + }, + "required": [ + "authorizationUrl", + "tokenUrl", + "scopes" + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + }, + "device-authorization": { + "type": "object", + "properties": { + "deviceAuthorizationUrl": { + "type": "string", + "format": "uri-reference" + }, + "tokenUrl": { + "type": "string", + "format": "uri-reference" + }, + "refreshUrl": { + "type": "string", + "format": "uri-reference" + }, + "scopes": { + "$ref": "#/$defs/map-of-strings" + } + }, + "required": [ + "deviceAuthorizationUrl", + "tokenUrl", + "scopes" + ], + "$ref": "#/$defs/specification-extensions", + "unevaluatedProperties": false + } + } + }, + "security-requirement": { + "$comment": "https://spec.openapis.org/oas/v3.2#security-requirement-object", + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "specification-extensions": { + "$comment": "https://spec.openapis.org/oas/v3.2#specification-extensions", + "patternProperties": { + "^x-": true + } + }, + "examples": { + "properties": { + "example": true, + "examples": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/example-or-reference" + } + } + }, + "not": { + "required": [ + "example", + "examples" + ] + } + }, + "map-of-strings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "styles-for-form": { + "if": { + "properties": { + "style": { + "const": "form" + } + }, + "required": [ + "style" + ] + }, + "then": { + "properties": { + "explode": { + "default": true + } + } + }, + "else": { + "properties": { + "explode": { + "default": false + } + } + } + } + } +} diff --git a/prototypes/api-docs/dialects/oas-vocabulary.json b/prototypes/api-docs/dialects/oas-vocabulary.json new file mode 100644 index 000000000000..a7a59f1c7d13 --- /dev/null +++ b/prototypes/api-docs/dialects/oas-vocabulary.json @@ -0,0 +1,87 @@ +{ + "$id": "https://spec.openapis.org/oas/3.1/meta/base", + "$schema": "https://json-schema.org/draft/2020-12/schema", + + "title": "OAS Base vocabulary", + "description": "A JSON Schema Vocabulary used in the OpenAPI Schema Dialect", + + "$vocabulary": { + "https://spec.openapis.org/oas/3.1/vocab/base": true + }, + + "$dynamicAnchor": "meta", + + "type": ["object", "boolean"], + "properties": { + "example": true, + "discriminator": { "$ref": "#/$defs/discriminator" }, + "externalDocs": { "$ref": "#/$defs/external-docs" }, + "xml": { "$ref": "#/$defs/xml" } + }, + + "$defs": { + "extensible": { + "patternProperties": { + "^x-": true + } + }, + + "discriminator": { + "$ref": "#/$defs/extensible", + "type": "object", + "properties": { + "propertyName": { + "type": "string" + }, + "mapping": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "required": ["propertyName"], + "unevaluatedProperties": false + }, + + "external-docs": { + "$ref": "#/$defs/extensible", + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri-reference" + }, + "description": { + "type": "string" + } + }, + "required": ["url"], + "unevaluatedProperties": false + }, + + "xml": { + "$ref": "#/$defs/extensible", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string", + "format": "uri" + }, + "prefix": { + "type": "string" + }, + "attribute": { + "type": "boolean" + }, + "wrapped": { + "type": "boolean" + } + }, + "unevaluatedProperties": false + } + } +} diff --git a/prototypes/api-docs/evidence/browser.json b/prototypes/api-docs/evidence/browser.json new file mode 100644 index 000000000000..f1878b93427a --- /dev/null +++ b/prototypes/api-docs/evidence/browser.json @@ -0,0 +1,40 @@ +{ + "result": "pass", + "checks": [ + "Catalog exposes all six snapshots", + "Operation filter narrows Engine operations", + "Filter results match their label", + "Keyboard version selection changes the reference", + "Copy preserves shell-expandable credentials", + "Product manual links back to the same API reference", + "Engine exposes multiple media types", + "Media selection filters without removing source variants", + "Example selection updates displayed examples", + "Search finds schema properties with API version context", + "Operation page fits a narrow viewport", + "Request example remains usable on a narrow screen", + "Reference content is present without JavaScript" + ], + "search": [ + { + "url": "/engine/network/", + "title": "Networking overview" + }, + { + "url": "/api-prototype/engine-1.55/schemas/EndpointSettings/", + "title": "EndpointSettings — Docker Engine API 1.55" + }, + { + "url": "/api-prototype/engine-1.56/schemas/EndpointSettings/", + "title": "EndpointSettings — Docker Engine API 1.56" + }, + { + "url": "/engine/release-notes/28/", + "title": "Docker Engine version 28 release notes" + }, + { + "url": "/reference/api/engine/version-history/", + "title": "Engine API version history" + } + ] +} diff --git a/prototypes/api-docs/evidence/catalog.png b/prototypes/api-docs/evidence/catalog.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d5fb6f5698887f8e4507833de0e1375e6becd5 GIT binary patch literal 79269 zcmd43WmMZu7cWXnDJ|L-_X5R&6=;B>#odEj@#4juw57m<7k4Nc2-cuQ(-!yQ#odBS zkU)~l^FHr$*1hYl`{A5>KAiuDtXco;%-%Dz_so{xBuZOTiI{+v00#$$SVdW07Y7IL zD-I6s&ZGNxZy+=y#W*-ma8%@FK>j)Vi;vAfQ)~FgxI>>_{^*JoyU#*>pH#avGUGm8 z0T*8xc;yb&#!q+)Lvng@!W0OBpBa6&M#QK|Dd1AWt0*Hpl_T z*xqQ!6>*8a;>u_qY~Eg?*}C1z@uFeJlsvfO{rB@GeV6Q?77h+W>SE4H_EVpei_&(nVRyv|CyTl+aDew_RccrZ7{i7h3)A@ z<7b`xxc026tH}~4#nCQ!%D>D$beCBPY>>W)dQiW|z5~$~v>RxIn7s*UT$`%wxk!hy z4gI|LAKGKpw{=9nY26d>lO9mY{j{g8@1RE1`PA408|y%{|4x8ETLukXA#h3aI_W{R z3S>H6CZuuq@19arSs&2~@ueYQjxJ&wL$0x<7OAQy=6}PP|EgYT5bl z2I%B@kj8@(ta-D$vUWOIMpN*#_%Ad1t8nR07uu%gzrOmlAf+8CH(ChuZavWy@#i7&|~2=H<7$D*^i~g{(AboSMNZM?)|3CC_rz z#eDpsYT6a$B{lu__wYO4xK}o`^@r`)8@xAd@X7DO{5!Y(cfGAb}JVlCAn+%d_7d-_q3{TGI^@xIv*$TFnT*( z0kJ22&Ho?iKDagKT0W%>03%AXAIw$lIae~lcMMIc&ojud&L$q~klHgq+QH~we+Bt_ zE=sS5NunO0ZzIXiUcM9l9p`5ouKmMCPdb}Mh>p>(adktYOqaML@%>CZ;1@Nh;fcr`0)>ca7v*S9;1` z@-)YEo(M9#XP`ydzIqnt)dUL^>W>-Q!Vd3&Ag27tFGmKliW+8~%B|?!4dc)qVKu5#eUe<%~me`p0q+-)4ajdwncp zI8A>3sLS3hf|%CXpLJ+M=Vj27^t(yX+XYt*8-Uk0)h~>%_YR0R2(f|{C-^Grr zg}t8%olaoJ)0HnbRH0@{r4}#UMry0g`w4-S;O)Kx^yKctO|u0#S<+uS@+God z%Wdc>j&``k^fp+jt*FC)B5Aa`x}29shY0=RMCZh-8M!}kx$=9$8H1|;>?(CD*1#pq zTM|(dk2BZP(bdGMFPMlMC0Yg;28X=K>mR>FjQ(ls`R$^yNtJ10@D>4X8+$j`3H>;q z>RJkRQB(Y*DCb$p^1N12aSp;d4?YRJrp?P7eBMM}p)~{Y5uiSy|`x_qr~^VZI?M2)*b z1%LLDn8H!0(52PpIJQ)X=)BBjEggH#bo{g7+>Gm*5O!!S`mlBy0;(AsbEJl8E}ai0${b(I+kFzL%MbfG>(g_@<21839>Yki zzNI>-vDU5ucvN>#b?$Ij$x{OjD&BJr)QfzX8%X`l_yrq;{k&GBE8fLG~T^4)RPg}l>uv=8X%ILVNY9f*6 zh^t8w_@1PVIvSSz#~sbgq_-@O71KRAp)GP`rGfZyd-;@UU}V3wzD(1w{$dG@z^~v| zI`JV-UHK+`Sff0dw!-N&%2X+#<^2d*JHCgeEb=S9Ra_L0%)2p-rJ`4c%j<6fVQ_#u zSKqZ|3Ot3*oVxElSR=E9&1KK2#Qj3a=UAZo+WK!72<*C5I&@~b;M(GYT9Y5?4ZWlqi;-%6?%INf-gE2J6UE;&q7nVcNBY< zg#2m_ci}I-Zr2Zk%TM^RwAKnCrtm#m&1|(psnoh1$@%^;-WmE476x1U#aX52H*R{r zij7dtEj5LNF@CLap@Vl)UVqsU4w3Y352O>;MKQ2wbjwfXQ!)SgT(YtW9?Pr-vf=|CzMDIn`E(9Bh1Wyi~K#tM`Z5_MA z;}j=J>pIFzp7u2!7W(Z*oKELvb(8Hlv}ysow1<~>r`6zCX`)cHr8DvFOzSR_`BHzm z(&7&qX}{WY$?3GC4S4apP?^xzqwfb+I2iVn0w#H}0Y+!+d45b`xP;=55gbSKmmBXX~j-g*;?65_PPedJ{hFgvepRSQDCv}%(sE7rd`~&Q&VIH zkb#snpTUvJ7mG2#B+FXYAiOqYdy^YUVQXtK=PcrUh8hWx7fI&Y?=<@+#tBhi@8Dt`0%&bR)R*5e%d+Z3pK zM|J7#-8(;_&DYu1!!p;YO2vbw5jsNW)wiW0YrNe9@xr{t;Z!@!JL!G$RU9O zifD}WXgsAuBo6|qR}0gFD&{J!7NTL(XVf=z9^i=|dHUH`F)lx4Hmf{&r%u(Xdg5Lw zPF-Zt?EhFoZ6qKpLlgOlr{?0;y5EJyhn6$ETHZOHpPVoK33Ja7(Mlyvcy0rs<_jA9 z%3VHutI_e?NHaXb!Yh_UeA0|dgxcAZuC3I1m=*2Fn>MEF1Eu=P6m%wvTI27qWbjpQ z+@+cdFW7au^MpTaAM_D0Cl_p=V)(~ZH?uVt@WX2(wydqn+aL;%6mdH$a7bmS?MaX% z+-!xs9%l1Xex;R?u;VsgY*G8{dS@mgUz*xZ65JN&DpIt6Ly?`ZB<1-!A@KdYS?`jh z26O}1iSmPGd#3{CKeDysH=mR$ur&e)cQ%5uNju5ZF?zl(ivYvuV5N6Q)HAm3gx=7oplmxyvpL@cJd!G#fSEYTpm2Bt42x2I+q7dU!CrWj~@?_M_5IyP2iqdKC(HxKW(}h zy_!5==rFm2ZXS2DP4?~_N^5q07?v&5Fl!4r+QaV{4ZYFSuX&v+jnTQWc^|NysXuAB zV3ABDf=$j@GCXY7$#Wi@6De}DC+M7^p1`V9(^t%$#00;aIB4SOe9kA}Wp$7}h|sSz zW8fj|P(X?9v}f!(R5F~m0-OZ%FIod#yARiXN!>o4H?Lj@_=?!07xax-?Y*EycvZ3m z+$%e;-ss2(E^z%f7jT+xjg~$``~vCQnQ^f|=QLeXnVhYI{h z9kG@UR^1HrJHNk0tywn{-0-)%?bR(}L+ravdKW7suXqCnuiS>|1S~J$ekcZn2lBp< zqPNzcqkx-MKZziCX{c@QiMZVI{&;%~bAz?`A9^%lGU|jj69l`#QohWimQ;KFh1nCApslYBpR;z_WLm%@*tiR#zUAQ6a7`Vyzm@&_XpM3P$^uuaguN4yjh8lOV^_l8HZ53ijW~!rfeS_r|a|1oOvM*|uH<6oR+lM;X zgGTRL0KwAzhBlq`J#2iB7r8KVe^c(Cn(sJ+ODx~uC z)(5ZQIQosRZQ-eXku`@sDB-HIur}21POtY`Jl|SDs%v(Ee7?qZ!w2|4&}WaphOt&R zjYGYgF)S>iMaUP-Zy9i<(wRT^6v;1MW54cw(enHP`UJ%#NBO$GY$B|1P9{G^wfE^a3_~Z{*nFvQo$U`&EmM_hX8J_ENc25ESWN?I0qZ#qc^@-*2RqqJlAHLkb2KAt=h!4uOT{DZ>He!m{AYHh%1C z;?HB0-Q8~S^QXS|es`s?_sguUukMuP4M!Pw?u0j$trs$|UC|S)#~23Syo~rrzrNlCzTMO+UJiwIaRf7&vCq?XC{_tTbbedff zT~RqWABejjm}-5!qVTw6Q#B-{-DBw!vS5}Dbcv5HG8mO<_&NCECg%a-)h-rbcNkbyt?>Ms zO>$?jt<}@hzzNax7dQD%uWi%f8-Fp9Y42dqRl^o+U15tb5K?)$$Id6I;kLx*Y{v_@ zH&&6~m)s(if8elp7o9{v?IC&z90$kXc2g>gSbFUlmioF^-}FLy2RFYkHPI4Ug2%aK zbU{I!x*bUWGmAIXlE|C#`-Fh7cR6m_ln)Hs-3pEtxBD4i=k~pl4ur(Op-y*SkSGE6 zd68Jj=!UmMY7FnyX@*|y%6l?RVJdW5Wcm{)NwDg2W;62!*nN|t5i?1E6HPl**1NU( zr59+oC(GTIcsIgi@@Q%qUF?6vu=TwuQ{+e@iuo=`(Qn+@n}k3x^C3iKJVnN^sjb8E zAp+N=Z#qgI@UM*?En{!pze~J*?zQ#uE=sc9)VIBzSO3_&bh`pgV|CN);w%Rv^3Mo% zItyyEd-VLZUyodn@dwQ*D)3tE>g-bcBn~oi8M;^Q54<>Jo%M>_eg6{$lyuYT{60av z$m&E^b^gcXe!LP*^h7`|WvIP`xk++HA(0e&3@;?BTqCWVC6IOL$oqSfj3Ki7=39?; z$jN}p7E_jmHSOTrDlE!5Q2(-GFL0DgS><(rfS&)jp8!8C==T9@ZZn8}57a5glBmXCzQ2u#ah21CMNBpX{WgxPg+ z(gbJ3YX}ZZ=8K2h zU1hUeBu;zTPM7_NsM+<~+?h=fY7wbkg(0LsigH>AouH<+20PF_r5LEtM3ZnSOCF-- zM7w)RZN}hPDdrV;n2qaa?CZOef3!E!CMXBJ$xPvplEPiF0Zhxy_h#U$ffC-QWh~Z> zh;Y~(FcGrpVX_+_RWxqmSn1>cYRZ(`TzPI5xQM;si9)4DGy6kF=_Oly#e!EuJAZ*< zPe-H!5cz~^8wj+Rw}`y}vL+f4!7OoGRQ=k<-Ae_H6rveR02)$a@~9%!-WM+yl%`BvtWZ}`KihBhrJ(e&~}C&gS9kDjn+-YL7n z?(~Tm`xS59E5X&1g0ss$uivX5*4I7uHMM{#t3U9%3$X@{LDLl?=1H+ZKo}RTZc7-| z#!^ULtk|^!Kd#Lb_hmK{FgOJxrYnO-529Q81WC6v+FOiVIz6d~9`Jp&+In)%?%C%t>%DdDF?W!O%Uh>I~jEM#y?zYu)p5+K*ez{JIJ?;66}1gs5+w zvU6?AvHYAQ?Znu>+e4R4AWGgK5?VwepK#8hZ{SUs)91{D0a(&by%a9EU=DF0=Ebdy zu9)HBho4er1seaIvM-uFpAZ zpn&b$Z-ZxdCg870Wc(1=Aa88W%2j;!=_UbsSng)XTve$#P_`$RnPYyJWsj$GE0*5X z@Bh2Vg_@db$kBXwFsswk?rG;!l}x;yo~-}`Hh`eAlA?dw>%>;d98X@Cm3GU`m3{#^ zwUo#XpE-pz9q9gAr_kG%qIIa-k;XcQ^k1*LmV1VhWh#k{sQ)gKDB>(KC}wZRBp~c*8-PKisnehMuA^lt+4+g?Oi1@9C93C_Icc=Zf%Q>Y?|kc}i-QOVIwcP4x*TT9&0^b(ldsI;Y*Nr+sYzcwLE&Q-$aL^M4@ zTInW6H-=Bm!=COWZ#W@;B}C7^^P@S*{H9DozFZyGCut=vOvZpw3aR0BfGo6=Gi zYot=;rb%pDu;XirkWFAzLf_XJW&3ES4mqffYHsPNqMUMu#@yR!z9C1F1|`-_CZ!4U zlTP8<(&im((uwW8PCnE{Ps29p09>=Yq~qBUDl5-wFKjnsZty*P`u$g#{2B7|cHWFh zJ2@iDz86K!G|_)NJ7ID(mfQ7h-LX!^qo%CQ-J1N8 z7pU)-vVDd~(9vvhf{t>J0r|H|4M42e^BUlUqTsg4uAyDujs+3&o)Z3O(Uy~=7psd} zPyNS0D;aLr*7MZDQVmxpCyp;1^3Tde3g7Hx|!^v z{T8pKIjEkZmIz%8#V2s3CDPqb=UFeNnPw)UrSskfNr*|Wf=%$}0$bWHR*kZ8w>_EC zB@~+cLO!N<`qj-c=XZg5bn$6?4%9P?Ma`WK`k-yJrp0qj9W;?CeY1KwanNzMn%BtZ z#+rY8UG7!b<>;{X^YL$G+!zVPtCg_`EYZ(6c-2HQ?Q^m58z{P6(_NHaEXF14+vtW4 z@|Xv3dad(Be%Y-4RSw^vcy;ZfjK?$yhPZcd=}GjeS9I!h4~uK*W!-Jnq}X>=2j(U! z(iI+xMA0gcmR_a`+T-z-aG?7@rBpFz1&CiA>*BPq6mSnbTI$fX;?2TgNCVtpK$wkPjI47m% zMN?bG|0gapd%Lc8ZX(;{Vw4ILSu3$QQkGSXE1qlFiTRTtFrD7u9sqHa?C-p3n4Di; zjHS(_u;D{qnGOwm8Hb1t^E114mohnwOVXC2^_B8*}h~Q-%$MN!yMH@EPuZay=u7+(}4H3 zlax{%L^~C&6LQ{Ua+4Tg2_M~Y9=-C1jm5b}bY}Np4ve=Rqwva7koHH}gXgtCYVkB+ zBS$~FsBt*y&Q^ZZ>GSAQ*PfSm{p_B$9eL+mNNXh%;=pG(c~|d7281c0$u0!Zz=o^d zuKN)(iyS{>Las*|b55a7ta4#Y^OE6R5$?6Qt{Q6?p|?N%=dnSi->}I`dbd386%S+g z#j|fl=-N65QRe}R8&`887)STU%b`X43caWO;^e5Mcghyk_&IT zYR?;Fhaaw<&V{>%l((&C_uXu4W;PrcDCi@1k#6YRS72(|m7x-nWavc+^jb!&T9GI4 zxFVIwhQk@D+(hpPOYC zCxM^dT(J8n0dnFqSS#XAffDX6~^&3GnX$*8}c1S6+o*mS}WnC;{C6WCJB? zH+NhS1RL2f-Hwwyfx@8m@Ny_)E$1q<>@Nu|hQps8D5`Gin)oV(280NcbCJTADunMz zMDE9@*`Ru(>G{+{^;C}-?Sq!2sqDn8S0rE7BcdJXfGGcEVb*QJ3mJAv*^3dSwio}&Sv+*;$0mi ziy29)P@g(nRb5?D1TTfA)3nYF`D?CN&iZ{z8DE(8&?+WOa)*{lFqk!OiRtGL6u~EB z8G5B$N<>_mUADP4S2H81PcQSY)-Q>+TzwzQ z6J*VlO=}X>dJk+s0Q^lv%ev}7W78BU;sq56;lrZD7GW%VEx`?8t8*&3ir<_m_I{Y6xptyII(%W6C<7v6(WMdudg}q%7%Y(TE9}26toqNV`|FHT#LR z=G(Bm9;dOEM8(Tx^A^*Nt&pwNMHiGXY)oG*q5U}E6-9#~OKS5VjTg2&gSKjwzCVjE z81r`XzV#K%67p`UjafX*&M-PENIXqoq83|eX{#64zvZz{h^yZeCCMqCC1+b)^&fi^ zYPc!RK#}A`GnQc=@_QQ#&mLA6C#lk?#{rv0%7m|rteaDv4C0sTRPV|Jv%ZxFk3}cf z+|aA7D>JTM7?@`?Lu#saMU7}i^G!-dAmR?nP}c+rmiWo;0e6^2NB8e3%uKvemx0?_ zijBrLZ{jMk%eh};h|=@e5xs^C1J*)FEE+6n(B`h>It|{916&W%70HHx!L2UibIV#) zSO>Fjy=mX(BSXLYwPHE|zG;devJjOYdw6V~!fIeNQDi`?u1arz?Gb*6;`9TP1jgO- zr7NfY#kIPiq-lBb^gflV^g_};>9qLZ^_e#cs3TI5Bjp4h-K68nFQLCkr~QN9KoxYF zm!ER?x~X^CcSe*bI14Yny8XQx7RRWzJKtp=^8Wh{vj98)^igJsjND_Nr@|7lc*Zsc zFT$&y>3aNKSHWFwxB{@GM@w`i4Sagmz1elYAa}R*@b=DKjaS%A-hOijk+MM>og-C- zG;L<`4$!47s+v7j6<62x^HqlnHtc3Lwd=*f2TdAMFS4_D&=`tsAc=9P^7Kn)g$1|u zrA8DSQ!@uv2(KJ#E~SiFvbqfvK~KOrA#O$4dq*uaITjkDrW5<2+`~h(BMVaV$KYn5 z`$&<}bE4fr(dOvGcP9rF-SErbA)oHb%>3D10|ONv*%Na{Bv24&wv34$qB`Z}^~%1F zC9{CNWU~P+ouX>``SDSE=K>bCx@}de!|zp8bI?V(rM@9l$x z-P7An6D-QY1`tdGuWtBKm|hZUwccT5GEvQyvYCmd zhi_e7th??YG$Ksx?I-j5c00G-vR5 z^i0uqSHrAWZ{jd?keHFO|4_Qxvwn-Zg8fr~8PAd6DZw>a$#~C)gKw2`+>_HumJ?8p z_D<^to9d6J0D!?e!xkA(ooD=oZJ;Qf(J2x80#zC7R}f zmi$6COZOB1i>Oq^FigLwXE=%S!aniCOFQzENyfG}*g$c(Vs-KM1D^v&ZC%afvs6G5 z7|h;~tHU@H+1-H1V_g*A8>Z5(hE!*(-s+r_WZ6 z(L~?s9+4B?o#Z&jB0U1uROrO1f%_D-2ta^_s^)A^$0Ds;{cMZ$0C^Y{JEa=7R_No| zP>@Q)f@a~}k{?Hc0?vDHW8hMSPWshlB_{i0a0*7$D&~`<<1+U23qh*2J6cCi@5XUu zuT(J>(q_D0aj*;3F)=phs=&aT@P1j?FIzYX;_e}_6kw{<60nFCA-6YM$S3A<)(kY`5 zm^A$`N=~&SLBGsFVKozh-ZN)U4QXpFUJFE>wU52}d+l)EO<)-D-CMIFd5&!6hs%)N z)es8&YO2N15fRgn<~$YBc;C5KgI2p6Gk&>!*ZxP?KFdKp!=jH;PeagYYFf#;yCc{^+lM$Jdu^Alv}=Sj*v{1PoKble2d@?jA( zu#dk|(nBA1@Ohu>P+Ha1_w@M|4o5^-Du!v?1mN)~!SJ)ibdKo7e(5Eql?O^hvPeum zU;?#bLbfKE7_EOUwOKCYpz?+RzwN3<=BgM2gF4bfm`tgjd>5ydcNLlgTfnX=IFcuI zhcVpqJFu6y(&frSWzM%+G(+?k?48Y#_bBMK;kqiS??2}dkWY^4S`FNRCLP&!CH3Y8 ztaRs#t?`gnlxog;UBJYsXjVgVimZrlghR-(T$120EBBI7+Z{B26KZ<{@tbMWkI6|? z9l%L*G)z9XTfsrx9sse&1_Z3%?4rKYR%Q$xZfpCkmC5t)l?0v%7|T8!C;ofxKctry z5qsW+Z8Pfiq1(YnI-8c_bJ{_P_weoRq9(g!OUr7 z<4kZnDqySZ<(k2WCE~BY+2gF}pGnYefCKnNSH4z~AlRxvhoX6M7+H)hkYsQ9`dDy= zuLkDi+&^pi0w#j}t6e`O$9y_-uy&=cw~aSLs3o#ofE8Um>Gu=aQ|BY$Q(nJ&Y!1rm zAE@XbxQP+LB)a{F3l5H*t8(ksT}aY=ytfWkkH0>$PCq&FzPU5wNw_^BsNdO_adh@c z7BceuTJz@00ry|5^p!X_Ku_HW-HHTbw#RN7Fq$<1ci}LTr08o>0M^eiD@CVPnkC)j zg9P|r{4dVR=s*Z4l@7VmT86*DHpcOf2*dA-b!|Du^sxl$U`OP_x9wGoUh zSDm=vLDc113_H2BgXW&E{KL!tdY~dD_Zs{Bw;RYu=l`Q0Rn9a6AF}Uc@9+s_;A^!5 z|3N(W7tUwbyahHw{_nu(zKtnQwjxtQk^5B$_8o3L+CK8BDt-gYeC&&_QBc~3`?a?jC>Ox6FrTWSzZuy99R4>IS;zyc}O!svc&$4p>v4U1Ps?EV+Ym zsgbjPDvaZ_%%S%G!k61TV`m={l`_WseD(6}6Ya$sP&J5?qS$PDwVdV=qHgJq99#<` zKGywbKKwUR2BA^0C~UsdkqqwSw$MqmA?w!4e`L7(_+Ll0|Igs%^YYZ$IdHya8}YFJ zBNfj1zY=_a`45-e)xX|@sm3- zaDMyz4~75VbBo}AX1@P_U1qSLVcTs@KOoU8XW>_my84Bwu^&bU_h;UC-aoG7?52We zHSEqv;03U?T^Ul|jkJyEZlrHoKkXz02M1p2W9jzEzS$0z?2r3ab0>F2gogwH4W|cK z@CwP8t*C^GHx#tD*zzn}T?V_1_t^O{qdlx5wW=u_cxB(g$bq;?s=AtsMCtD^*C|70 z8h!8FzpO{Ljv9E$i6}PtnOD#QX(b2eJBi<1zI=r9rb2z;zJcb`T0#Y? z1O@tQ7nOUDmxSeiUpUz{C-z?SUQiMtVfN0(@)yrn=h2WWc8d-Ydf|X-XqREUdjd;H z?}HK8HsHlB)kv2MA#=s{MT2e9wyK4vG`rwz1LXH?Y#WPFFkSvfqUs-CoPOym7t60K z#JKmd7%br~W}Jr|lyYjuM-8(09xf8oxt{5d*$=}%*}26CN}r&@RpWc@^&qM3# zJ`A$dh!q`h#ZgOeCXbae z>g;iEf5=Ksl<>8ZtX%&WV!eadU4Cpio}h#jLGa8DCcJ1{E1H0!)LgPBHfxRft*+LA zvh{`SUqVo`hkk00wICheHRjt+20nb?)jQ~Grz?oGSvyJ>!XsG^QzYJVRF32q*bW;l zUec$&eE;ML9?a3?Voe+#k=vY?VJz#Pb{HyG>Tk;RETKjevfs^3Su%cu%oFvEZiNyX zu(%meuPc%oc&{OmjH2DkFtvU((`dKxqsr)nNH@5SW?widHusg&NOl72dWHm*gOpq+ zKwURfi`-X&oxSce*UqX8MW;n=h`xMn(wCy2*yup7&dO@2tJsC0(2L271icDr9%g$@ zMqCGVZm{BKrC~<8fW@HimV4T{`9j(_8XSj3c;S&B^bJYlB?0ohnoVly>}-jp7O$CT zGeZom-ff@Szj?0zOmXncx{^~_!fV&I@X9URij*q-gzRApT@MK4}t zo*+YmRqgYN>L0UFuc6#OvB)-V0fE>0&|edV3Lb-cJTD9z@gujiOI`~F9U^JeBDt%( zx*k_8v=SP5pZp?KTpFpdH5I+geYV59A@s_;lh0f^=Gkd}FcIgpr+I4A_jf?|9F+~c zT`T7F>N3D=e|@!ctZY&+AZh5y989qMfQ&;1#<^(~o>&rzJ?2_EXEVup8nm+G19gj2 zzfRi-&FkzUwy89#N{fCKnEKdZByaDli!pANr7^{9*2rIR9(6IUv5SkiaZW*-DSoZx z+^Rk>m8)Ft?lsLNI?7A7LN)wR?IXtGIxj4Z%#tRB2x5t5XR|_Hi6lIcIseg~)7O|x zL4H{Oscce5kXNkn@AK#Qa=Kq?UC#o-vFDph!MYyOE`I*7<&~6#C zBdFz%P$(UIO~Q9y58>A=v2G$fKRh$qArXB2Db;W@#GcnodNd}t{xU4#f}<{+Poa+}X zBxCA(oVaC1L2-(@p7km8)k{m#c=({oOn3ywscBjApp1~DN1i87UBTL96D47=Va;dy!QoiV+1zNX9;?*ou%iV*XY0?tRpBhVEOivX5?2^9LYJH*GJ()>vgoEO3_q8B*om2*~M6TjAV1>b`w)S zUuk|>U~tX%Nbt&%>jdtDq&kOjCax5}B0h7@`Yf2+>QZ-JPq|J(RCio_8(?o>cQI;X zvDpi5Cfrs2(ti0QWzE;UZNbVVIm_J`^ND?GVa;2Frs-7KJ9HV?Q`U{ecw(}9{H$e* zUU+J3mq@Vkz0%ngI$O4^$=)eaek_@6UWrU9CR}hHI&Y_2X0ij2NG7@Li-ZGi{W0h| z2VKUoGlP23Za>k^G+txjAC-0QhYWvC?9I=gCqb7~RF5*f;B%rU<}7mz^vU`K*I(xV z1*Lnc6ABg0J>*H;%&R9|b|-V;mP6j_2Fl!7ObxYWo|dZ;ww>%wH$-F28THQqWKS6$ zsR&=>cX&_|ZC-%db3w!N-89%LEOB{n*{_)H&d3I${4g)9i20)ai3j+RHVyXw?2PSU^QEnj=mVuoiGN=eZ;N zssFpZ$j@? zE87&e&^HJU4A45_S`wbT95ug<+$i~s$uN5P7RQR_B)8q%Wr+Iobs&G>Gz*DjS5+h}o<2Yb+4p_RJ3rird$^=W zoB>)Boyni$VP?!bJb|nqN!mttdEy^=92%IhueP*`DN(%QW=SsR>F_f&d$)<{Ij(Xq zYh<;eK67nbtZJc7qU2IQd+npYUM}w{m5Q*%{}zNCf+Qqffa3_R*q;{ z>jx-Xb<-Z6&gr@;o4|NW%cZ*eyK;e*7t6G`yd2IIQaBui1n<@vD)SjwU z)F-i5is2ifbCTt8G4C<#R>{QrHSw=G;QUmbDk z7kC;xIHA#(T)=H+dUWk2+TNmLSo1!^Yy9V@H3F7*0Tu(?)F7DN5&3uDCK_Sz*h>^= zZ39Ti{4FUyU;6vclFd|)8oZ>^%e_6flBrvcbE6{k%nrXgzB3AcAqD$m{dVOgRZHPR zjbqJ)r+&!1ZE`&g{BCERU!^5Z%@enIy!mCwHWk-IA2%HiFvlOYbg|jj|LOQK zGQSuxCpEK*97&`}P%9TxZ=dgX>kyKhj@UfjdKsBQc)&Te(?r)k062_vEW2lT*=S)L zhtTfqE)99}xTr4XGDU#TtVKl0w>j+c1t~YG<>lRes=p4DBS zsbXH?H_5GgB+Q$}?@^!`sIrFcr7$}=>ZV+hRd7-?`4}_NKEHW?+oERZyYQW9n18&x z_B{7BE3AlVxocs1DXWH-pfF1$rF&~^nQwr=i*Tb-YH>38-8cWmAq`~{8RKL=ijr#u z&$MP%t;O1{U+tNSI5ecuX3N1UUN;G zZ9=0FEM+yEtZoi~0In*QQd*LM?{<${MY2B?&uR{;nOf9?(wKjL^9V02{zNTo_IeoF zbbYZml2Th(tUB^a*vSS!Kdf&xsY*<)Pu_$Xa8jS>Rx}qX_Bn4=(pPcnip0j3f&ZGR zNLjTxa(bGX!sAi@L?wfyGl+W1Qqv^u@*B9_Yx1BzD5p|3zE@i$e8W4q^mBmHfKO== z&7B7AJh=GrkHp5ui&xd9Q;zt%kQ z3g~2`p{;mbePNxybM8@Jy!U%4l|#$K&wGerN1BT#AB&y&R|`S#k-_7tDbiQ^YFyMH zub9F05hF2!tBsgh=wxq1^!OU8u|jvLEmciF-{wbfFHSfphnYY;P^$hWg=^B{ui9!3 zIG{)X(Jug;GRgq(J>5&3%&W#|=yu;Vch%ttfRH3^-oe0-w&P%F6TP0OZrw^ z8bQb96Sw6Ox@Lz$axKow-BRaH$(;}NepeO(qM5jff{yElbDaLPeU8DOducjbp4l7` zlh#uG>RjE?ck_$tI0+G7ekYVC*i43J_kf!s3jwv$_h#vKoqS`chbpOBO)UYK*0sND z`4i~v?tEbkAl>v36DKtW8ve2Ep|oDNq3~js3J>c29Rff{6uk=x2#>39)D2eGZO%Ls zy=Te1@wwMBL5G?EfA&-7>3HHyJc?`rfXbatc6 zF7c03-`c+DV&BXnqTZd=cy?{qH+%JYXW|C_-NbhNU?yGb5094~;JdP_@(^dCERmYX zvebTkvh>C&zW;32q$_;ib^JZzr8x9I}KC|P_7Jv9@C`S@(nU7Y#?TdBxsSwlg(U;Gcpr*wa|%2tVJ zynVdC5Z47+D`{V-`tD6OGcs>L1C{`sSfsYeCi$O?hf_8g+XmtvSaWbBysk<7s3SEP0)lLiLl73^?+YB~U6RhCNxP zYROj_UR&$|x(Ci1ygz9NhT3uKvJn|?4mF`r&mcdoW#cw$ zR+~*c6%&G}HdI|@<{NC3`5IuGLS`<@KWfOFXb~~-HFV633$V`*J>(8-r|?e8l27g$ zX0hN`lSEV zdZ#}OOZe>K;Q!mFQlDOX!oRcEbn=8t@Vgf0N~a#etvYrcY_yb&Y%^1P=E{il*-rLt!iuK8CuvMz$>@<-`n3?~Olcg10E2i+buG_Fzl4qGv_Grir#^hC3>7X-n5kNe zDFw#oa8sHvo%|EjL47x))*{S0=7YZT+8kqkrE3?FK-rUe{(i4ZuwO-G@x~Xvli`B2 z(1nS)J{qo-r4pt}o&hGB$KLjUmUK7f`|& zmM1|-O^Ek6Q9k=R3lJ`MOd%Y2EE`HzmA=*eDk7b+z3_7 zx(gn8(`(LZZRk!Itx_3jJ{Y=l#0wF|ddB_`d`fl&PCbVd(h|KomH0X|63T<=uv^eL zGE1?c@M@L5L9-2$5~l_@rKX!G3eRpg8TM`b(3K`jd<_A6u3A@&-*VTJ&on{fn^ zqPe%Po(ST7d87(MkCvUK#Dm|Kws1KYL7w`d@AFD_O$j$c-c`5sftqe3Y0cnZM*_7M z@_@i|g&e~JN?5Bz7|eT1D#~$TYZ&)sdYR2s+os$S`tYWM_b-jRBT0HKcCZBdcRlj^kmcA-(CT{?5=pW9Y8z(N^jR_L#t zIdwUBhz-j-bs#N!myStVbax1}=!<%1s^C#TSxUKz%e}SuCaT`8w@wQk1>!vRE-(0F0ifULT74c(q?jI>CF!o`C3pNP$ z!uAB7ch4=gkU}Zcmn~$qHRNR)?8X!vGrze>x7?T&3Glbt8Ww+4%e4A=b(%dBhb~p!w~Tj7usCrJfl%@a6Z7dbmZTs(0)C_w|biisT{#r zL3?~2P+%rdv7%*mItj^v;oPj2%$R-hS`R4~zM-nC13C8f5 z^Jo|)V>2qXP`Be z#JVVj?e2-~1q;d?W1ukscz9L9w6yP`Oj%6Hux9+!KQ9&t9jycB4=|xKpJE@tvG}=| z%x$d=Qv`Tq>-#4`S6<%skMwy}?X{`eVw(2TKVimYXqt3Sc75DRABJPkwCPdZ70Z>{ zZjIig|G{7?X|87IlgY7!SZ-uEeHwM%oWGmE9912hAVpdPw+gJtRrF*5xfKf6fhM$3lpv-FMaxdQeyU44C&Qr%3 z8A+Qg;JASeH`SHkRxQO+$G7S(q;+ zu$MvKMeUHJir+qdFkHOUz+WT4-=MnN!WM*WP$>G(6|YteTahtd;rsqaD$5ir<3*+9 zW&D4LwubRT3*q71bmag1(#W4QrZ{d{7siC-SHCRv%H#jl-TEd3mEQR~p5FWi0skKd z2){i4{{RsCG^3C30W$YMYo-s^JCOZVhTG$E1(MsC|EXVaX;=gyKO+Z)edtrR%pzi5lZM{w3 z(rv2Mp_(V3ndQ%Lc)wjaanE+nJopED6$T0o3{4tMK0Y5}Z zBW5K?3(OPB{(*`Sj)q+3xfA3+3_=R22bKQ3K}JmGQZpvyZ2q=c^Cw*YfUWy}X#QK- zz67pD4Yj39W6F|$L$Uxs5V*hO)@}=h5ocB+21vJV_L1hQ3jJ2XfAQO`rE;t4AkqA@ zF-JaaufF=_z*KRLel7+rdczq4`?HVytk4}#_(;lHY_pA5n)7HBL}h<7UM1GWt5*m_ z##2>WJJx&^=cwZ%meXaTvp)UCf94ZDp>j-_YW_p+RR46$i`aM6a~98&%V>Km1XiyL zZi*=esgmk#COJ~l=AhX9)9vqDJ&tPY-m@|(U+{Ao<#BS6?WET`8<)BLNU8G0W!L^M z)J7ZQ%Ka4zS*#v{A`47;KD9cOyN3);zAYq7SL4?kb2MSCApTNZh6Wk6dbdJ8lAL1N zxLWq*$-oAioY?af5W9J_7b6GbetQ#@{HS#=Np2l(;BYdcG>zqDT8_(KllsMnz{CD3 z4JOzLFDIj*Q9cnP^(lVE(SEd5TclGk4IMU@LV|nc3OSiOE>V5;D~*(N3Gyej^B|^7 zA&l6KoiLnf5Wn|gPm*j;HhLp%(L$nTCu^nTShYKmkQ;Ib*(V$Fh zCIzB%och30pctYLg%RJevOS9zyEFmUgqI|`gNTog4|!k^=*}A}{tEx9Pf^sevVw88 zBnoCn0ba#lQ0SdVd$}!z{J>Y&h(FbG`D$dLJYs?j;|uc@%x8K*8%;YL!BiApbQJb> zTYn-u(Z@DWw@Ab*@-hzc?lMIbd{k!bw#j&og$NAEYm5B&m)`Am{yiH`i=b4dUx;~M zqm_{bH`EP*CNTmw&`z|2tC2EV32^{mM|($aoe4hp#DCzO73Z0_kC=M88&-pdzVV|C z2tFG@3lp8}a@yPpPl+p4cW?s-O&s`$ARWJdL-9{7_J@+XoP0*Kq2FNwmV8UIlK8uH zy$|hrjPZ#Q1B!eFc~tp%boD^J>ktS9R#u(B9J2M-`Nax>jkAJKFEtgJoP9!~{y^0H zKYe@V1s>7Vc+BB0KiuR5dA{Zy{iD9=#QNeFz)Fi@Xc&y|Qdr$&ph_PGTNN&I-;=t> z{E|fSy(aR#oX?i$ zfYx&v#PUt`_rD0G(@+wLxFN12kJU#3OZzH!z-)=@RRU7;LOlrYK|a4V$QQ8KTyEuL z9xrklS!<+xXmCPR?!Go}4P$BY&iIQ_Q$>4oA`6#)<=ra(zFU${@Yn8EvD@)pAf@y6 z`##D&pbDMEg4<o}4J|HG`sn76$F~wJ4QSr@0vqYHJs#$mbsl+-`3K1YOdL_W^D6l5GJ*0| zKwLX2*%qA1enMs{{^u>q6z&mI*8%lV6}0{Er4UjI*+nthufu_1a6Gm=#foz-Jb&M< zHP!C~^>vyOoIG(uqn6NP=dt+#`&Q;}FU{S}_PX4ghlKu7v^Dt5Xd`7-g5?xek<0s! zGs{zR%p_CG2`TM=^o-aHkFB>O;-v>NKaPwqElJNVg-1_XCHHwcZll|9KWwgjo6=Hz zPnSBo5}EHN6ehdIk+h7ogr?H|&Gw3rOSqRzY8{)sd>!hK7aR!;&Xc`MI+E*Yh)sGJ zzR@&^4ykCu@z@y8zZO9Ph^GE#1tnzFtvQp|4$+!%YY&|TCTO)Tt_70FCB^FGoMf!? zv9^K=7)pHqbr=9qS#q-(wzOBLaL~wNlU~d{X|~{3w!*ixf8<~1KMMXEQoZ`GTrFrw z#Cb^1`ELx8)-me!e?u?!{~FWl@6!L*H~w!0aaT*foQ%VTHS;zpJ$L&U47?B-UcGu~ zdSOzTZSE1-_M8k&U!wcX2(IpaxxBo-x&l@hpcw}-JNGR1_1H|clr3(9=9z|-C7WW% zkMQ`oh;=Ta@PY`YYgngiEVVP=-`H+e;_ysux^WD0IWhMl0$wOiubvQJ<~${_>eSL< zaZ5piFX@2IrY%;oKKre@QY^j)OYIt)v%Eo-s!WP6^RuP8rqpHxh`Rf}>4slS;B`aM z%XhS{yzt?iKEnx%@+L7@=-VNx&(CB02GX9o&|^&P`|Im#ld3KD{Nr8fhfhwh!a=N06n03i|b9 zvNznx=v3+kXgnU`o*$y^RLC8@yzHr?FLVu`NMo}{8r^l?U*=nx0g@4ehCLhd$)4Ib z?`DY6vI_{+WHR40n(q_P2l7%-eUa_zwA@A4(SEeLqcpk0BK&6#^k3#+K4Xh$fVrLc!9=XDM{n`pAeS27v`cS2-Q%+j+cH?5>a*enKTZMV$` zLe%lDISxJX^yIDsUD4vHo*t|ApSrFm3-YlJ#%GaQ;`?^LCmh$NmtM={$kq_@TRaV9e5*S}QX!X@#&soqS?0X#!*pMU#j|nOM)6g?CL+ufUbV0IA_5lEq{I z^P~K1I@6@uSE{ek@%rG6H>se9pVnesfv%h%G0JO)^c@XThoNxn+nI}8ODGYCs7HzbKX zf>F@!u9iLES?NH>Ml$LY13X|OVfO}pJo4iC>2S-@1)bVzOPnBzg|N>x)!L9;^giltuvy+tivHSDcrlOfqPqTYuefn@cpw~;VR7L> zXp!&-xZ{R%D|D#~P+3?B)OwS)hq4?6vFL1kh;`evvVeEHw^k5qs__PEq41bunS2XM z5K5uL$U%=)g?m5^%Z2{6Y*G`O^2Bb$1EGV%*QGSZ;9%%J*eB#@mxIYe{=LOMTkG*7 z>|wipHWz#^^;9q3w=)#~r>nKlCK8(mC)(Lm!Mo*Y`y(5Z_E>3@J@w4jrZWe;91564r|)SN zn|fJ^U)ytX<6ME6TVt=%&9gkIe(M^h9fVzg2 zI$i$9CBepG(zv-9@#V<_9iarupyv2JbJ~oCl$!Eh2ds7Hrpw?L3 zI#JZotslb&!v;2fA-P_Vrk?JZ>>;KBk9i$cjldAoyM=3{YFa}=^WfEX`h7hG7DNtu6Z2 z=79J~4!G93!r}%&)Zp&p+LfSHo=~Q2rkAe9hsQ;B;J!8%QeIbJqi+=ppy2&>%0;YY z{A9O<=513G#2R%{SK+gA0qUSM!p7?Z|keez4(S($?s5}{fNJ&_9^Mg>L~{e zanxsYRw-ItOSAOypw~U^%gK2#h{W_X(ftNRB4!`WxjddHAI!=T_%5Iu0nD=WM{3#l zUI-73$kIaJre2YXL^gtJvN*+)wxXFWu+`SOvP@)^r7l%ms>&2uN^TM9qcg8Z>`@pl z`yXBclAS@^ovBbNy@gxacnnutz#o^^kcZ!2xuYSX&x89$I~?pkk4fo8pC%RyURdWS zWu6iLsRg`R#dx8#q@W~_=IVA!e(v!;-uM#Nhhur(wpPhpn>t6H42ht%Nl1S3%&b&Qg9Vrewo8pje0NpxKhrAjVP07 zb=L@BCcrYOX6_*9Kt!9?0gq7ZsFqMgH1e}Dv6yV8Mj0&bIbU_*{pjn-!F)+*Qso{y z5m~17Tw&sRFN)Nv10wgJibjjly3-G2k0Uvw|E!qtTEP9Nc&nPYzyO*Y$uV$sGUo-j|QcE9au<7{lRCGi( zREL)|7J*^;gbdOaNnr}j9O(_?ORhB?^6khSS%mDZLQtl!WW_fG+EIb2sxLD#Dh=%q zSjGP8kF;>L8JjJG*3Fr}-N@{S^;2bqOTdMRTtjf7{tGQobgI-~rL^?g)j$54pw=d(EWJ`>GY16dI*(n@ zX>mK5yImY_z!#gKKLS;LJX&E2Ou^!k#XX$oi+TYG0NzMZG2S!GAOw$FPe zdxknyK#FzQke0>1)mswjS>Y*wh#((|^YYZAU&+)AfQvOG}~!I@8CSNz0aG#58ZpF_n{i3GabI9RE%<)KlvSUc0cNrglQV;&FX$|V;1h>ckv>Zs2}!EzygBFKwY(AVnRlQYGmjs_Hn zl|9hQPb>dV_1_wwHvDG%KjmwiEU0 zGLHQEQ6vPPP1l-l!Qq;v>=a@**LxX8+*z=~DByT(vrygNp;`TClhhu2bj!|RRjHER!o-b;Y>-EptaAYKFUyGpsL)W7(~ z{{cEYU;j_-)_PgC|3}s0zs=$QUi<&si&OZ7&%ze?QtS5Jlznml)W?3s>TJ#vrOt5Y zgBZ^qF4IN$V9&V7IAJ0Vu;tRGefh}7u3~hUN7#IgWzVMC!8U#$9fc7bb#r!hZ*$J}po&h`HFt5J!> zy63_pwv;Mhd`_eGuw~}MJ=~o|lj~PfzW0O()Id#c&$>z!=TMxJ-eB(H9MS%7m9}Lz zpE+H@TmwzWyEIfg=aDPVryx% z!6lhFh;~Op=rLU;l=)`?aco=YbQ;W>vm%K5n?oE!$!2g>>$Xhg>cp5DcL7dK*ovRnNx74zm|*8;%Rz61#9Otj^E-3e8QR z23zk@t=*-^-CT-s{bMJ14J$dO`eQVhr71qX(lKmWhf4rk*Pfx-PLZiwy@Kezjf;iY z_%ZSTt*wui_856+MPr5p|EG}PQzOLFqJ+8N6f?n>X?9#?Vt8fu!ONsO4d-4&>OIfB z;NX~#Xb>!IBL3!2F+MdQpTWh93MayHMO_OS9WlAy4BKaaqq%7#64lpiy}94&xZ-*0PEqyyZxWpq&!X+Cgu0h2v5ma zSD{8~DT`PUMOmrbH69z~GNqnXjH7DRT+X^Kz1MZ|gOPzUMl#3COx+(A7*4%)_jnBg zcb`(C56)2I8lJvj+<0=^@N!?RZAj>K9_$~pxdqlLxvv#=p2Z<1OODV*N62*Z;Ca7B zYt%s8jKIvoTLh9XUk(}C`u#|dy943EhCz9D^eW$GKO?#W-a2z7$rUOZ;@_EC6ifww zjP2Xe6UsU{?}BlyrYRFZtugVub%*o>an)!Ws1B>{s}P`~TC!S~oUYB;Qj!g$)k;+} zDT^tTCL@LPH*2U59U4praXthHNJ4@qj|>9|DR||hML_TqCC5*hIhWDi_yK_awrBnxl>D3I2*whq|NqnuC-BXnXCX3JX_+-rEHKo(^7=3fneu99(|b`aFqO#Z6F&w`DB-2;s>8e87!2lhs>+rh+mk|Y+Fyh zlUv@9sPVB~`SsoE20}J)63`yn*|`&~hz!F-4gTAEm?y~%?PO3H?$i{^p4m4yV;fv? z4Tq_(;9+O>^SC}6TMZBmY2t(2XkrRxKv7b(5?&oUdB}OD+n0G2V4~-m- zU5!2VX4<4pXx@yLl&XP5Vpj4fV3Da+)>wZ!rSgYo6UQgJ7EJpXwg>T0sO6ix?kYXy z760CBg)pgIqty)CY)&6Z4wz})|3+V_2c8dJ-43?H`Idu%tgBjbT^$8qjlZM%d-yJ}o483#k5cNG^_ZxvH_@&5fqHhqSzGeS+QV;*ezRBqSSpJ! zB3mx~vXvijGZn=ji@7{hu*%87W}2BeE1f|2Et7t#j^W}%a+&EMs8&h|f&N9mxae zDsFcrYvV>f#P2YY8E<~F!i_|!<=XVEQ=5rFJFpzl$y1Z1Gg}R2d zzwvg0`dVvbe-jItSwzWXhRuQ(UnQ+U4805JCs->g9_+nrYlMiqWBxT1Zl#2m|6RuF z62OB7fbOs?#biF>z1_U-yvH3eh8t9;u;ncVeecYPKZq1arw%?Bp^ z9yO-vJ>s+RcJJBnr?G$y@WFmy16F7$dw6ti16IzDD`b14i8J3joqUoIUM!uhO*ZrX zg;HEeOG0?wDppdTS=ZtCQzLrfdQ=-uO|7!&l3IwZBdJ!p`dAEQ0EY`_(H>rMH%}Aa zo$=-uY8X8TB%0%OAqCjZs7C$w(AVA#vpCu14X0bAB<5c_DL9yJidno#=dLZ5D+Ivo z@B<#*P0`LAN zYDJ-^8&FYJaO#dz(XshY9!zw%H{Md5YEj8DA<~Z??ZvqcN14&@Dw+4W#3!bS>GAzM zvR0o^C=XYX`9VNe5oN{BK$v~WlA)KKb5(tTe2(E5Ik8Wjt|@oSM)aRrKxE=q20MbE z9TpBpCaxi7e8>eE4kyjwgH^b)rFu#csI~5nPMWWw5#g_$w=Xa=ZEbRC1LW=oO z9ZM)Ec(u}*B@qa#Rt=c^I1#Ncg#;tlA8-zIn~b>+Zsu3mcD2q|>{2k+$9CKODJAvr zs?af{qGM!9S=G5Dg=^IJ*p$fbq~ziD^s3O&o1f<(ED0jQxq0a$55^`$$ZdI_+kDQ0 z88>vuu#p*XQn1fI3o82XS*zE{_6c|2(P*RjH}n^3#|M6mWrITmSopv19J3B1DhA16 zpvzGhKXvNz?7b~`7|t#;BLl%osq!jaVN`*G&`w4JPc~!%@OHq3Bvec%2@^X7oLzPB z(URBM70Es3@%sWdLdbCFNgb$r4XAb|RVuNqW4QoLV?CGV+Bk$L$RAE6#rCT+T9)A(kERN2nj1$gS2lBjAFRUfy;-(6lh0vu+5|W?o z9*}TLPsu(`;LR}n#^wCzVy}QPo1l|?clB=UQO}A$F0dg;_fAu(1sADDTO{2~e;pNe z{x&Z+<(qwcxm{7gbC4wcwhDDdf%%(UdS#GtSV}O)f~Ry7Nz9Ewl|z#~$DQ(~&C??SnFrFtjz=hHXi;j1V_++>L+RxRN=3(`6Mt7MweF6l&)6Qb&xdM4tV1G)bb3q$df1YN@A|KarR z)PjUEtQrvRL-aq_;R^B?BrGw<34AfHLD&Y$v6&&aQHM*E$YsL%T?#B zL581+yUZ$e)#k$dY2q8Y49K(b36MFykUQ)hWRsHY0`F5%?Y=b7n=z6P5`HYl{Yb;b zB!8d`z_AfO3tQ2dmkx8z*U43g`9o*0)b&G0Oc37nH5(((nMX{6$q;k(pI z#!Y!cXy1KF8r6}9o9|$6TXAXH6Uo~Z%kWVeUS2Ngb&HNlo6q5=)IDr5bwBoe!9h!4 zedd%$NKoaP8$*4Qiw(MpB>>}+EPuVno2@`M50Rnju#Y9sbZ#t2cTLaGftJMS255x@ z>j)49IMOFIkXRhhFgGl#zTrweX3#yG3*)(sg%fu(1p;=~n({icvVc=i*G}C9sKOWX zv}!wG1zGBFSXZ?#)t8RS?2bCx$^H$D{;Fe0W{Qghz)u-7XqMkW^1lY$3%%ZBcNSLi z`Gb{YGv5q`i#j3QOnJDgsp}Lu1AEUR0+0LLY5c(g?y}2TlvDDkh?8U1CvcD^XBXl>44LEgRUua3SqzXk;By*(ywh zE}!gbeo|GYj5OmYq=pi>b%Gn>l&a_JX6TQd`6L{~;!Mr#DU!!t55 zH5RkMy_Z+4wvpLmzyZ_eGJsv2KBWlt0NycB&{6PG8eDCl-9OuBoZ-9&Q5Vd!d@GPK zn@LLM-g;H8OkKu*qGwp5iz!{ zn?xt_cLILHZ=xg(9dvsXqR0d+#cgap&TNR+$mf>qGixFh<9*PzKWQ-sDLvH3pT-ZI z$;AcaZ>2GWY^%N;)c^!27HAh-ZZb0r@~;yrc%n+0Yje#ii~mF()l0oF5e%?%C_9jH z-%E_riV$>>E?dXJhVxlGO;u1}!oCywR&syQ%ut|66RG%ZawUpdO$tVyiq>iol>WyQ z2CW3eUg#6Kobspzg#|XO)#xA*Yrq=ph_}ujHhU4*RD0IJ@43ezj;B(-0F(GnvH8Cs zR}9YNSc(>C1@)?Py9_=Bl#)lgBa4{bgWU@WQC}q_HkAx1-)3sd!jM7c}hsT-9k~W z`j(?RNR_&>?GaF*z4~A>i()Hs>-C68uKfHf1xTMHsUEEvHoUeYBehJU6Hkn)^QhoD z_Gh|b5OqaIsR8v{#HJJ%f^dg?)E-Svr{d1uHEE=R^!Clm{XR0EITiV!gA^6?Adg`> zqDAec`ffYX%l)Fx!v_ef4siV}-`3I3U~&kjwaNycyvo(F9T_RJv8;pPk{z~y;O%=j zasGEB-E&Ay2=y+UhxV{T<_0NO+$Qx0qS8XrLZ+QaY7nwJ} zH+(ygHC&HUNN~(m75tK&sO)gG7A*?r(vFhucaz1hEQ0Y)En5kn7v2q*(6s{`00bx$ z(ky~#)jN5lic5jn*D!K{`k|#u?&699sXvm~AfXqIM{VJOC*oY=aj?*2mGjl#kQ;7q zY0$jH1u=AT5}pD3E(g)}ecm?Xp^W>kY!mRo$@;fhX+KzHL!pvd9Czg{(;dN6iOMzE z$pR2klIkVAc0{P5HXycYIZ}UXo35r~WuM%JI_rFz5w@hl>8t@{DeCyfxbb5su=5rj z7trkErPP!72hK!UhE*klCU!COnPbaWsJqHW123!DIZLI1WSEv1Xb@qnm2e@ zrR*=yFuP$X@E3uKhdWg0Sf6vrwZv!~;1U@pvhTPm_dQbe(jmi%_-*!QpOB4C?(c5r z1D`sUSLH&+EBRKGW?kMpjYd&M^0n3F7S^sp%J1Ko=pRnrL|EAC$U=4dIvqcq%4)k3 zTW(lVDvgMc)p`a?HJe>RK6!FAU6I04Su@-}d(x&1!AqY;-k&ZzRMO+ri6psCVJ z5nFcr#W2`Z$W6BQC+}DD4Yc*MKNzFPGIWDGl2uqs8&{KYxv6kn=G^BN9QLt1E!Dv8 z^Zb>6Fc{e;@sr&yO4TE zM7+BWOf|6__j}3oJzZAEHzw<_0)BVBdi`k1vX#J4&=t@Zpy)KY)GgxP?2$99@~nHz zQzs$*5OZK6k}|M;U2ErL8*c$A7u%;iadbrm>W#-t3hZZ?$)R@887Zkn#33e9`pwyj zWs`0%9>FmI04YQRMVWx#{fCEjY>}1Nu}t1L+s*lW#W>mXen;evbyHMclyCV0USf4$}wZ+=v9=29i&m;Fc~qqk!rQZrVO62Y=vMsmAaV6*iZ!({3Cuz}%aS z(B?)~W(!Zz-M+kTrPPPaGrLs|IVOYc)JsWrI`rul^GHP+OO}7@=QP1nGf>8mw7{r>7rMp?MQJ1>j1)9s4Z-vU=c#Zqlx+g$4rZ$kgTW!sQ% z(#|r=nMT3sRvo&BJf`LA@~Y8anLEm0r+QOQKo~Z}BJw|q%Eowc-}E@^t(q=FON(rX zIm%HoT1`E-pGCX#M3Jy>UZaIWQD@{=;zIn2mnnRH-X5MC?PKO8F`%B!??Igt_s5$& zC0|&LF1yOQXsB+b#u=uh2t|}j6t)r1vaCRYoN3hu#gFVVUffy=^gVby5xd+rlCrvH z7_*j|enf?F_6S_4Xtu=b#0=jmE0QXVZ@x>3xcpYWESzfNYa~2^*c;rLaj8Z&B0g9AVhH%2*N-C%yerfgm z#6$Ml4kPGlXCeP|zp$Uv!`On@ad^Bnx6yX!;>Z84M%rqfJ~BaXdDRH_!o*yiQnq;( zl`HqTM_wz8u2h~?|;_CX|#qW zP`=&T#@Yn9G|cZgILtw4Cpw>iUQBh3&q-6PCV00YBWR%K@>&hZ+A^kpH%53n>R0r% z!)nkiO7zjWK#*2?o}+W)kyc#(e5Wr^Pf+<*feWX?U?8!cSD#H3v&z%Zd3f&~fuOSH zVJlVXpNw6W6Ql(ESZxt)_9HMIS}`uy?DGKgQcHYlBKOW>Akh=`aNyQv48_0)+?|W% zz*}VhIqv4I|^x1jzzT%APdR3G_4!9{hY@G`^eKgHsBE6$R&9?jNnR?{K+ z2RS7HgZI?#^TU{0QdGp_-o0j#IeuLg*yVOBD&XrQwd&R+TicUJlO(-rzmKwLY@1rk z^?IH)N3+@YH6u7IttGNn6!5Hf2PX4@`e%nnc!$MzXHdSIOXg=lc41v*3gJXbwfO##Wt`SL)&;^+LH|LlWD^QKzF_DVlpApS`$Y3h={&Rad86PxosM}x~r2Ob@+?==*5 z3FB_>if*(q$~)q+x5N&p>F$H(n3{*PJm8WZWa2xbwNeugL7wxW{gI7g?Sc787j6%? zwHXIg4rA@_cnbo_#xHGMXHG(z)x?~x1#T>b8QV?Nk||=k8BaEtEQcF`+IEKh7wfVX zbFNf$m0~g~Mx(ie5RSw=UmTNV(B`3^?F|Z_j&ggK*_;o}f#aX;;>5|)V{TJk`t#&M zB8}!?sYVSUC|!Z%4KLz3)e@indAa6(eQ=nFwM5vLjW)j12i+Fy$h|Y6xIWG<(JmnU zOs5^im(0>Ol)O|@Si2W6p^XdnkE2Hs9+&+H3I3p-&+CW)ZcdJ+-?@#%W`wmUw4LzH!l3Z0YtSJw20_inYwS>U?$Nl4*QepVqLbfR}SZb(B(5e+I zw5{ShwVH>e40cbu_RslSx#o%8G@!kOeLeScqS*H5vh$1VsG}g6!$nsH9hsZ^S@6&K z;kRlhX;-QApab%-h5DcS+H#cD{J_n~G<(s`KXO5_mRg$tN?zediLkr4Enm+XJ)P#O zOT)q%k6pt^XVb2nU2c~Wn7Z28p6DUOyGRn=n^ZH2_d&2y}M+&k(en$ze0#M>jwc-r5U<_n4k zy5|BrVrlqdv_;@bED;}!pQX`C-xaD94`wI<<~lAIo^3;q zT#j1Q#PcJP%h^K;n10zBw;qtYf*6J5evjFQu{e{Opyqm@T`Y{~H`5WM+F{yDMib3R zWmEBs5?so_nvs(jsv8(evDaOq@Y6c6Hy_m-t}fI(8mqK|pcaU) zVpWMYqi%t&9W=cAx$I;z!9PU1f{@iSjeuMk+6z!_I#U^2qQg4Q`aDTNcr0tqp4&rw zj{k<026snHNHKyKiePlCfHXHm=}sOt2i~riU+&9-yKjEZNquYvZmjk+;p)t)>$F$3 zA42thI77AS?5}9(oiC@QBlZ|wh7;|BZYVC?ROE9#%Iuf-KnEjRH8!lA>U|Z#3KxKr z5GL%}`^f}_!pGTK)bp+L>r@5#=@J~{Y{iftDn?n5eoe;N2czA{2*Q*|g!t;U3m*^i zk6>2c{C%B!*R*Mvi0)%mMnI`Q&(CSd)P?VPg%@Tqd-T{P7ME%t^q}w*+=VI|srPLP zXWNX=7a`Nc4#j8V@}kRs^e^?g6!|fWP;SReebl+7xx9+-ytFIqdB>5JTI}{BHprI4 zuBI6x7QH|_+swZt**??dHa{62rDE$B`nBPIvG=hs+}$0T#u^&#A@BFynY-rxyEE&XS?ku1X3^_(ojRv# z*WR`Fex9Agx{Y}PBRlxqcX3X-BKd?7KHa2Ag}137TVH`7Y;DO9P$X{TVP{(g7k0rhC@cp=IbVa3PofB2fX0T-i29OQ5!K`A<Z&YMR8SwXgGx#=f#kBX$Ei z$f??w+Ww>o^Rp_Z;IB`A3^0#$KFIp)RxD#Si)yV!wjzZ;C-xn${Vlh&%3f#Rw7Wr< zYc&OKzi0T3=enT!6Hh+eT^0wN$psU)#spp+SDU-HU`8ncud?4gzLU-r0(fA7deZtr>Ed15@nku#JZdpw<2l5XsFrUT1Mw6Ozw8s4qnLZmX=Mp((R z5iI)S_!8_nRNbX+2{toZiZ-FoT{sf$LgV74onq!%JOxxpSWp-Vulb70VT!#pasq^D zT03CaYlJw>K+R}*!IL!fcKj7v#SGOj9NGKkkLSd3`0`pcF3^ZrY8M02j|y$XRc~V% zJVaD&>QrBk!EgyK^1_Ud8muRQog)xVnZ47Bwi~$4gkE#@nY0(BtxfDeF4(;Zdzj@N zo86|$@h575zH*6tyn-hfy&lR@^WnNpG(5=80ALY!08vd$3;OuXS>uVO!e;hGskKSK zjX44C4bkaYe9P?Vq2rmgpieV~ATK-=MHgRXYihwEaV=3yiXuyD4d~bH6?m3T`sqLR z@@Eg`PPdtZT!4K;VB#m=#N5S-MCFH7T}eYGDTO5 zL`AnPI`GCpe?8$$0qK@(UC-BU+apep(yg-1C9gC8c{Y0btzeV~ma~8A z`n%kWZtSYnhOc@;6YIhoJZ^2vZsv>CG`1+Z+sfA%^wc&nTVMed&D}c#Ls*Hhl$C=f#GJ-35@XgOR?(7;+s~%?1nwBr%h) zE(>dHv0K(^3y|IMJMk>zWfYJUzSmxyVMG0rm$^^V(@$4tuIM$IxvtXX zF3XgpEuyGOtcO)k-Qgx&svmabwo%}@JgGL7`0UtJ)Vgfi@H-xCE^f>2w!;iheaSif zMXYxJ6SXV`M;Ni;q;;g7zGByP;BYs1uiYh}TS z^P>Z9XZlSRra4I%yae14u6hae`<>LZ-=@Dtpaw%{lLWtAy`~GOP1$2Kw1jLu8Zl8M zk26$YJlQF*N~*N}$aFiAVO6n#1klF+`U1Y#UoDo}T$4352TV~R$F*$mb7sp^O6Lo0 zhE!~%6w>px#H5mJ$XUD!8>G+s#B@ z)A#6>{`HBK+}8V}0&NcRp%JagFUT@Z&W)AtwtvkBJ*#Cxs>PQc7TfCBMxYqqSgq_T zwAO#Ms1Pkf?bze6+$GJRO=H&*WO!q#c1TuY3V7JtsUAr4=1$XSp1&hB6vjuI!k&33 z$jwZB4^TObAmdj2^ee&aEti}brF_%~3rAJ`W|HmN z0hpmH>o<(CaW0wNy3S{MAKqiPpL@CbAmb6sQ}I-#808X6r5W_^T?p~ByzH7U@<=cT z>}$#Cukp0D)Y#D3$6*6|8d5gKvmZTs!~A1& z+v-c(++~0TE&Re0A5Z1=I=o0E{)j~(l3SkN!nyRXJS70~B+59r=>K(z zvWn51Rhy7N+QHYu&rM8hFp2~O0>^4 zlWs=zk$CN0r%Q0TS%D$u%|>S$&o_HPpH8e@07I!+I_t|O7URZv(Y47*G_cSWptGb{ zcZ+Uy-4Z?{Hn5GA)GE@XT;gxF$q(D$85S20qvks`l1&IMGTQ_j_9%Y`j=p<4BDRH+ zK4BeY%Z1XA`p?-l(zs(rOnBtM065o&k6W8*8j|b#Xnw&d;CouN?_F}`O!&eEa3T!O zt>aaLjv-zE)myLUa~E2|cYFjoZ2O;hr~d?7i^L9AUWZ*8w8W=LNnnF>1`d!PXGJ6k z-I%u}SnMfAM*1EnTNxWoL=1c{AvlFfq#8981 z`_A0ep= z(M-SFd>&Qhg*T8qX$7vMR7BIRqGH!hB_XM{y<6hM1K=U#VRPpeUb~9mL~q=L?^FuS zSDP^o>j~cTw-(w2t!1-oGgO-6FxdDofG*|w$dFj%c~r@pK$H89o}Zsypu#~wdtX+| zi}`m==cR4F><`5>#BV%l6@rn400z(Za7nR`-uC6Y7{#6OgVkg!+jIpLdw9}Ke5W}3 zJRd`K#glYKECs-R&Q}xQ$$qcQ`p2snk{;tFa=LiYbi?w34Q_jlmm-$j-9-s9!(q$! zeXv%-Zr^+!UYopA60`7-@rhC4rC*Ub^AKW^jJr*({69cV$5zb*^h?9FZmg*FYnlz#>}n5 zafBY}FJgg_3KDwn*ES=G$sW?tA?)CG6#3+F>lBFCVIB|U#imP3)lWAPp8hsE$L&yR z%4~KUNkl;<6EYFfIv16J%T9ZOw4{`1dvDM}U<6XPY;M=#56!5zySP!yTdaLHQ#m-2 zAb%w+8+DX4S-|AkJwY_yCbu4?T1M1i*oK3c|DcsWE|W#6ea znMy@~q`@Zm<~t*3K3>$b99na)#+-D+G7oi$(Z6eQS??X1aU5u=5DG3kLW~eRN80cH z6IRO{mN+;|G=TkVZ@zl}ONjlii?Z>BjcD+8?|$lOXsJ#0Q-5BApQh_GqSmar4xW=Vm}bn_{z~>}BPi2rb%bW%%(u*9dgxSO zYD7Wm-Nb03ynKfthy|ou1jQmzSC=KM2NUDz_r^5YkCD2#sU1YE*1G{)_`j>+Np+t< zKDiL8ZQCK|WRAW*aTfZxQ8Dsc8jmU!1?FpebLZHtswqIJ<+u8~+C8s+5iCa{oraKN zcVG3Lz8drRrpJ;flvIdQ5f$gCrBPH z`(Nx^2yABf`-%==!yz)hkoRvN3 zPcqmOLz_R2$FG3S{LImSKsCsZ1#nl|82Co4^K?v)il;mAnQEfXSw{4eC&`ahs<(!<;M-;pNk zfvRk-tXigAO@lFRa>5sE1qN_ww{<)FyKJwX$_1gEFDnEw!Ae(;p8;Ft{Mntr82fGPi1Q2v2Cu2(lk=iDu+<>sOEj=bTJ$DT?kT7@x6DWh_D3$RyO(hQGce2i z$}Kkykc^#5LOgpVJ30LL>ghpV0N8Q|xuZ)UCLy{@8p*#Bcm%LRTx{P*)>3#reIyE= z5DGmldI|XH_PJOJ3dMD9YR^9ZJBEdfTY)jk2bc=i9(ngeKRpH<9Ctanse<^oWGDbS z^2{w)?60*SukIN11*J#!G3a(k+4tG2=g9uZC~yxjF3@Y=wPPvChtN)0T)&l%KOxU9 z8}JC#@N>Y{LC^I+aRYjuNIyE33cmaRxbl_gN|K&G21LZyOD_M*htXB+zheejDPFqe z<{11L(gBGQDpN8(rjP@MfcX9Uoja7A^x?5U8ACP>7 zyI22Q{k`JfPEKea(hwe+^Z%zBS%16uKP%|;cgX)n)%@C_U*jUqMD7o=#T9_>`LTQ@ zfj9E7kGX%5QK@G(c)&|xX5ehPWecY_f7Uf-+x-Uf%B~@lSVM=63CRc|PuIlEkLdw1 zXaNDQ7kKZC0Cp(TDX!ZsrjshRTE^h6_q~aMW=i^_0R>=|ol);10g>SX=;MAeX0P2v z^^Ro7d24+L_j)E|u5hqC5dH$7R!x#!4Owf>dye7NYh?0t?k%|vj`{~?i2Zp&30{5$ zd6#eME0>eOh}sXvW{j!0oLw~}=ffKD_)d2}lO~$cO$1Qi18IF+i|P(N6-L`JxW_LU z!l6)4cg0h;gO1$xKN$Z{1~`@`!e&=5(yaRL%CFt0>)^c`EbnW!+ka)%XL#QJxp>|i zcubI+|MK#L>d1S~tNVs9GDC#XQ>%m1$?-Cs{iB6Ru2ISZA=}8m&(`{Y>ue!@`2@g< z3DFrpLk16>Hkgy^6cPPkAAL!m7(tI%X=QyX?XCf_h*-JAL(-PC>gaz z7J~+R*-Z7j__JPd6_xLf_HN?Y9cFqfD@I?}FenQu3I(2P{s$RbPh*oidR)Fy(CZ3Br?T3qJbM}@%^-7j zBtvSW7vzg0nCiKs>|I^h;dpzi+zI9Q_Wj2FY_~D)YlD8_=h+8}H6TMCN$l}VAzfCU z+5RO#K8@xx0Q^yUnLC?BBb9;&~7+iw6<}15T6l_>!=AL}${%4ofU$ zKIBvK>EMrDII4`X6u@8;-;dVY5w2{YBkQmLA>vUG%J>4#&SlDu z8Byf>@%dioXN`O2hm+ zSLhnV{e*`kDiroZFYHK=Dj#Kh;=A4dDng!G)TYUe%04$R6Ki(3J{)UAgsdN zpA#h#L9Ba+!zS3Dr(bS-DK`uFe9YHRc{?#W-ffC7wmZJ&h|i+!ApA%_RBA2QB4iW( zss~tO3Z?w^G{&lN0L^-uKCNY}Ptt5e%1*M|Mn{LQVWw}*W$H2Ir=)0lr(lk#E^8ff zd7xU|k!{COP;R9MThm4Pa6VDd#qjX0+2*$AQw1hIh_Lky`Q*W6=XO*T2lrU5JWz?0 z{6P_~*eNQ~#Nq*L4NL^Ff{HP{-Cu|GfZgpx&G+SBMNQn|CxZUp5Yzv^sro;dsx5Dy zpfTS1cwV0G3b~paYu9YQB_xc<%s_u8n`pTxTEu%XPqv@`v}OA}^Q>EC6p;4O7CuZ5 zWD}fBQ;(pf>`!T)Z|58>KfBMQ&N%q?4PUme=IsbytKU-eNNCuT4G+53x@AN4JH>JW zF0bO1J^smz`pfpl$#Vag#W|5kgS%E2>5+N>VeI_;L6HL_64@pcg%D`U3rICvKlU5ANyOuDH^f?<>6uEV_nnp+?-6x!|v#0Gs2Y=D( z0d^_3M*BIArrlzr=X${dpVH2>zXXyC&9K>6Q$-Tb31FPre_)(p6>HnE7Ca}Kn6nGO zJ5Q>8M~^VO!HcY}#mgFX<{cZdyVR7WZPY%K=k+F8-H{-<6Np;UnXUU~!N%_Z44b)9 z{+~#4s)oRWWV4YsumdUq1!|MhH^AWW9|n&Gi+N)wg|<6t*P*p6?A#G;&n-PR>>}G; zHJUVWukGXiXyG~{!)O)@3*p?~*r$4HJ$oM27mC|C^(2xkhrIHTZ3BtzDxN={;j@pb ziLFhzNT(YeqWHw~3Vxww{{cTb&P=@g2eK^+wY5BD#Oup|BK0)0UOQr@b@UX6@oP^b zrnW;>rj(G&w~^!-ciibB&?31S9~xeSg=k;h8sc zAq9JmqA<|~-AFU^KF9A;aBmsAmw9fP35B&4zbVqQ6Rs@3{hsv?99hq%tqkwER1ah3 zi_S{k`#=+71G8-bYPK#wFK?;?T;PJLRKmPz_NTIYL*6HitmEnRPFaH2vXc-biM)0^ z1rkMn>zAtHHuq9#3lk5&ss3yAw^5gm2oG<$g&X34DTx4B0e@o93`E?#7x$5JIyrTz z+%dg@O%(mN8fcro{R?Z6vxKjm{Ul)^k*zr(ZI35jr3d)aF8>z1QQaf*2` zLZJTIEFZpqxNg08yTAvaXhyr^-WXCiO`gGSuXddIj4)5m4|*6{@wv?}?o!~W`T&m& z15?~WON*OM*6q#(NHP||ycBV@LB-elY`f1EqvGiKZC2sY<7z=37H5eSfAs=x1Wdgb z;tCX8WGlvAW{M2a)A^BP?-)y$V?EvWnsz)$ej(!4bg!rbD*y6x*FgqNf;V#V1OK0B zX_j*R$_+;`^0%xljQmZmwn6UuN7#Yhh)z#|P)yKCVrRqUUT4@KYusB}X&IqG`J&%f z3(z94$$qdHZj)LJ4j#7%wHs2ib79KPol&MxKM4%g9q<4L8cq`aHD$}S82)(bV`BGc|#(3S-=xyu1xGH7WBfbzG zBCki*GGzECvb`KouumT1&#cJ@Uv}1*_s$a23Zm-hbytM7q@oz5L&LrPq&rYMdL*e$ zx^HVGSLzsY9`7x=I75H!a+vK-7YuhvkS_?0418UhUc#rethW8ozNE&a9OvEydHQ0n zx$%cJ-)bZFkvYAhKyAp~#DF8(6+a9%DJ#-NrhkPM^*i>WLL`kDtVf=3E)Yv_w8S=0 zlO+&R``c9X=Ty$J1i3!fY@mWL`Z|?~dXe0Fl^GWP#dnvwNO`?m>{Ey3Lvj;&n~kmA zZ~6Ytxq*w`iPj>oh;UjU0c1X@ZYG_oJ6dm#VN2)mZA*n^>5@qCLK+I9b<+V@ zhX-JFLyRZ+#2)N;h;kp=EwCxEB%UqY5_q?{%xeiS)BAHep8i;pKf+i)8(!NfATg&h z=Zi3GWqbpZ>q^&7hj*z-h#X>uh|vmzuIB%4i9ZBsg=6kSEsq5z(h+q1)vs3e6_AGM z1mw%*v&WxdP||?zVhmoHb)Fl}*3Ykf285E{9-$&~m3Qj%vTdn-JNcPBEo2DaWD zI{STwPmi@Z$EJr6()SoQev2gLm@Y50_^*bOBqSN&4POJDea+f>$4Yq0m!J-2DeYDs z^_fvocu1VucRU4^%59yvgk#vTX% zWy@<_k>kV)H13;&R;)A6vgNhrDFaEbJvWoE6iiS<2DJDSo9>2Ajn@FmZu{J?k)afr zy>FVA+>6|S8sERQCT2>4DI5G`^MRebfk%Ri==~ePbn$?6+ z0>|f5VMh~;OrEO;Sr>?EU(Kf^6^|NKPXKpeJ+(-Nqd2kCQz2)? zLj|H?1DH%`Yx^r~pN8$3#+^1zUCDiGY;L9tOEyd1`2&y7z1W+-qrbR)@|z9>TX~&h z?=%)wmh$qH{KTE}-FaOhBtlSd9Fw6kN+2a2EJ0j`g?V1}@_4u|n7p^4{Y=jaIWW|H zQJ{|=N%%ve0=j?R*j#WCBLL>#YuTUQT&RjgHodrUZ@zf*WS1nNV(DZcx}_&1sM~QA zh96O%Q-6m`R<|@p9Zpc=4AEYtycu5?j#yUfh4@~-K4QHnA(d^Esqv6`^7F8yoNAI+ z7P;M2+IbQ8tH98(0wcadKx$dGX8U{IJFWtIi=@`h33%gtyJ{y|o0wSzv5H%rN!>ly zk%!wCJ!k$U5wF!;ggIIsuE}x409Hk08W7wuuBj4*koRbvG*?kpT%KZ|w8`j?e`LOf zAt}>{DH!IEQ#)YouB`LZCZ(8`o8@uMW^l#nLRE{C*=R_C8fXCx@O#x3jiu@v4se*g zxf!?g7jC^WCu*+W4nLYV^yUZ0@xnzX`aZR_%4R4NSK~Gb8O@8dHb56I4h8cay;X47V#ftjc?D}IS+4*Wl^AlAU ziQ;me1j3z7y{YeO7o+ns+5k^qcy?`CEh@-X7_gUY`hFl6(_74ZlbiRO*A>t0YNyRq zTaY)`--Kqf-<{iMd3+K*Q&k~0zxi2SDw-}0<}E9|O7&5YTW4ndXLJeqN629L@cXo_ zDLmHg>FJmV>6kS6kZUcrQJw#?tkzZK$R=S$#w-~B?DR0>t=T}B_*NHd(M@6ESX_5= zOcY@Q9QWL=_$r&n<(GOgAe&{`sY1aU!)o(xnZt{-D$R2vD%0E3Y>8=%HTPA^quQ#| zMhQf+6^QM2O}})|L@mqa=xkgbk_PS{fN47@)>n zp}Oe*^aXHKqN4h7t0gr1Tsm0lxnCZzV*l1v=DeMU8w3dc8I+xk_Nk+88Wu*Jh+c;s zM1*)@B#Tt!l-u!Kw?84eAvqLsV7W=u^PtK!9--i6KvygC4lbR_v;r1R^06rBEwn)T zt{c7vKe&VuO%1N;&GbW0{Vo*u&_ougr~j$&I^e6DYPk3n+ky;cIrwA~&F~@NR-cx_ zcQ>Q8vvz~~=$+!>oxK&j_6H#@Hn;OoGKAIlcC`3fS;fM-Puktf1A69x&+^)!uewFfV;kDA)J#V^2Flt=_dF%< z?s<7*u48!&F@-O}h$G?g83)BfuLnJv*E9z7%V|vE0Y5RwwpfZfOBb!6pGK+`>q&q2 z4Y6CX2sUKzZXD*Fle3$Y-)3pP@mdTXP#NZe_auY|G}<|VW#yE0)@s&!@Awd%haNoK zsTEC;7+yI;8<jM&32dVmn5voY+O=*uJT0LelYq-C3p zyz0jb10B68T><^k2#vH>6rdH!fPG)uhILmjA<63taJ$k&t2cl*~ zOzP4#S5|26+ty03KTi8-e5Pv`}?DM5^mD#Y$} zSj^{}psVRlccT|Zz%8&(o=(`{x)k2~266q(shfCl5j!H|<}{SmfaJiZ2G}A1Dd}ohpQ5*z z4|3R*M;P)_78V_rw;m^*&$;{VhTSsT`9cc{>v_tV*;J;iClCS8A>Iah#$uSzFD=I& zn>Cl|Vb8wD;6-SPUd_xJz8xeQKdT<+M5d=+%Eh%)kEGjLJPK}W*~n??bP>#Wv@*Q< z$xPEnw2G6st}zLHgxEPv2;i`sR(n}U1@e1pqx4b>II%pmmr?)0Wk*L2q#r&sB|$(( zJ+w@BAmH%OL{9;I{m}f@a2{gAKEqw1_CXH+;hoK1T4>QagtU{QBu=dxU`e{OO$ z@dIa3cf3ITW!}-uwYrP}q^Q{G(=wY$u+WSy;~d_=s8E=&$c)E_!BP=VbdV?&PibV_ zhK+9f**<)nx}&T>*c;JxgK*b_@aQgG#M`~~;MNYZg~lv2HsHm`vXa_kk|U3pdi`d0`E=Q(gyNH6P|Qe--}LZ8cqw&SX2IdD@5uYTSJ=m4s9wRvK;c-{6BS%6GrY zBYZcwEjoUqx-ckf$E8=>-E1?C=wyUqg3W3*931DjN$}WZOJO|vViF}k*m=qfVX;Na z8E?#7Srz5^D~*ekh1}L&9P7?A5?}WC)Mvl-UJbjvmZ8#g8%bYu(HGPMJe6;F3V{bI zzx#y5)@c8xOojM1-X|@6+%>z^jdkIMKYh4%ck8JY@wCLLy)fG3k^Tl_kvg%P-AK=L zEkRz_v7i!zt!RlIXufFUiif)>e<%X&GC`;0{J6Yi=g1?i{V~Xb^1%=)&$f5VAC;td zTkRAZMeHv|T$ZBLbainteVK5Vi~VOG+03M!^gUJmg{R^8bQQ58T072oZ=m*NTg}vK zoxJRK)Z>4y??PCGSw`ps&o8tp-||uS@^&?o$@^Hgh~*EW1Cd+Vg-m|q-_o)yFw)bt zE{kh#oH^Z=YRf@XgNS1G_!PdR2M>yh!Mkb7g$kh2)`-sny^M z6p&2-pqX_!NQK-hy969%8uQ=Y?Z*jvQ;cFjaneGue=>1=XgK*m18*~x#$`A+aD ziSU`ZTkzZrlm)>lTxs5JZY82)r`>-;qoRmk%9yMau>G9PFngHD59&jYGld)!kvhObgosHSE(eo`jgF3xr!oryQBQY=S7J0(&fGz zgxaN^+dMV&uuCS{Upg&8}+`5$u^EJrWPu zD8A|ZfmX+L#E+iTU^E}o$kn?s54oMwWrUmDvq{{XuU+|nVZ)%fbOZZP;!R~w*a5Hi zzBzMjwm?&~tI#N_zDCj>RLf({j-DAoVqS znMjG7)8YA_;QPySkLZgkeIc>EEgs<|FLAOLLZ9Ka&(bJe=1F8@VOGm=liqKsOIqBn z26w4GI`iCCx|+*G!}HO7wOSpVvM#^%_6iFWSImbzb|7IN)_MY>TgEJ*vTZ$&`WQ4J z^1--YwvTJ)(VJugI?B@cf~YvXsYA_FIW6M$H;V+Me8y(sO9k+sKD&jCbi_s) zE%_OP9wA}I4;yIt2eWhX(>*Xn58V0iB-nh}!)dac;)qa&nkTL;^?_qS8>uR0KNm{10(^0b4<<(!7ut6LKml@(C*v+&M^SUZ37`;1khk4&U z<`vT3J*#+cg!ul+PQ6k1lT=oj)6I;+FToD~#V7bBA1hs_4QP4w$$3D7?~<6 ziD5D}<9aiXUo3Cic@Fu?p$n)UITa{SNSi6iam&RT5`z=d_EjP2=g)Hs~oXS@9A z1ZE1a{;CYka>M z`rPImUQ4Edp{r^|@>sk9{dIR_mV&o%{(|LD%pj+p3zgpi1;R4zHoHp=2J`!SlXZ$G ze!U+TB~`Fj`X4MJ%97PjG6vG0C#$EIw5RNq;yo(uzuPU+w#>P;A0K6FfPGxj)602E zqN-DQ8<{%^xP{CTe73BlwEVWS+UaEtwM|{)9o!&bmbq%cUUf>^N=b-=|^k# zCmV`l)hZl!Y02p+uy(X|e8~|nK|k|E6uNo&LaLzfG});Pc+x8l=316f*L||PwNw-r z-?EZAVe+*D>I%!9?`7O|{fyRYmCsn!JEIny$6VwhhU?R$XB$7AOWzxHZV&Cv_v)IK zBdwJq8)+C6(;8BK3+Wp3!p6TW$kb>dPYpGAZk@-+IW82EZzgggggNyUl!<%kK1}L~ ze-dHQEOAx+9bo?FBrxnNcD{Lm*;ammcf*SKb<2#Ak5(5-rUzi^&qe0FbGt-SZ!ctX z$#9_+8B1;VIIL(^#h_}w>036OLEddu>&W9LQUK9&^7xO1OSV&`@Yo*I=2??3q1pbD z5mpuDX_FryWs_?zh!mOa$l)Pj@3U+cC8<)2H$w{Bszpy2JHh+K; zT(+us3hPjPqCx1(CmOvLl zYWSsv95U@3=923y&4r%I?U&(`LvTE!;xeXKUv$z+UWcXnga|n5OUgs&;n~fyCbEiP z*imjcL>aQVE6vEAR*i0W^IK_ix4hcSydZzS^h*SU(n`@s+;4x|YZ*{axWaFIEhNNZtC?=QvLUK# z@Uh%m%AhQBf4r>7I~TsZuR&|sgLOcq0BNO1mP#)7wbt40p*V6?X@;KuV(}26u8^&Z z_!dDl+Unq2zP~W9nwDJ0%w?fcx%Zn#ciJ?$3`$Tx+AV1=P;I%5?xq?rED>ksTSsq5 z#?CLdy_SE0airm!FsZasF5_~Ji8ZEQt1{9lqH?UQ8=o)fnIW^(v{eu@>`OeWh&aUW zA2H7FvOA&=3iNzwYtVcyTD1K`DJ>=VkRKx{rCGyfNLG4e5BFfYVD&y9OmCVk=(HS~ zbI%e*M4rz4p>pABTMF6(?~# zrw{>WZ}WJy8>Un?jTO}x{`|I!WAcF&;@3HOJUY{tzVAi@i9HELni$g#k@BrYrPndK zPm)0|&VK9GxEqGp?~(GJ%>G!t7_HY3VcXI^pK|G&UqVO_-=9AxFwjl;~pK#Q|xN>QEAt`yhc!|rbDW30u$YXBDD))dS~*8 z>h7Bj#c2#O9No)Z&!Lw0QGR_jJy2U2gPONx;*ICeM|%}Q{&+nDDOHl_Nm@VIy}^o; z>64hNjv6P9^n9LtVzAzezh5|E;JZ^W9O30<7r1b^Z!WAme|RH3DQ-P;jSLESxw_D# zDY_A76b-|BQ{02R24{6r$VM6B-G2^M)Ahvk1{hFFoO7}yGOY7p5wFg&r4;1mpt&YYUGqN_cxp)y6E zkVa!QRFePn^$nlnv&WnN`AG>a9U|cd*pDkuPBD~~OE8k=I0Vg%yLqJNHwgHp+viVf zf}$F)!Gb7s$^Ns}IG{M`oTerYSfDv3bl7^%p6@@7`#r;HuVhR?E0GSE5?}boY~#(3 zy-h4N+Gh$1P;r2Y^HhKbhV$8B0Wl%l;QjL7z-s#iz zW~m5|&2O~*Pa&pU-;&3Jhg3}l_@h|%h0DB`DiTXg%lT^a1vk3;JhsAnLw45;yFS9nqWR6R<|vj}gCFj-(4rKB-PEe_jh=uJ9;Dv< zN|^4|H1pJWoqTgGHIwC2KN@98z!~@&aOBw!@GS^UcueW5Qk{p`eO|rWL9y+g26P2B9rEHmpImD(V%DXyV7kuvWKBLUJ#Z&bd z>LF7n$L3{CF!*7U&bbV$(W!eqb$$IBr+ot6oj0OCO*&H5O_FAiwoAIJjXbRGr;W8b zB4^fD-AuB%-VbF+G%9aztvEW~ZM>p747s*Ca~+@g%&qEsUacjcTPf5&5#zZlPo}81 znwn8^BSn}|bmTC`Z=N>vnyl0&E5*v8^lXi;w{w5c2~v!ky;q%}cYA>Xaw(*mzyWW?>rLy>rv!9&ieoAe5KcYjN}aZoqf~-+d{OU{PoFDGZIu zhcTEr){c1AzB~^RoXfC%Z*PEKvRj11Mu|mTp^IBnBId;dEy`nHIYQrVWOCQC(vlzH zP>;RSc3H?~zkl2CZk5{WvA9d(S$@RkSgx_Uw<>e=@)OX)?B8eqcTG>ZJMj|o^om|% zppJYQK07XZ)gUY0p6`(fIoK>EAh)eE2y?V^TSzncaXRyPsb`t(yrhq z)a~$U#d#WabC(w!%Z%d&ctJb=uGK$pADo6|yF;r?T)iW|86i;_rEL0wR@Mp75EGU} zvN)E_)e=N6r@E#*GP*ex8fqq;vl<<%XZD1P)P84m`*kE2|7tbnZF4`#m8QOPG(qZk zVIWqSMW1?F1LTJm8DHPEZ5haK9@k}~nm|PoB>E9JEeaL(-Ot`e#YS@EbWJfQL|pQ9 z&q#hUE1{#W5Lk701qhIOg~wV{7jc4FAPV|r^%Rj)g1mp;FBu+cO&XP~Gl@t#j9!f> zCs*UmaJgfC)!5n{aVfiq*c zI4-=yscof~i;-^U9G{Ttq>Mo}C{XM;JPnW2u_!{g242q_3{xylJIk`TED^WoG4zgI zDGi-IpBFKxxHEU;(@;we2y`A?c0(41ahQgOz3sR%{+joXfM1h0*5ZFzC8#kOXK zJ)~N8GMj7ab}m}O<2;*pykSG$ARjS=kbzVNUZ(ZJ@COLSVk@+RBBC+ncT9D2=>3Yi+nw z-GDw8i>8gVzW*d!tUiI99o#O)vod2mHkPII&r`qo=PtP+53}Wm4;*2Z>_l{Xklw5F zck8K!tPR%cCAitCf^}Gm3K}-vy|5_X;;oWR$z;@Jb)oIN(De_`Jw?w(@rt4H>sFR( zH3p72j7$#4n!|)x{zv1bDKvIH8X{bpz1@m62V87+f#=tW4B~{n(aOUW!YdQEW1o9b z(|0OmY?2#BIW5w5mJPWCrmj(Ja*}vf|C}qbplO_?x+GLJGwFNrMR;{=_AMn27T0a0 z%Ifl(2T~*WO2Q^Oq**GKXbVQ<>o@jtjZSN^goxrFHToz^vb-ll@zcRFtC0XH(L{V? zw$1OTd8%)&=n(d5j3Jo0EFIYfmecIf0@?5Diz#OU3EsrD@0C|@{zbg~ccGgZfGAF2 zldn>2E)hWBfyIDs1uz-^tKvC?8JJ=J=?nO4+WgOmHu;(H@$;&wYhr+Yk|{EvswlrG z69*tv6VQ78F&*Gwn+()0pS4zh1hVg~(JoQ5q8*h1w1H?DxP+?g!6Bq=6(1Y_g&rjO ztcX-f;(aZy%ReBc{kc6UFkqTlBygT-42>Cs{9a5>a#2Y%F z*3BB@gZu=3%v#r}Yc@4nh%+h!c%L=?fBR^RX%<`RqTCx&w!L+KR zPN3i8pYgoByw0#c>5OdXz$Lq>zv%EE1%nq6>3}uj*0^6vRrcX0$_fJ~aeTeM?5g%- za5&0Jq%pT{-mu~R-W&W!4rG9k+nYm`U2-=`2hGAjnR3JtI<@i1$;oHbn+&wHl9H%( zbJCyhWk4WXR`tnAZgBjhhPu8gGjaqN43E`t#KWDwrf5p)0C@;XmG#egt<;m5>Wdjl z>iTIewYh+o=jGsRuT+#a!NBLYv*Nw(=ARP@`gwS0HXY3f7!fZ^4ljDnw@AeXJ#w_k>I}9~TgdgX1!!?mfLc4FVfChjVSc z@4Dj+Gb+(Qq9hNSdopmQ5_PZ+%0cBhmI5jgPGO@iw)|i0y=PdHZTjvTcLIrk^xkXe9gv&il^H|JXC@)2w6d zwU5b%d`f%r-1WN8-+4A-&=aTbH$k8^;3Yrda*Uvi)PiTHI82FAZW`Aud$HrCQRex{ zPRVOF!}E$Fg8A!f@kPFuv61&g`Xt=eXyh12w%FI3!9J~OhYZbwc}yi!u8Xo2dz-oG zqGq0+f`t~mxVWa{L&d~X&APw`2EiKjhQ92QsIuz|Ik|M4wT z&*a3IuC*3#gkCr8zz?gXOjW(@HhgIC5G;#c3>-m{xhEdD?$Xzc9P>_==|{snP(f0O zRG-pR7{>IHv_u>1a1&*t%JBtam|*GGbj4^7yX7S6OQ3q8-$R?}6~aJNi|&!1{#lr7 ztp8YOV)o@Rp@rtd(=^fIC+{AY$#ET|pNv@`e~A_h=vKL>d+!GL-5VXP2|`w1DLWHW z)%sT9(p^OG34vA&Z{V(f>Nj1P(??`{GC7gEuQQRcXB8#$M{zijtp?>nu_GFjqrMYJ zxsZgj|6kAQ=1O9Adr;)1$p{X ze8GLY)g}U(`!4mEj?bZ|T)dRwwMB1uue=yfIRpRTVs3z2Px)J`4$e2R@y#`7S<(eS zvVn>>8??MEpsOq3S40eHs+>@Q;SyGR7tlLsyhM7r?{_p)Nd*vn8*roB^L%Zaknd_V z`2?o5@Xnm#c%0IL?#EEXkdKYhgu$?CLXC)?EIgg=VSh{T(f*!%$(y@td`|sc2w|oL z(BjPBR_qs?jGY3f=m)x_b7tgB4diaHm5sovoRPM|m%FX)3ko*$)rE6SqOez)nJ+y* z-3U*88-_LSrID~x0b@T&k)+=*1UvE<_rI~Oq(JzrH258dr1%Xa<_5LGdevb1G)<54 zzX*{-d6!n|`A1G$Fq;XX1F8hJ`IAk!fh0_oFeQyme)pK$q>39UDdJGkSzhVe>~NDa ztQps&k>&r^x`c)GR*}Eq%nYxeBq5dvDBm!ZTHXBsEC%#NwyyzWXwpTWEotyNCAqd= zOq-&ke>h$wxeBSIAZVZl97|CcMfei1l!}4Ri)pTs5OM1b?=<3@RlDe)`a36ri)>vUK$eIiiq(OgC`y3*wA?#1~?0;9?KdnFsRh z4a(o)v}6?1gbnCDC~Icg6)_t{(O2W4YpZLq1(;VKUAaWd&DACfiAECx(TCS>RK2bjOr^?L4w&&m?HsG}{!T9Lad80<+%ItETVvu-O(l*&6G z-*O6Hh7JfA%*fYRI2NQoi}M=Vro6T3rGjn7N?$DmP910b#vIvJCi(Z}x@8pUI2)Ki zi_#Y(-?gAi)nwL4!hB_l9l?MawiXB$S3b!!&#Y+oxqNBGMW773*ajaFVk-;n3?bRO zne=my=S4F4iXinbHE!uwzm)1qrpvwDqx;(iB{&%77BtoE}FX3}Rh?z6l28KwZrdvr8;qn@GNRnkS1Ox)gf@p}g(B(w!c1Vb3NU7p2a z;9K-=-_OOjNQD_B6&-KIJKV%aM*3L~C_R;kz|a1gLf|IYU%gmZ?EhmuHuw5>oiOcU z9nMB{u>=hgU?Bp^NWWLY|G%34eqYhQ)`kVvz7vXjVzZd>5J!V2_Ic-d)Qd#)aoTN3 z4cG-N-P#H!NS}A^nLDCd-~E;FWNX>fXvR+oQ+wnHC_OtOy&o>Uoz~#C7pmPCY6zB` zpE7(Lvoj{h9nuY*jfZmGEU^$m^)K(Y;RnZ*QS7H4pvBs;ceGR@);-I3IS~sA!PhoK zgrJP(2SC}YSm(T{CU z3b#K^`Tg0{llHuqw+cuCWRY-=k1kO>+YQ z4+6J3+D|~Kv^N>LGv3&0%q3pw<<)vA9HqWElzE;C2)ZZ$j|fK_D?cn*>T%Kjo1+jy zj!yKhxVXz(2@j_rA?(~?{3PO*B@gmEdtp~X7xWyvF;_VGbC`RO*Swu$P$17inf?CC zLYt00H}Lnd+yV-udV|yKi@-+aIfR8>+=6xHc=x2vpU?VgbK^3!bDUI_lTac7b<((! zHM_}u+dRbG)-yHtfoX5gxSo5ioW!=Er|g*N_fMpI_9n}Su>nCkA3x>kV6#VYrmT9J zrL*6>pVj?j5tjFW25f$0%?`mB@hMuIi}|%3{37YbR`v3oqh+86ttTzw$CQGU2p#m6 z49#d1&c6CugqAX{jW^B9-qX%z5NJ`KMa8V_EZBZit8PkyUHy?n=8f zYwXAslKZd%9!`wk<)8g4i19WV_R5I3tR@VzeCe19al^_?!&%81m~<_j-0;#8Sp>fK zrs>>*xY*mR{neuS4Xllx?z6^JYln@J07MudUQ?;AFSnQf@J-4CBRAqhVKri4T96`P%kBrY_qL^&P=(`^rFdq^@Pi)-_&Za_n z*q0)hC0^G#_~*k5c;awr*pT^_@jKen52KCWY-3UnsiVku7!x7I?a=R+#q*uU=hRwvw+FtDw1SfI4k) zf|qiGt}^OMGl5$P)e2SfBXf=je1L?#&OT}iw8d?uptS6>uxe-)BIL3(ujsS-!g}$< zOb?EeFjm zXUCW7-og)TLgG0DSOIb1H!;|z6+ZZ^eyf;q@T?*E&XTO%l-k(H0yAiiLuy)N-mqL) z45e=@Jzs9^BuFNES2i~MIkU{~4!$Mk#X)h+ zQk8_fK5m}fm}J&bn%YuH~C5t%ijHh>zAhL9WCu z@>~3Uk5Pk@QN!$jwIHDy;+q|Pq4VdkWde$oip$y4w$orMXbgvIQ$Pnh*>t?HhzGT( zm;9KA!!FA_-c5IDXz5sT)m}wGtDkCSj45^A*u|Yb!DY$E0tS=Bc-aXX>ieE)SD2Nf zg9Z9Z9D z+I<^JRC*}vAAvNz(c&IQUmGZCM@W-+Ouvj-^mzS>72bY9>j95ebAu&VWWjBgKUU!v z^V6sranrQz{d4dhT7yGl`>0L{t0~c0=l0TjAV&hgJf!|^(!GT3EW^~p1inWT%Y%&L zp6L2=dMO!L#(S|>15Uk2naJ4B>{sp&q`su5+CJ=!{P5)?bM|e&mx${DEY^KreO?A_ z*M2X6HUbPCVtXJ-XtO=r>NS@lsOLC5bri_nS(GIv7aUt`bT^U*#e=Fx(y`K;SEb?l`CL@Qo{zPfC*$rNBk2# zj(Cz9esQ!+u=OZ<9l78?b&uM-(BKa3(a;b?%jk(I>%c%PUSjyD9y}~VZ~}NiTFb(& z&ual={qxz){i$fQA(hFXMsK81MYcHJXW!{mp+OJ)mBTWnrr*3$i}im0D5@T8(Z*St z&wdqD4Y&sf>b)N2d~kGL(3$@QQXag)Z_v?zXt2qic8=xs3mH7mGL5REESblGfq8gP zYXnMG6T}2x3PxyD19Fyp%?3^EF{3ark40>(dloyCN)EMn?1{ z4R7&U-JFJv3>%Mp=Fewok`HsaYt9KmK3#Qp<`RM6W^w)fV#3(X&KqM0MXot8R`wgT z9m3M+-u#*vp4^Nwpd(2Q`b||-a{)Z1yp5#pJaw0d_EbwWH_PBdiX`>vV zU|liv@dk;*5@`l4yjvx)qI&vhod~LY6#=s6LjN3Ama5FY@2H21@>N+0tQ`K+Twy-SWf~rm8vd>%o|bKpelXDVM106hsfA zMOMa+moos!x#I&53Aw2>J6AMx0~k$CksqVdz6<*E=E&>6hU&gQl~Sb6T*nlsil!vmH*}XuCKWx7-yR-6Q=>%~5lP7Gu{! z#$O%xqo?+rW}Xx{^^T~64k$n@5c4U-)BS}odZmaoio=)7EemBx^mWi=w~ip6aF0=! z2z}X{=c{?>AscN?2Uw4}0ohcqR~3_LQ`^Y~Hl{ToZZrY?tN{vZLj$q|YNtr6hyCq# zvO_T5z{XrZI@|QRWgt%IfoABt3RxldNu|=B>b+(Zbr`&ZnqJ zfeaSA-r4kBhj!5{K4ElpK0T)wmTX4Po@)v}%z$OSrvKgp$|IR$C2eX5QL)5CT(_CJ zq`m?-P4DA)mZo9LlgtfkZSz^&4Dpf2i`Ch9wbEfpS=T>^^@>kBKVTN@EpRGpfB>_M zz99PRa6p3*qH|U1{uM1`K{KIraBr|QVnP)T(^b)JRXFtE2Y*3W2e;|W7G^h*wrPKL zYEs{pD!b{$H+z==WDlZKxpeUtjmjK3(dX%fp_|aVY3SWfVQ;Hf742(kaMM3;UCdcr9X0Y6Se8{%_S5Y zzM|o?KY}fANvJnjAWlN&4@csl|3yDsId@ zvK|?Vh1#-~b1z@R>p_cM$7l&91Vy%oc0`DrZ>N7LS_rN#rMK@HCkok|GIb1qM?vpZ zO^Q)Ml&~AnPO$}Bz2u#+OCUkeMM+IC$#9r>Wg`NjH_xZOLjLrqn~@!okO}p@v3WeS zTgMC=-AAvWT(d_rxi9Wb@m!jaL6@ zl_*yG0w+_T5CIcL7@b(F!_RT5jl(?ej(m#6z3ns3a23^a>*Apuuzu=6Tl>1t&YWQ*P!oUxF%w z>g^E(of2k9f*ndH{oL$0K@yxND&cEm)U&O7PtTjRLT2L0tmpXSDN~BwTnEHDnuIsH zL+Ma9Hn6gKN_7_l9?&92D51YZhk_(SY}j&a*_=((X2=b7r`{l;irmB`&cX)iC1Sjk zE&iJ3vSq3b3sFzuqqraAgYCZFzZlS8k+31La&9TD8;gFh{Rm7Dzq#sq zm=zyw?tY`nj)dc;+F+mOSh|oT$V0#amQC+F?SYOXS=d$Xe->@A(6xn-$!j|6+q@*m z?Ur%z%~8NNUoj;k1wBu0C_yg*ryQ=ke-d(zZouSo@%X<3gS$BMa*4~9bKsb^iSRU8 zdKFNI30k9~Nyk5{$~o85G8hDSE_&i)ckev!$g&w&q^- zPTyd5R`Z{#1HTaza`!B^!5J4n#D%2VxUW*EhYd8p?2r)mmGz(;PScJ==p3E443L|c z~I4Y_5W*iX_&n&a^%j+aG1Gls;~Jr#ID54n}- z3*(vBUSjIYd`)F^y;XkRL`u_U)Ufcc<>*R0ML9J$)j#6oD4*B9-Lv52 ztlhlYpYrr4rx$J{g}9SbN@wu{>~1SZND8{}q(JVRb5 z-es5(XR`aN765ww!u|~{&uR`MrB|eH&CKP;(AoSL7(gU1O7>KdbfVhJv_g#fYPa!j@@Wqr=WHeN*H{c9 zbie7?7Ti=!UmW)EwlzBaP}slF_nYuS7^d#zt*EC7D{I-PyeL%UBYnnp<21LGv%sHA z0X{O_D|Lq=z2qi@Q@eN<2z<W;GsQMK7jdT_JGapyOUgdHw+Nz=A{ek zZLKbCNSN$)-FlctZQMHxF>g_x2{r5>NIZxVCfsK3yg^oCfK!P^<1nd4x#?ULLfAjH zv-58d$IdIsO^mebk+eK471|;!@iR){l`a!+@KGCCA3M8TT&4U~+`F~>ja!F^gS`-o zGM~R778;FF^uz>b{E$*Wx&1zA%Z1*wwRjpmX)7Li$|35iEbTbHUjYPMu;^U0b6a? zoQ3IQJUZgBSBcztCz8>J#M5oy$qr^Pj$$5*C`R4Khna1*yw$U|Hhhs=w2={tk@3vw z4$9$Qcz2(*)@$?ZC?M>s?o?8U@TEm_6!C$Da^>=_W+l1D1{(ar#acCEJXYaS~eKoRKW9Ttlz=62^}i@z`JMD>XxwNcCBC> z)7rSf^uK`n6t#)}CEQni6h#247Xa|(`r`=+YARKzsxl^9Y%+s5bkncrt!Y&`nmU z^Q|~=bw21GFmAJuIxUW3;y(2?k{a6cA~tV+_S)y&Xa|2`hd8+@-a^T9kktOxAf(BE z_@3X&?zy$uCYF3A^s}kC(lr$ergnH2dpvbIaCnQ+uMuCK-g+c+lBgo{9TpjK7AKs?)Xyg`F;3+oG{=S6Q=#wFX=8F$@+Qa=9Avl)j3}8=Cc)2 zv24>%!M!#Nf8l!fz)?FbG2e?W@sQ`n%jSQ)ppV~OaBz+er*~74^oP1I(nopXDk~I? z*wfzY;r6dqTViUMl{Ka?e3bWeNVd8g7!3&)zR+3)WQe^B)H-9|r&>tAmR|ZD;Ms%12=$ou=zhdH>yrl9_ z6*_HPvp2{7;u7C)*%4!Atx){8AlcH9-G+$?(K-*@PPVL|I$)(F{(TiM89N*(bt^)V za5Nm#qxYsTg-}dfNT5&6P+RM^sF=W1K6pTJJ3_3r&0qI>k{t_~U9AJen=0w)!Hb3) zr#^K3y52`QE!)gQ;XUJNn4zzG^SYU2L+MWnnop81KLxVt{+d`;odwKED-{wyOD2>*s2kigrv+bL*PT@HamNP*g#6$Qz8VzL@}SRRWre9j zP`^`7&AM_5>UeCKP^514YIyymq;R^Ou?G4ww(OXQz_s{c+1UE<4jF_b>hO=hb9K#D z09S{P=cCPGpY36{Yi)D*m3~HXhWrG@tpekDJ{bu;{d8n4o?rdg<(Z|8K zJf%q6<)Bji5A^u5ny7G^t!-S1f&pD7iWC7)Ot5~YXMCIai>BUbW8H#|$I?r~E4gkF zM@Pw!ed$znn1L%K7?OBn_kyqAYQ{rD8b>ctqV(QD{qq0{z4W4)#I1;j0V&w2p|0f+0B z9FKcVkQJ3ioxO5fsW1p%zU`y!XzDGipn?gjv8w2*Rd=$GW8>g*VsTee=|c>mnw zxuYjsVT`S;{Bs)vwRztdn_w!RK(l3R?Z4;Y94Qlv+?#ByP_C5t5as~t=-8xvVNM!`k?rhr}tC7`(9XU}Wq& zxMs-KQn{SK|DwYrZR{0GHB)s&{1SFqxgMMsbF>V}>HrfbE`K~O~k7w$s}2xV3VC$2b}D0WsTUYkE_jzo0iC zIoFX**cx1k)peAN`oMAFA=#`FV<)u2%E(;(xu?&m`YTXfGL4~3PZUB2gl>!=q;h;uFSD@9 z|F!GKvsalcJong&w;g8Qsg-JeN_s1DTt-kB+ep}kNWSfzUeJX-gP+*32HzsrX(3#k zxG3wG+g>RoJRCo-XnRR*=a9#)tY{RMmPo(0@yPzpY+?Xo8Md8oQz9h9!)1${V)?uG z+y1=Li8l^zTTnqH%fSsg-skgitqBc&8@0=6Q4zGO$Rc9w_XTuv^yFDa^g6Cbc~_we z$oe4NYZ!n(W>d1q`mUfLwJ$9=wi+OrJ;p51MSrf4JYk z4U#so3X`M4Wu5hme%G`WHoFT!g-S98i%;zCj=84tmk*a2zzd_UIpTbgSf|=(S@>I^}JT9dV<8cRi!r?$Ev4gF`&T8fi8VIip(7^s|cK%tt0W;$Z79L3qYDkkvD9wto}i`&3}OiVpYKGs5;e< zGInKM2_MPWnP!{Kj|tu1P~(iStL+1oB|7O%UegEtY*B$
Z?5WXD&t?%sbX@^-9z z$V_j-_kNx9v*Y`Bcskq`(7B(SiyaRUA}^s1-Q2Sjv|x{=ls)3IdJ`(^upU8^zHkQC zhgK`QB<6)CpCThZNA8)Q0#;@}TWo8ufqHU==jIv?e(T0-)#^2Dy=Ju_-&U!B{XWaL zOM&i-)M1z1a>nH=;~>rZ>QidOo!g-|Ky&6Z87$BKj7tgryCkyn5nJE~fS&m^CK?I6&@qGFpdrOC<h;o68=8J8xpU03h*+(_89Qup^Yf4HbI!ER^Ow&=&rQ=@TG+)<;py$9C-M;bPw=3m8n;$fe>> zqYsqmbR*WiC(i(gc9GPTU`Li1Ske!((dD+VfpuFXRpXWONu*JFb1D73GANeP~X;!5nBwPc_>jVY5 z_YSwHuo3-JC-I}a1nMuJDFXTl@Et3K<4T$~#e{i(2Rz56=_f8f|D5wxqy6U{&;uZN zSZT8MAKm2l+Y3qyot)pLQi7h#u4ObH(=4h1Y-UYqNn|wzBjNuyn#+H3OSR~(mR8}_ z@dFPQ25RUa%L|JPmODUKuQlPs_-}#9jbI77ssTBV*%9MVi7K|<2Ov;A^~FsKyEt6D zTjMcR@Ip+X5~3t*^$jYBi;GE7T@qws`>6&3Ir0Pl{Lj0Efbjip-8@>HBB|oBnZtH^ zM{wAWGSx6&29wstLJp|KkI%~T1FW}bo36ehNvES)EEL!^#7u{U?Rgm8-z~0PvokuC zj&@(4OBfmvBaYj>`=T*ymm&SLa`PQciM$#LxB=KnaeIqMtIWSyW8#yZX3CjAZlJ#~ zf1pSVvxSUE^E9H@+IlC60i1vUug9O;b7~T{6DvVy1`&n55_;Yv+G9%?AadzQe0E(Pg9BhCNnrR;Ou?Bf zjn50UEwaAYLKPzJ!vFuj7#z4}rBm(b|H zl5`)QFhxb&iAlvVTDi$*N+s=M&2iE6VZtGD%xDb@gnlK&-ma?V2{Hy7*v+#=H9GHdu+wbi$zA-@86zz>0c;M_W0RRb znq`d5TLpi_0Gf#3Rwxt~avD~}y04p|)mKCW{5VoDiV4qtwz&%kaW-e|BuqI)xyO6w zKvLPo^`iav>Iy>5xig)A!(-an$6Y`@Y3r&MEX$JF`t95^+~?Oyrg;C zbji;+#@Z(G8AOhgv()ZNw<+sbh#i$F(bIAC!?xVw+Krg-(Kgqj?Kj7ST&Jol{9qqn zq<*jX(WPyFH_aLtBB(Cr*Y%5`$CS(OQ*cP0t-KR0pLn0%Bijj+Yz_GIbaSnU^VXa} z@jy(cyH*C|-IN7C^^ey6w$bCtbY0>q=se_fu{(NZ$1RR5QJ$?xp48S8^BgC~W?WFt zPrXrOjpuLtq6m=+maF#}k9ano20~l0W7J39w)G|4I72A z!p4iM{Jw4!eZT56@^+X>G>5Jm@DsdU>YrB17NpBa{mC=-rM_`JGYPqYlz*_Cu+*be z?SQ;BGy(erUHQidA3=eiT7IhjT{_}Av(vD`D)Dt#Cl1D?-s(YY+lquEyp`?_GZ?>2fg|Pf-B~hF z9W^l1zX<{KL-zbpUlRwz_>~!Y`2VT}?926v&$A=_C9Ic^WF@SWUgPrjhQ<^nemR`9 z6kEJ<)S66TKhk2ucR7s`2{Oqt6G!=bOGLf&niWt)zfkK)Gi)|p`%Y6N>U{-0EJVvH z5TmC7xn*inA~N~I;B_aI9`GV7tq=Y_&f8xTl|XWJr7<3II##L zEpN|GJ!J`=ccH#715Q7F9Ai)zt$UI_dptmn8a15%YFACqI#-2>*w3b;Vxhf%H1ySp z8wx)3gw3p1;v6EPNyQH)Bd~P=2L}ZY0S0JQ)+SyonT(sB+d#;60)Kx1R)Z-i%%=N> zcx2Aa8!{Mq8+17~63 z5>3$5rk?0Fn5Tr76cVHEOs2o(p)hA={$+kY09ysv;>V*6*#E+5u4Wxv?@jM}W+Jf^ z-AhAO>a&xp*cr^UxbLz4`r3$mb{(8J&F2*S@-$>d$uQ2P{S;vK&YcqvWr#yIsSRT> zEi^uy2P9|hHI=KSXS3BNrZA5yR3h{K7|&@7q}aI8{B`6Qf((zrL|#5+rsh^TS!ryS zCD*yM;5zu7_8b z*}&}n1cR6QHvbb$vj*M)8HIO%FJu#X$pux4IdIQ7zfO{6yMR*s)Ms2ad+7sCSE7<3 zx(9vf;BIE$YTvI>vSvYoy zuQItwKR3DEed~NS>Ii|3NH_IC>@Z?Oc%B|-c!r<7g`8@H)bRVt{sB zlFlfJ7;QhpojS6APE{uQPGWh^YHyWQ<>03We$pzKqzrzKhxvR(NSOqhUpB}epqY*u zJfz^d518zZn(o!JMv=vosp&iFH~Lr&lo~*L9gO>Uhci*l3n@54iQ~REWyOY1pLlPH z@Y0cvoL(hK6*4Usor*Q5&7E$hfC4R;_IC?LxL!npq?V7B#sY~+l65XRA@FRLbbr5Q zt}oY`gN~Z{d`NYO)Le){;?{b2<&x+;utrl}^B!Hh8j{hFB+As-6GBfx-W5$`5qQC-*(U#v6nr;J zn$CxYv(=V$K*UfVO;Jr^VUtp$)sX3`B$Miab7*fc&5uN(*`qe}_8_I+PM|j&+p_T4 z{76u}3$S6cr0?rszZEuDN5qJ{O=sH3M~wk964u&K0pn7?ti~%2ne8*}*vo->LBh@iz=n>6 z=AtQNvRDj0^!gzCx3r+F;VGGn_6_QQsq}_j{X{>sIK%UkY>mTg-y9d0+w+ELT*#gYmC3r~v$hY_k2<+9Z$(XM{BNXn zfRp_U_m}J5vWj@X?JOxTI>41}Szu!nC_)8XwqCcsW*Wc?R-)GY!SZT!pa^NN09R1JWKts8< z)@b*v!j9Oxj=2i49AxFBUp>cKiX%W=jfowIyHH(sT3GLq)G%h1SMYT|o05h?~NZ_jK`0;>1ZJ*tvZH58w2zUT4@y{gDDa#L!-T9YmW!M%q#;} zTIzRadM8cGoD9Ck5ozGN-vThT9PqWWgQzmxTQ|?e-Il1nv}Dv=@50^lddq*#gy}8T zhn*YI^x;z@TOsn!njhL%Ykr-G4H;E=o0=Z7-U;wZCy8**{*-K6fLW!^&_g zcsd|*GJ`JHn6*=s{q*S&JzSqT2`2wgtvL4!o2FA1fsTiCEgYcoeZo@Q$OgmpuxKik zhq}h!q#bnAzqUjThAW)CbzO+e>OUb($F+A>b$%SHAfs_h&K=sTlxjq8bnkO5`yL! z0OI`mX9=csERWEBR%h4WB=6km1B9UZr@$Iizt0LW*Kj%TsgRJ+=j3i}=u?Dgtecl4N zgaKNPi)Tl%i|32S|7EVD|Do8IW8vE^K8?&>>cj2+B==?3}_0ja>8h*zs$%RK7SzsZn^ z4Qm=#5TLtG&Ff$im<$R;75k0dnk}TCXsTR_Ic`-JrSo6fVtv7tm3v`-^XOuH_sKgO z`{A2>b1Ts+`z*+S2H#~j^zj?nwt7}2i`FCI^4f zhSL3IKO3y^|A>C^7t+Ne8p9B7P&$xh*^B~hA&bCuSYRUg2a(CNLieq?=HRWXz}CV{gr%co=~eDY41As^?RJ|ve0t7)9?ZOC==FB zqre+o)fN;Kruvj56`6jrymFAEsqGMTMIlYF^W@;mc^|S0Le)Jt&tzWTJ1sb(siAi7EO~wBVbH4yvgx8*+~Rjj*k_tqtz4}A z-;Yl-%hHP(YZv^lVpihgedF9Aid`?k8w1HP)Z}vi*L9eQg9aAI7g220a2|OeoehV(!(Q?~vCh zq}o~VqI17&xKy+Kry0C_plOJ=;R*+LnGja;1F-if=~rFeVa47F^ECk4&S;>&F_qy!@nM zefIbG6U;R0t$*a72y4k(ypzj}eBF1)kLeF=fzDb!evZf5>nW-Hebw@R#LA-Qz>mP@#BC{zoVXr6Y0jll5VV z9@FWr1mi6S2RS*;``NsV`SG4NlHSybq|PgIL@Fx@oi1vhiqs(H<4r=)-(*lsZe#Vq z2>}%K*mynXs{MT$;&m z!1YA&X~u1j#@h+iMkYBv3;t4ygjjx8x$v8MK6_C;h_khDCOtPFmm-{<{N+vf(M?%i zwp;kFce(>SN$-DTl;lgvIt3}}hj3-Ch}%s)jbP$-O0&yi%8EP8mOTF028hnMBkoS}5NO_K+zlZaDXhsKpmlQ2RXiN`(FOFBMKuOZ)yoAHXIEcW@-vYU z@V_(@a&pxB#A)l@$AKN2{#p(ilwz;LeHDDyAw~b19i|Vne8SvZ-jJEvc)qL|s}{(Y zPx+%nq{`g~A1-qkM-GKR-)YIcIa#G7{DeaNkTt*`=w{cm#csbe9V;q6hb~d^`7UKG z25n6jCN^xbE^t0m5$AT-rU$Il=AOd~BBy>arn45Kj?k*PG1MFr(jsPaps`z*K%B2G z&^K)&7mxHe$Klj!XgQyejH0IjhciYV`4rOb@f$AGaQ}epduo&R^KftEkBWn|!voc& zKl3c8%}+65KLE?OZ!q{^j&_7aSVSxA5W^I%UOKN^Gyc`cng|`YAmz1h6{HcVa{otO zZ#uMAGl@EYorJ~Dzz%A5CpN@;M$e|Nm+Ob)_-SMD$1@W>DJh&|RnC)U?RqyfYWLlN zTM4G*j4pT?ETK%swQ5ec?T&0ygjND z8h$`ZK|J^dY2KOm?-Mih+vrL`L)GpYGC9!GcspVKx2*{eQU0piR}aJNwhhy$w?lyy z^&$n}_w>(N3Xy{!%0aI$GDBLLT5vJV?- z2p!oi6Id&j1TaT+YPYUyI0z%223oK;FWX%AEUuPGa@=7Vl)jV9x_$fElQGj3^v-wR ztPi5W508_Ns^&3P?{x*;922&dW{}gjCbVq@dmFch9kNf?!^0R z+|DRQM3);a|7q?}xGp1!y;w;%`1@0g)M;!!GhpY~!{!T@REtdp^FR??z|6`!B8dK-D`+xg^a1^w?y!bUnCpzqZ04ZzR!*ES$8T z@B5RdCEPd0=ZI~Eux$j+GngG8xW$e8si<*@>=eJ`Q(nve+!= z89p%MPVyT4cdFvg_H2V0?ga zAYusN&_ON{2}ejkLe%0E5Rh;qmlL_<5*a`OBx(dnz^L3Lh#(5X6@<`WObbRVonbmN;2U+2W z)c_3c_IO!5EyrQbvRk_*7MXuzS27tE@j4~Xc-Qr2Z@-||KV6wG(X?$Q&92r-<@S7z zy>P?-%blsuE87jpzSeJ}hu=LSH0(or?@zV!I;-{w6Fmnaps_qTX(+w~8Ia$u^QOgu zcGj!)iJCOnY*%%VqtI_gpP=Y~OtP6B1mY7Xy!H`gTGJaTjf)H7%EZkre}{k)SgHB<6^)yz^GXTzL%Xt zgC@DOhw|nOlh5xM-oL%)Yp})cTSGL$wu+F760);D^^OVb_BvliTsv0`)p@c}lh!JR zR1HwF*ItYapv`r|UKFx>B?XrhPat(0j*_nrMZF4Z>+x)&lI>GNA6^?a!w`xPk?-_j zl_d)kr8DeS-e!2qc`nh&yVdAYNgn*eyBEQnXU|nN=@G-#ak&_t3VJcDCA{9+KycV) zWi>0pCZB<;t6rZtIT@R1R-DV2%w);wS^8f162b1Q_@S;kHhR$60M}n`fqiw?9dy+Y z=IoG@V2M|i*EndD?=gs88qvjWd140`GbX9_M_r zq|}^+EG*ZEtd)TA@r zqQ$cmINg8Z~>UXYTbr)@ltSEpRS}uc-1QpqC@w-SB=tgSx+2 zS0fd#U(3?xJyunwse8A)@lyh4n8H>ZL@uoeJXbMoOfbhmV5zZ0TEWfq>Kd%x@*0&| zXlMUuR)k3jnU^^$|NMJ+GpEeSy@g;G6kT;Y9a}=>p$Su$!*%;Bmy#RX`*dsdtXsXj ze`MZ^d*Rm~TC(PQW-@Rug4#&yLaKL*zvERl`qI!(nfmx_LTG)9OO)G2C)#S+x3-eg zKuKbk_TdzNL+beCEOZhZGIWn0)F7YeuEM`NxmuY11J98beU66TlH{SE6G`%Wr9WEF zGY)Gqb<0C2xsJ4tAL-Xq+kTBNhyxb&QLsrex>-$i!3w`e`cf(U7rPLI-+KpjOI6Gp zI3Tr(13{sb?Kb4sm`;Jm2lxkw|Mv3wEObI&Fm&6WX}su76yrBvVtI{>VAcza(hfB% z_VP!02h~w1Jnj7$SBAq}c8#aM$XjD_@T?v%JM34-K|dLF5;wG9?gX{)(&rm?3BS+)Ti z$+aI>zO=}*-%y&|sku5_JjZa-R{ddn<$e4_9I0N+52K zI|MqDI$Gzi4LWl|$*APWo$i&l@6I!%Q$6gJLIOVh)S(9`_)mP~^#ES$BUd{JA_`-h zKq^|HQkOL!AS0V1fEFCnOUI3NW6|&j9#l* zat2#xXj(;^BztocFqkGFGYXna7{jZk_MR;W*^0LfwG>regryZVHjCzGfA8h=_(oTx zW!0E1@5vmNhCiMn2|zoaZH_MSHMo6rv}lapj_of8s@2`^$jqazAv)F;Mi|lY$i4)2 zrO6a6JUKXO>3g0E(@xFNrQ@lBXQsWzZLP>$Tqa}iQ~)k0TVNflE$nfVxnPqauo;ff+j0duMU=9je9Jhu=Q^66c*gC=hG5Kn@52U)o z+KhNrcyi##`Tq3ga+%ver)=Hy8P@6&z712Ms@&RwnwlMR1)4&R3%)$|s&kBb6gGX)L-8hJEdgsfYyJCo@EM~IxPGAmDEbqc*MwwiPIen&w2N2OQ?V#r;Sr>m!uak z4&-R+*+74&-1r7x1lgg13yv60lql{g3_EB^=uO<(M3=ebE4|ewhDl4{1Y>uvz&bB_ z$T8cxE3(T7Oa}`*Z_>fLvk78oLb)4JUu z!Jai8fXp0qFGKS;D(LFA%Kz-!W=jhXqRkw?kuXIjSSpo@xNJ+u6aF9R``gUEXam6p#dUE~b?_7GJ}Y(cfU$ z_vTOTiX=#|;8AcLFw*`oYWNPES-d|zER3U=CN!m literal 0 HcmV?d00001 diff --git a/prototypes/api-docs/evidence/coverage.json b/prototypes/api-docs/evidence/coverage.json new file mode 100644 index 000000000000..d27d84ca2a1d --- /dev/null +++ b/prototypes/api-docs/evidence/coverage.json @@ -0,0 +1,1715 @@ +{ + "modelVersion": 1, + "apis": [ + { + "api": "governance", + "operations": 8, + "variants": 52, + "headers": 0, + "references": 52, + "namedSchemas": 18, + "schemaRoots": 40, + "examples": 50, + "exceptions": 0, + "changes": 4, + "classifications": { + "mechanical conversion": 2, + "editorial completion": 1, + "evidence-backed correction": 1 + }, + "coverage": "pass" + }, + { + "api": "hub", + "operations": 54, + "variants": 241, + "headers": 1, + "references": 229, + "namedSchemas": 74, + "schemaRoots": 214, + "examples": 246, + "exceptions": 268, + "changes": 157, + "classifications": { + "mechanical conversion": 58, + "editorial completion": 81, + "evidence-backed correction": 17, + "provisional assumption": 1 + }, + "coverage": "pass" + }, + { + "api": "dvp", + "operations": 12, + "variants": 20, + "headers": 0, + "references": 29, + "namedSchemas": 26, + "schemaRoots": 69, + "examples": 8, + "exceptions": 17, + "changes": 14, + "classifications": { + "mechanical conversion": 7, + "editorial completion": 2, + "evidence-backed correction": 5 + }, + "coverage": "pass" + }, + { + "api": "registry", + "operations": 11, + "variants": 68, + "headers": 32, + "references": 0, + "namedSchemas": 0, + "schemaRoots": 76, + "examples": 87, + "exceptions": 4, + "changes": 7, + "classifications": { + "mechanical conversion": 2, + "editorial completion": 1, + "provisional assumption": 3, + "evidence-backed correction": 1 + }, + "coverage": "pass" + }, + { + "api": "engine-1.56", + "operations": 108, + "variants": 434, + "headers": 15, + "references": 350, + "namedSchemas": 160, + "schemaRoots": 792, + "examples": 569, + "exceptions": 101, + "changes": 1521, + "classifications": { + "mechanical conversion": 1254, + "provisional assumption": 11, + "editorial completion": 79, + "evidence-backed correction": 177 + }, + "coverage": "pass" + }, + { + "api": "engine-1.55", + "operations": 108, + "variants": 434, + "headers": 15, + "references": 350, + "namedSchemas": 160, + "schemaRoots": 792, + "examples": 569, + "exceptions": 101, + "changes": 1521, + "classifications": { + "mechanical conversion": 1254, + "provisional assumption": 11, + "editorial completion": 79, + "evidence-backed correction": 177 + }, + "coverage": "pass" + } + ], + "engineEffectiveChanges": [ + { + "operation": "SystemPing", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SystemPingHead", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SystemAuth", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageBuild", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "BuildPrune", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageCommit", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ConfigList", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ConfigCreate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ConfigInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ConfigDelete", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ConfigUpdate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerCreate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerList", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerList", + "field": "parameters", + "before": [ + { + "description": "Return all containers. By default, only running containers are shown.\n", + "in": "query", + "name": "all", + "pointer": "/paths/~1containers~1json/get/parameters/0", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "in": "query", + "name": "limit", + "pointer": "/paths/~1containers~1json/get/parameters/1", + "schema": { + "type": "integer" + } + }, + { + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "in": "query", + "name": "size", + "pointer": "/paths/~1containers~1json/get/parameters/2", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "in": "query", + "name": "filters", + "pointer": "/paths/~1containers~1json/get/parameters/3", + "schema": { + "type": "string" + } + } + ], + "after": [ + { + "description": "Return all containers. By default, only running containers are shown.\n", + "in": "query", + "name": "all", + "pointer": "/paths/~1containers~1json/get/parameters/0", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "in": "query", + "name": "limit", + "pointer": "/paths/~1containers~1json/get/parameters/1", + "schema": { + "type": "integer" + } + }, + { + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "in": "query", + "name": "size", + "pointer": "/paths/~1containers~1json/get/parameters/2", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `annotation=key` or `annotation=\"key=value\"` of a container annotation\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "in": "query", + "name": "filters", + "pointer": "/paths/~1containers~1json/get/parameters/3", + "schema": { + "type": "string" + } + } + ] + }, + { + "operation": "ContainerPrune", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerDelete", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerArchive", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "PutContainerArchive", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerArchiveInfo", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerAttach", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerAttachWebsocket", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerChanges", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerExec", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerExport", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerKill", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerLogs", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerPause", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerRename", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerResize", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerRestart", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerStart", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerStats", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerStop", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerTop", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerUnpause", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerUpdate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ContainerWait", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "DistributionInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SystemEvents", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ExecInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ExecResize", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ExecStart", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageCreate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageGetAll", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageList", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageLoad", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImagePrune", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageSearch", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageDelete", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageAttestations", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageGet", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageHistory", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImagePush", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ImageTag", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SystemInfo", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "NetworkList", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "NetworkCreate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "NetworkPrune", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "NetworkInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "NetworkDelete", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "NetworkConnect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "NetworkDisconnect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "NodeList", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "NodeInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "NodeDelete", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "NodeUpdate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "PluginList", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "PluginCreate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "GetPluginPrivileges", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "PluginPull", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "PluginDelete", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "PluginDisable", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "PluginEnable", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "PluginInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "PluginPush", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "PluginSet", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "PluginUpgrade", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SecretList", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SecretCreate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SecretInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SecretDelete", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SecretUpdate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ServiceList", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ServiceCreate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ServiceInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ServiceDelete", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ServiceLogs", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "ServiceUpdate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "Session", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SwarmInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SwarmInit", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SwarmJoin", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SwarmLeave", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SwarmUnlock", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SwarmUnlockkey", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SwarmUpdate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SystemDataUsage", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "TaskList", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "TaskInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "TaskLogs", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "SystemVersion", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "VolumeList", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "VolumeCreate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "VolumePrune", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "VolumeInspect", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "VolumeUpdate", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + }, + { + "operation": "VolumeDelete", + "field": "servers", + "before": [ + { + "url": "/v1.55" + } + ], + "after": [ + { + "url": "/v1.56" + } + ] + } + ] +} diff --git a/prototypes/api-docs/evidence/operation-dark.png b/prototypes/api-docs/evidence/operation-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..21ee8a141c663799f9fe683efe299ea90ea38b43 GIT binary patch literal 135838 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 XyC#QgT*@ZhyhBP%UbIkH@5g@wbM9mE literal 0 HcmV?d00001 diff --git a/prototypes/api-docs/evidence/operation-mobile.png b/prototypes/api-docs/evidence/operation-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..c37ef35e23880e6ace39aac6ad64b99c19a057a2 GIT binary patch literal 50026 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%0DyFsM(Kv#H;wk}&Ke!4CjN)*)mGC8C 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 literal 0 HcmV?d00001 diff --git a/prototypes/api-docs/evidence/operation.png b/prototypes/api-docs/evidence/operation.png new file mode 100644 index 0000000000000000000000000000000000000000..c8ef2eec4b4f1f4de6b3f087b8fbf6c22290e4b8 GIT binary patch literal 135466 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

u{phyvNqZGWJRp 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

~>3$e=RnuE_EX_xE)M**q&N*m9|A%+Y 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 PE%Gl_UKGi^`}jWq2KGdd literal 0 HcmV?d00001 diff --git a/prototypes/api-docs/evidence/output.json b/prototypes/api-docs/evidence/output.json new file mode 100644 index 000000000000..b0a4b8ea8ca2 --- /dev/null +++ b/prototypes/api-docs/evidence/output.json @@ -0,0 +1,5 @@ +{ + "htmlMarkdownPagePairs": 746, + "previewBytes": 190452604, + "result": "pass" +} diff --git a/prototypes/api-docs/evidence/presentation.json b/prototypes/api-docs/evidence/presentation.json new file mode 100644 index 000000000000..9d7710d63305 --- /dev/null +++ b/prototypes/api-docs/evidence/presentation.json @@ -0,0 +1,22 @@ +{ + "date": "2026-09-08", + "result": "pass", + "browserChecks": 13, + "layoutChecks": { + "pages": [ + "hub/operations/VerifyRepositoryImmutableTags/", + "engine-1.56/operations/ContainerCreate/", + "engine-1.56/schemas/EndpointSettings/", + "registry/", + "dvp/" + ], + "widths": [390, 768, 1024, 1280, 1440], + "themes": ["light", "dark"], + "combinations": 50, + "horizontalPageOverflow": false, + "minimumCodeFontPixels": 13 + }, + "keyboardFocus": "pass", + "sourceDisclosure": "pass", + "shortViewportRequestPanelFocus": "pass" +} diff --git a/prototypes/api-docs/evidence/schema.png b/prototypes/api-docs/evidence/schema.png new file mode 100644 index 0000000000000000000000000000000000000000..c866adbd75c1d26893aa3bf08d4dba95f275d3bf GIT binary patch literal 150274 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�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 literal 0 HcmV?d00001 diff --git a/prototypes/api-docs/evidence/validation-status.json b/prototypes/api-docs/evidence/validation-status.json new file mode 100644 index 000000000000..abfe714352fa --- /dev/null +++ b/prototypes/api-docs/evidence/validation-status.json @@ -0,0 +1,10 @@ +{ + "strictExitCode": 1, + "strictDiagnostics": 491, + "previewResult": "pass", + "defaultBuildExcludesPrototype": true, + "localBuildSeconds": 14, + "containerBuildSeconds": 41, + "pagefindFirstCompileSeconds": 98, + "originalSpecsVerifiedUnchanged": true +} diff --git a/prototypes/api-docs/exceptions.json b/prototypes/api-docs/exceptions.json new file mode 100644 index 000000000000..b0f12d2cdba6 --- /dev/null +++ b/prototypes/api-docs/exceptions.json @@ -0,0 +1,4912 @@ +[ + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "example", + "pointer": "/components/schemas/Users2FALoginRequest/properties/code/example", + "messageSha256": "f524c4289cac4e74fc655a117925b19d205e8cf4a84d0e4eb580376857270d11", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:hub#/components/schemas/Users2FALoginRequest/properties/code'\n- at '': got number, want string", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "example", + "pointer": "/components/schemas/getAccessTokensResponse/properties/next/example", + "messageSha256": "24b1ae1c7680ae4c77e6a2324f37604bae76ac9ec0005c305c53d25bf07d1de1", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:hub#/components/schemas/getAccessTokensResponse/properties/next'\n- at '': got null, want string", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "example", + "pointer": "/components/schemas/getAccessTokensResponse/properties/previous/example", + "messageSha256": "70abcbf84044398b484ca7b512025a5f8e827352875dfc8e04071e76c195e4b0", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:hub#/components/schemas/getAccessTokensResponse/properties/previous'\n- at '': got null, want string", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "example", + "pointer": "/components/schemas/immutable_tags_verify_request/properties/regex/example", + "messageSha256": "c5e7204226bdc3c0252c721ed6ef8bcdd36f4f6f2e5a10c8a7da220e9fc8fa8c", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:hub#/components/schemas/immutable_tags_verify_request/properties/regex'\n- at '': 'v.*' does not match pattern '^[a-z0-9]+((\\\\\\\\.|_|__|-+)[a-z0-9]+)*(\\\\\\\\/[a-z0-9]+((\\\\\\\\.|_|__|-+)[a-z0-9]+)*)*$'", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "example", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/responses/200/content/application~1json/schema/properties/next/example", + "messageSha256": "c38485c83b9ebe4bca6b5ce33378e8b8fb1b8ec3d6c5edf1d0023bd44e4e2fd8", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:hub#/paths/~1v2~1orgs~1%7Borg_name%7D~1groups/get/responses/200/content/application~1json/schema/properties/next'\n- at '': got null, want string", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "example", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/responses/200/content/application~1json/schema/properties/previous/example", + "messageSha256": "b3f9ac6897f3b48d85c63dae690b86569e284aeed8ade6390c34f511496a93c1", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:hub#/paths/~1v2~1orgs~1%7Borg_name%7D~1groups/get/responses/200/content/application~1json/schema/properties/previous'\n- at '': got null, want string", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "example", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/get/responses/200/content/application~1json/schema/properties/next/example", + "messageSha256": "5a161ce722f225c2468a5db8c0c3b9a7794e7847d24645bc11e219b182cd9996", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:hub#/paths/~1v2~1orgs~1%7Borg_name%7D~1groups~1%7Bgroup_name%7D~1members/get/responses/200/content/application~1json/schema/properties/next'\n- at '': got null, want string", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "example", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/get/responses/200/content/application~1json/schema/properties/previous/example", + "messageSha256": "0afb130b19f561c0c4587e8d27ffbdce7c2c56b516dd609f9dad68c697ae68dd", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:hub#/paths/~1v2~1orgs~1%7Borg_name%7D~1groups~1%7Bgroup_name%7D~1members/get/responses/200/content/application~1json/schema/properties/previous'\n- at '': got null, want string", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "example", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/post/responses/201/content/application~1json/example", + "messageSha256": "1a244af81ade4ef2616b9ee5bf28edeed2bac6f56a35a4a58210ab73bf0ca6d7", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:hub#/paths/~1v2~1namespaces~1%7Bnamespace%7D~1repositories/post/responses/201/content/application~1json/schema'\n- at '': missing properties 'user', 'permissions'", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "example", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/get/responses/200/content/application~1json/example", + "messageSha256": "e1b27ea692b2fda83285b9884f9f852d6c64f77f153e06138d27be7d958ffa16", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:hub#/paths/~1v2~1namespaces~1%7Bnamespace%7D~1repositories~1%7Brepository%7D/get/responses/200/content/application~1json/schema'\n- at '': missing properties 'user', 'permissions'", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1access-tokens/get/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1access-tokens/get/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens/get/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens/post/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/delete/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/delete/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/patch/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/patch/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/patch/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/patch/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1auditlogs~1{account}/get/responses/500/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1auditlogs~1{account}/get/responses/default/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1auditlogs~1{account}~1actions/get/responses/500/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1auditlogs~1{account}~1actions/get/responses/default/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1auth~1token/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1auth~1token/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1auth~1token/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1invites~1bulk/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1invites~1bulk/post/responses/202/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1invites~1bulk/post/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1invites~1bulk/post/responses/409/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1invites~1{id}/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1invites~1{id}/delete/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1invites~1{id}/delete/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1invites~1{id}/delete/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1invites~1{id}~1resend/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1invites~1{id}~1resend/patch/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1invites~1{id}~1resend/patch/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1invites~1{id}~1resend/patch/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/post/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/post/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/post/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/post/responses/500/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/get/responses/500/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/head/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/head/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/head/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/head/responses/500/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags/patch/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags/patch/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags/patch/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags/patch/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags/patch/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags/patch/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags~1verify/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags~1verify/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags~1verify/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags~1verify/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags~1verify/post/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags~1verify/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags~1verify/post/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags~1verify/post/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/head/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/head/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/parameters/2/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/parameters/2/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/head/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/head/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/get/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/get/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/post/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/post/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/post/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1settings/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1settings/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1settings/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1settings/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1settings/put/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1settings/put/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1settings/put/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1settings/put/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{name}~1settings/put/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/delete/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/delete/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/delete/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/patch/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/patch/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/patch/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/patch/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/patch/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/post/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/post/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/delete/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/delete/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/delete/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/responses/500/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members~1{username}/delete/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members~1{username}/delete/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members~1{username}/delete/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1invites/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1invites/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1invites/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1invites/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members/parameters/5/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members/parameters/6/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members/get/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1export/get/responses/200/content/text~1csv", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1export/get/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1export/get/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1export/get/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1export/get/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/put/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/put/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/put/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/put/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/put/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/put/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/delete/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/delete/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/delete/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/delete/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1repositories~1{namespace}~1{repository}~1groups/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1repositories~1{namespace}~1{repository}~1groups/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1repositories~1{namespace}~1{repository}~1groups/post/responses/400/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1repositories~1{namespace}~1{repository}~1groups/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1repositories~1{namespace}~1{repository}~1groups/post/responses/403/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1repositories~1{namespace}~1{repository}~1groups/post/responses/404/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes/get/responses/200/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes/get/responses/401/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes/get/responses/500/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes~1{name}/get/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes~1{name}/get/responses/200/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes~1{name}/get/responses/401/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes~1{name}/get/responses/404/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes~1{name}/get/responses/500/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Schemas/get/responses/200/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Schemas/get/responses/401/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Schemas/get/responses/500/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1scim~12.0~1Schemas~1{id}/get/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Schemas~1{id}/get/responses/200/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Schemas~1{id}/get/responses/401/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Schemas~1{id}/get/responses/404/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Schemas~1{id}/get/responses/500/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1ServiceProviderConfig/get/responses/200/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1ServiceProviderConfig/get/responses/401/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1ServiceProviderConfig/get/responses/500/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/parameters/0/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/parameters/1/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/parameters/2/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S8", + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/parameters/4/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/responses/200/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/responses/400/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/responses/401/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/responses/403/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/responses/404/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/responses/500/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/post/requestBody/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/post/responses/201/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/post/responses/400/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/post/responses/401/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/post/responses/403/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/post/responses/404/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/post/responses/409/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users/post/responses/500/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/get/responses/200/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/get/responses/400/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/get/responses/401/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/get/responses/403/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/get/responses/404/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/get/responses/500/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/requestBody/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/responses/200/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/responses/400/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/responses/401/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/responses/403/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/responses/404/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/responses/409/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/responses/500/content/application~1scim+json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1users~12fa-login/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1users~12fa-login/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1users~12fa-login/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1users~1login/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1users~1login/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "hub", + "sha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "rule": "S11", + "pointer": "/paths/~1v2~1users~1login/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "example", + "pointer": "/components/schemas/Users2FALoginRequest/properties/code/example", + "messageSha256": "d216ebf62163620dd035cbcdc4bca82e17f62bd9e4e722a533dc171fd4eb7253", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:dvp#/components/schemas/Users2FALoginRequest/properties/code'\n- at '': got number, want string", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1namespaces/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1namespaces~1{namespace}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1namespaces~1{namespace}~1pulls/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1namespaces~1{namespace}~1pulls~1exports~1years/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1namespaces~1{namespace}~1pulls~1exports~1years~1{year}~1{timespantype}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1namespaces~1{namespace}~1pulls~1exports~1years~1{year}~1{timespantype}~1{timespan}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1namespaces~1{namespace}~1pulls~1exports~1years~1{year}~1{timespantype}~1{timespan}~1{dataview}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1namespaces~1{namespace}~1repos~1{repo}~1pulls/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1repos~1pulls/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1v2~1users~12fa-login/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1v2~1users~12fa-login/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1v2~1users~12fa-login/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1v2~1users~1login/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1v2~1users~1login/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "dvp", + "sha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "rule": "S11", + "pointer": "/paths/~1v2~1users~1login/post/responses/401/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "registry", + "sha256": "3257829998629249bd9bd27a79996f922169e0c98677b67fb1dc87f565391a01", + "rule": "S8", + "pointer": "/paths/~1v2~1{name}~1blobs~1uploads~1{uuid}/get/parameters/2/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "registry", + "sha256": "3257829998629249bd9bd27a79996f922169e0c98677b67fb1dc87f565391a01", + "rule": "S8", + "pointer": "/paths/~1v2~1{name}~1blobs~1uploads~1{uuid}/put/parameters/3/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "registry", + "sha256": "3257829998629249bd9bd27a79996f922169e0c98677b67fb1dc87f565391a01", + "rule": "S8", + "pointer": "/paths/~1v2~1{name}~1blobs~1uploads~1{uuid}/delete/parameters/2/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "registry", + "sha256": "3257829998629249bd9bd27a79996f922169e0c98677b67fb1dc87f565391a01", + "rule": "S8", + "pointer": "/paths/~1v2~1{name}~1blobs~1uploads~1{uuid}/patch/parameters/2/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/ClusterInfo/properties/DefaultAddrPool/items/example", + "messageSha256": "9bc95274e020f89cf096551f571d2b1b20576ba34e2807cf48427d0f8a2beb9a", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/ClusterInfo/properties/DefaultAddrPool/items'\n- at '': got array, want string", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/example", + "messageSha256": "916f9d2683c9767aa09352157eb2f0afb87ba2b2583fbb19a4f81f49a04854b5", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/ContainerInspectResponse/properties/SizeRootFs'\n- at '': got string, want null or integer", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/example", + "messageSha256": "64149c73b28dc8e4d3d3bd827e6c6ebf81d0b131971ce9817fd3eaaaeabe58f4", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/ContainerInspectResponse/properties/SizeRw'\n- at '': got string, want null or integer", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/ContainerPidsStats/properties/limit/example", + "messageSha256": "d8160e6d6e3afe5b712bcb5fa11355d5ec0772c4c16a9482565e42f2979e6de9", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/ContainerPidsStats/properties/limit'\n- at '': got string, want null or integer", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/ContainerSummary/properties/Created/example", + "messageSha256": "7bf13cf499c7b5ef42a80b13b0867db82742356d90f41020d75e4152ff9fce17", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/ContainerSummary/properties/Created'\n- at '': got string, want integer", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/example", + "messageSha256": "b49f4e73b2cb8e35334dedaefcd8ffd63d4d09b8e99b5ba3ea6f5e93d92b26de", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/ContainerSummary/properties/SizeRootFs'\n- at '': got string, want null or integer", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/ContainerSummary/properties/SizeRw/example", + "messageSha256": "5af0e0507f3c8984cb591ffa40fdcce301a2654b92f448c7dd01f360da6baaff", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/ContainerSummary/properties/SizeRw'\n- at '': got string, want null or integer", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/ContainerTopResponse/properties/Processes/example", + "messageSha256": "26bd8e005a9c3f1514a421a4af80eb2aa8f4b210c4c3b13b85bf4ff535a9eaa7", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/ContainerTopResponse/properties/Processes'\n- at '': got object, want array", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/ContainerTopResponse/properties/Titles/example", + "messageSha256": "a48ed34e238e9424efdb0d009cf98232eded54286a7d3dc612cfb696a1ea5ab8", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/ContainerTopResponse/properties/Titles'\n- at '': got object, want array", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/EndpointSettings/properties/GwPriority/example", + "messageSha256": "38b92c13c93358eadfc803eebe80d14571b169991fad5a98f4e847a0b21990af", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/EndpointSettings/properties/GwPriority'\n- at '': got array, want integer", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/ImageSummary/properties/Created/example", + "messageSha256": "91bea990f8e935b1a3dcf1d6db28a338b7a827887acf667d999e3ba1f2a28f43", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/ImageSummary/properties/Created'\n- at '': got string, want integer", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/Plugin/properties/Config/properties/Env/example", + "messageSha256": "5d18cef494119b966587033881216cd9b600359bf02ee1d9c849da54e7be4c6f", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/Plugin/properties/Config/properties/Env'\n- at '/0/Settable': got null, want array", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/Plugin/properties/Config/properties/Interface/properties/ProtocolScheme/example", + "messageSha256": "c7174f6c45befa2dd7f6ded6b470b5271a1ff7bfb95632af33f7a7d7899af1d5", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/Plugin/properties/Config/properties/Interface/properties/ProtocolScheme'\n- at '': value must be one of '', 'moby.plugins.http/v1'", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/SystemInfo/properties/DefaultAddressPools/items/properties/Size/example", + "messageSha256": "850cc7c6b447dab24b89f0e267bf92bb1516b6a3dae091de304eedef53459dcb", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/SystemInfo/properties/DefaultAddressPools/items/properties/Size'\n- at '': got string, want integer", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/components/schemas/Volume/properties/Status/example", + "messageSha256": "966bd2966d8ed01182f4699bc74c7fadde6e5071b233ab6b1cc3d51ed1fab4d8", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/components/schemas/Volume/properties/Status'\n- at '/hello': got string, want object", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/paths/~1containers~1create/post/requestBody/content/application~1json/schema/example", + "messageSha256": "1a76313d61bb98d8aca39c648e6e23834e567e137e016fd094da1945b23a3e44", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/paths/~1containers~1create/post/requestBody/content/application~1json/schema'\n- at '': 'allOf' failed\n - at '/Entrypoint': got string, want array", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/paths/~1containers~1create/post/requestBody/content/application~1octet-stream/schema/example", + "messageSha256": "b3eca576b51bb9107c1c9e79a06c57c4a1292297ebf00582f7d0a332ae0cc092", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/paths/~1containers~1create/post/requestBody/content/application~1octet-stream/schema'\n- at '': 'allOf' failed\n - at '/Entrypoint': got string, want array", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/paths/~1swarm~1init/post/requestBody/content/application~1json/schema/properties/DefaultAddrPool/items/example", + "messageSha256": "6b152b2e601914f269b404a34d16725f7b9144248e50c40be5e8078de8a8cc84", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/paths/~1swarm~1init/post/requestBody/content/application~1json/schema/properties/DefaultAddrPool/items'\n- at '': got array, want string", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "example", + "pointer": "/paths/~1swarm~1init/post/requestBody/content/text~1plain/schema/properties/DefaultAddrPool/items/example", + "messageSha256": "4989df95d83d09ff72671eecb7af33447d912e4fa3df9a6f5f9a66c8235e6507", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.56#/paths/~1swarm~1init/post/requestBody/content/text~1plain/schema/properties/DefaultAddrPool/items'\n- at '': got array, want string", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1auth/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S8", + "pointer": "/paths/~1build/post/parameters/21/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1build/post/requestBody/content/application~1octet-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1build~1prune/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1commit/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1commit/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1configs~1create/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1configs~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1configs~1{id}~1update/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1configs~1{id}~1update/post/requestBody/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1prune/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/200/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1archive/put/requestBody/content/application~1octet-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1archive/put/requestBody/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/200/content/application~1vnd.docker.multiplexed-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/200/content/application~1vnd.docker.raw-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1top/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1top/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1update/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1events/get/responses/200/content/application~1json-seq", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1events/get/responses/200/content/application~1jsonl", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1events/get/responses/200/content/application~1x-ndjson", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1images~1create/post/requestBody/content/application~1octet-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1images~1create/post/requestBody/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1images~1get/get/responses/200/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1images~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1images~1load/post/requestBody/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1images~1prune/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1images~1{name}~1get/get/responses/200/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1images~1{name}~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1info/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1networks~1create/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1networks~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1networks~1prune/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1networks~1{id}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1networks~1{id}~1connect/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1networks~1{id}~1disconnect/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1nodes/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1nodes/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1nodes~1{id}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1nodes~1{id}/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1plugins/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1plugins~1create/post/requestBody/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1plugins~1{name}/delete/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1plugins~1{name}/delete/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1secrets~1create/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1secrets~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1secrets~1{id}~1update/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1secrets~1{id}~1update/post/requestBody/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1services/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1services/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1services~1create/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1services~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1services~1{id}~1logs/get/responses/200/content/application~1vnd.docker.multiplexed-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1services~1{id}~1logs/get/responses/200/content/application~1vnd.docker.raw-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1services~1{id}~1update/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1swarm/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1swarm/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1swarm~1update/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1swarm~1update/post/requestBody/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1system~1df/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1system~1df/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/content/application~1vnd.docker.multiplexed-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/content/application~1vnd.docker.raw-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1version/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1volumes/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1volumes~1create/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1volumes~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1volumes~1prune/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1volumes~1{name}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.56", + "sha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "rule": "S11", + "pointer": "/paths/~1volumes~1{name}/put/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/ClusterInfo/properties/DefaultAddrPool/items/example", + "messageSha256": "3ab59217a8fa774ade99c9e91f1d1a0cdceb3675ef2fa78426d9a65ab01ac7db", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/ClusterInfo/properties/DefaultAddrPool/items'\n- at '': got array, want string", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/example", + "messageSha256": "b4c203f5ef8ff6aa38960954e1a8cff33ed1ab207faa0d37af298c171ba02451", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/ContainerInspectResponse/properties/SizeRootFs'\n- at '': got string, want null or integer", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/example", + "messageSha256": "14f2743200870a8115218cc8a194a7c260794e5c11647e398ae019d19e17bb30", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/ContainerInspectResponse/properties/SizeRw'\n- at '': got string, want null or integer", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/ContainerPidsStats/properties/limit/example", + "messageSha256": "4efc7bfee9957ad442fe9a59ce21d43a2e130ac5589a1cbb2fce62e0a296dcec", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/ContainerPidsStats/properties/limit'\n- at '': got string, want null or integer", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/ContainerSummary/properties/Created/example", + "messageSha256": "c4eb150dbfb32b540f131d454dfa265cf123a128cbdd9c3807f0ee54eb51c7fc", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/ContainerSummary/properties/Created'\n- at '': got string, want integer", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/example", + "messageSha256": "37e27daa80cc7b1730f3e0e7666d9b0038ee1ed135a452e1667ab2913209795d", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/ContainerSummary/properties/SizeRootFs'\n- at '': got string, want null or integer", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/ContainerSummary/properties/SizeRw/example", + "messageSha256": "3724d667deebdef28622f6956d52eefce93acb2de4cff69d4517fd831b2e1b7b", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/ContainerSummary/properties/SizeRw'\n- at '': got string, want null or integer", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/ContainerTopResponse/properties/Processes/example", + "messageSha256": "e94970a59e7093a760fab2668d0ced40a51957af1212d0f1a96160c8d33308f5", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/ContainerTopResponse/properties/Processes'\n- at '': got object, want array", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/ContainerTopResponse/properties/Titles/example", + "messageSha256": "02080fcbc2a4c8295040a470002a094a18866679c0993198214c9a9e7948d4d4", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/ContainerTopResponse/properties/Titles'\n- at '': got object, want array", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/EndpointSettings/properties/GwPriority/example", + "messageSha256": "44f1870ae5f70a7b75b36d42041bbd5f681716524e93182139d16a0a87201359", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/EndpointSettings/properties/GwPriority'\n- at '': got array, want integer", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/ImageSummary/properties/Created/example", + "messageSha256": "23ae742091b5ce1b4325ee9d11bc03f6e54f55eb32da670097767472e23ee6cf", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/ImageSummary/properties/Created'\n- at '': got string, want integer", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/Plugin/properties/Config/properties/Env/example", + "messageSha256": "7ff87166e98b71d682b07e6bcd7b89d5b63c8d55a7923f721a2dcafc465862fd", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/Plugin/properties/Config/properties/Env'\n- at '/0/Settable': got null, want array", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/Plugin/properties/Config/properties/Interface/properties/ProtocolScheme/example", + "messageSha256": "670a46ea9e7d3ae16912f7abce5ab3b67bdae79a00d103fcacb9bfb62f7b4a67", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/Plugin/properties/Config/properties/Interface/properties/ProtocolScheme'\n- at '': value must be one of '', 'moby.plugins.http/v1'", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/SystemInfo/properties/DefaultAddressPools/items/properties/Size/example", + "messageSha256": "11188645d7cadfaddfc27179eba9608bb3a0b562d3fb3803546a6981a85d1cd7", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/SystemInfo/properties/DefaultAddressPools/items/properties/Size'\n- at '': got string, want integer", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/components/schemas/Volume/properties/Status/example", + "messageSha256": "e142f069a9e913e426b2db5ef6d25bf5b516d9aecf4bcd4fffb9ef2f78de9350", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/components/schemas/Volume/properties/Status'\n- at '/hello': got string, want object", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/paths/~1containers~1create/post/requestBody/content/application~1json/schema/example", + "messageSha256": "c91eac9a262a0f0640a0963531fbbe958ed8819ceee7cb64a165a3d2b19a74b8", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/paths/~1containers~1create/post/requestBody/content/application~1json/schema'\n- at '': 'allOf' failed\n - at '/Entrypoint': got string, want array", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/paths/~1containers~1create/post/requestBody/content/application~1octet-stream/schema/example", + "messageSha256": "6e3869a5fda4722a01e5addd6517e1063c4948d3bf66672241c4d435b0fc1452", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/paths/~1containers~1create/post/requestBody/content/application~1octet-stream/schema'\n- at '': 'allOf' failed\n - at '/Entrypoint': got string, want array", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/paths/~1swarm~1init/post/requestBody/content/application~1json/schema/properties/DefaultAddrPool/items/example", + "messageSha256": "1b1f1f366c5288f59667c8b30793e9a1d5e5f8ba8b218ba91cd875fd8935450c", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/paths/~1swarm~1init/post/requestBody/content/application~1json/schema/properties/DefaultAddrPool/items'\n- at '': got array, want string", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "example", + "pointer": "/paths/~1swarm~1init/post/requestBody/content/text~1plain/schema/properties/DefaultAddrPool/items/example", + "messageSha256": "18e05ec2872f1ec0a464a97ca6600b10785647f6d78b57f45a8531606260e009", + "reason": "Retain the original example and its schema for review; the owner must resolve the reported mismatch without weakening the contract.", + "diagnostic": "jsonschema validation failed with 'source:engine-1.55#/paths/~1swarm~1init/post/requestBody/content/text~1plain/schema/properties/DefaultAddrPool/items'\n- at '': got array, want string", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1auth/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S8", + "pointer": "/paths/~1build/post/parameters/21/description", + "messageSha256": "4abc2b8c171a9f58475a0ee6f4a461b61b8acb5af0657064f5b4714cfa0516e7", + "reason": "Retain the source parameter definition; product documentation owner must add a meaningful description.", + "diagnostic": "Parameter description requires editorial review", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1build/post/requestBody/content/application~1octet-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1build~1prune/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1commit/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1commit/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1configs~1create/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1configs~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1configs~1{id}~1update/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1configs~1{id}~1update/post/requestBody/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1prune/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/200/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1archive/put/requestBody/content/application~1octet-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1archive/put/requestBody/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/200/content/application~1vnd.docker.multiplexed-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/200/content/application~1vnd.docker.raw-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1top/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1top/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1update/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1events/get/responses/200/content/application~1json-seq", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1events/get/responses/200/content/application~1jsonl", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1events/get/responses/200/content/application~1x-ndjson", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1images~1create/post/requestBody/content/application~1octet-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1images~1create/post/requestBody/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1images~1get/get/responses/200/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1images~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1images~1load/post/requestBody/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1images~1prune/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1images~1{name}~1get/get/responses/200/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1images~1{name}~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1info/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1networks~1create/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1networks~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1networks~1prune/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1networks~1{id}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1networks~1{id}~1connect/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1networks~1{id}~1disconnect/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1nodes/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1nodes/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1nodes~1{id}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1nodes~1{id}/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1plugins/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1plugins~1create/post/requestBody/content/application~1x-tar", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1plugins~1{name}/delete/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1plugins~1{name}/delete/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1secrets~1create/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1secrets~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1secrets~1{id}~1update/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1secrets~1{id}~1update/post/requestBody/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1services/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1services/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1services~1create/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1services~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1services~1{id}~1logs/get/responses/200/content/application~1vnd.docker.multiplexed-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1services~1{id}~1logs/get/responses/200/content/application~1vnd.docker.raw-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1services~1{id}~1update/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1swarm/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1swarm/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1swarm~1update/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1swarm~1update/post/requestBody/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1system~1df/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1system~1df/get/responses/200/content/text~1plain", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/content/application~1vnd.docker.multiplexed-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/content/application~1vnd.docker.raw-stream", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1version/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1volumes/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1volumes~1create/post/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1volumes~1create/post/responses/201/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1volumes~1prune/post/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1volumes~1{name}/get/responses/200/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + }, + { + "api": "engine-1.55", + "sha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "rule": "S11", + "pointer": "/paths/~1volumes~1{name}/put/requestBody/content/application~1json", + "messageSha256": "8a826fb6e84b59ba3811a6e54c377b89a5c7c39a2bf8ca3427729604ba518ed1", + "reason": "Retain the documented media variant; product owner must supply a verified example or transfer fixture.", + "diagnostic": "Media variant needs a reviewed example or transfer fixture", + "ownerReview": "required" + } +] diff --git a/prototypes/api-docs/hugo.yaml b/prototypes/api-docs/hugo.yaml new file mode 100644 index 000000000000..3d6ac019a8b4 --- /dev/null +++ b/prototypes/api-docs/hugo.yaml @@ -0,0 +1,31 @@ +enableGitInfo: false +params: + apiPrototype: true +module: + mounts: + - source: content + target: content + - source: layouts + target: layouts + - source: static + target: static + - source: data + target: data + - source: assets + target: assets + - source: node_modules/heroicons/24/solid + target: assets/icons + - source: node_modules/highlight.js/styles/github-dark.css + target: assets/css/highlight-github-dark.css + - source: prototypes/api-docs/preview/content + target: content + - source: prototypes/api-docs/preview/layouts + target: layouts + - source: prototypes/api-docs/preview/static + target: static + - source: prototypes/api-docs/preview/assets + target: assets + - source: tmp/api-prototype/data + target: data + - source: tmp/api-prototype/static + target: static diff --git a/prototypes/api-docs/migrations/dvp.json b/prototypes/api-docs/migrations/dvp.json new file mode 100644 index 000000000000..034699bd2ccd --- /dev/null +++ b/prototypes/api-docs/migrations/dvp.json @@ -0,0 +1,389 @@ +{ + "api": "dvp", + "source": { + "id": "dvp", + "product": "dvp", + "title": "Publisher analytics", + "source": "content/reference/api/dvp/latest.yaml", + "owner": "docker/docs (product authority to confirm)", + "manual": "/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md", + "connection": "hosted", + "auth": "Analytics calls use a bearer token. The copied source retains the legacy login flow pending product confirmation.", + "guides": [], + "sha256": "4aeacaaa1237609c3dd9cec43f9807a229ac98a0e9b837f291c02df3cf89172a" + }, + "convertedSha256": "73858f23826bf049e375df4b5670c1815b517d96c339a3c7c75b1c79a2787010", + "profile": "docker-docs-prototype-1", + "changes": [ + { + "pointer": "/jsonSchemaDialect", + "beforePresent": false, + "afterPresent": true, + "after": "https://spec.openapis.org/oas/3.1/dialect/base", + "id": "dvp-03ee85af235e", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/jsonSchemaDialect" + }, + { + "pointer": "/openapi", + "beforePresent": true, + "afterPresent": true, + "before": "3.0.0", + "after": "3.2.0", + "id": "dvp-71377657b6ae", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/openapi", + "destinationPointer": "/openapi" + }, + { + "pointer": "/components/schemas/PostUsers2FALoginErrorResponse/properties/detail/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "dvp-4a84441cce53", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/PostUsers2FALoginErrorResponse/properties/detail/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PostUsersLoginErrorResponse/properties/detail/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "dvp-209f129099a9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/PostUsersLoginErrorResponse/properties/detail/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PostUsersLoginErrorResponse/properties/login_2fa_token/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "dvp-74ca1738d170", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/PostUsersLoginErrorResponse/properties/login_2fa_token/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PostUsersLoginErrorResponse/properties/login_2fa_token/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "dvp-14920c5fdaca", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/PostUsersLoginErrorResponse/properties/login_2fa_token/type", + "destinationPointer": "/components/schemas/PostUsersLoginErrorResponse/properties/login_2fa_token/type" + }, + { + "pointer": "/components/schemas/PostUsersLoginSuccessResponse/properties/token/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "dvp-f4382a2a3adb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/PostUsersLoginSuccessResponse/properties/token/nullable", + "destinationPointer": null + }, + { + "pointer": "/tags", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "authentication", + "x-displayName": "Authentication Endpoints" + }, + { + "name": "namespaces", + "x-displayName": "Namespace data" + }, + { + "name": "discovery", + "x-displayName": "Discovery" + }, + { + "name": "responseDataFile", + "x-displayName": "ResponseDataFile", + "description": "\n" + }, + { + "name": "yearModel", + "x-displayName": "Year Data Model", + "description": "\n" + }, + { + "name": "monthModel", + "x-displayName": "Month Data Model", + "description": "\n" + }, + { + "name": "weekModel", + "x-displayName": "Week Data Model", + "description": "\n" + } + ], + "after": [ + { + "name": "authentication", + "summary": "Authentication Endpoints", + "kind": "nav", + "description": "Authentication Endpoints reference." + }, + { + "name": "namespaces", + "summary": "Namespace data", + "kind": "nav", + "description": "Namespace data reference." + }, + { + "name": "discovery", + "summary": "Discovery", + "kind": "nav", + "description": "Discovery reference." + }, + { + "name": "responseDataFile", + "description": "[ResponseDataFile](#schema-ResponseDataFile)\n", + "summary": "ResponseDataFile", + "kind": "info" + }, + { + "name": "yearModel", + "description": "[YearModel](#schema-YearModel)\n", + "summary": "Year Data Model", + "kind": "info" + }, + { + "name": "monthModel", + "description": "[MonthModel](#schema-MonthModel)\n", + "summary": "Month Data Model", + "kind": "info" + }, + { + "name": "weekModel", + "description": "[WeekModel](#schema-WeekModel)\n", + "summary": "Week Data Model", + "kind": "info" + } + ], + "id": "dvp-8d93cf25f3e7", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/tags", + "destinationPointer": "/tags" + }, + { + "pointer": "/tags", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "authentication", + "summary": "Authentication Endpoints", + "kind": "nav", + "description": "Authentication Endpoints reference." + }, + { + "name": "namespaces", + "summary": "Namespace data", + "kind": "nav", + "description": "Namespace data reference." + }, + { + "name": "discovery", + "summary": "Discovery", + "kind": "nav", + "description": "Discovery reference." + }, + { + "name": "responseDataFile", + "description": "\n", + "summary": "ResponseDataFile", + "kind": "info" + }, + { + "name": "yearModel", + "description": "\n", + "summary": "Year Data Model", + "kind": "info" + }, + { + "name": "monthModel", + "description": "\n", + "summary": "Month Data Model", + "kind": "info" + }, + { + "name": "weekModel", + "description": "\n", + "summary": "Week Data Model", + "kind": "info" + } + ], + "after": [ + { + "name": "authentication", + "summary": "Authentication Endpoints", + "kind": "nav", + "description": "Authentication Endpoints reference." + }, + { + "name": "namespaces", + "summary": "Namespace data", + "kind": "nav", + "description": "Namespace data reference." + }, + { + "name": "discovery", + "summary": "Discovery", + "kind": "nav", + "description": "Discovery reference." + }, + { + "name": "responseDataFile", + "description": "[ResponseDataFile](#schema-ResponseDataFile)\n", + "summary": "ResponseDataFile", + "kind": "info" + }, + { + "name": "yearModel", + "description": "[YearModel](#schema-YearModel)\n", + "summary": "Year Data Model", + "kind": "info" + }, + { + "name": "monthModel", + "description": "[MonthModel](#schema-MonthModel)\n", + "summary": "Month Data Model", + "kind": "info" + }, + { + "name": "weekModel", + "description": "[WeekModel](#schema-WeekModel)\n", + "summary": "Week Data Model", + "kind": "info" + } + ], + "id": "dvp-8c67a3d8bd5a", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/tags", + "destinationPointer": "/tags" + }, + { + "pointer": "/components/securitySchemes/HubAuth/type", + "beforePresent": true, + "afterPresent": true, + "before": "https", + "after": "http", + "id": "dvp-0825c9518516", + "stage": "dvp-structural-correction", + "classification": "evidence-backed correction", + "rationale": "Use the standard http bearer scheme and move invalid path security to each operation without changing the documented requirement.", + "evidence": "Existing HubAuth bearer definition and path-level security declarations", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/securitySchemes/HubAuth/type", + "destinationPointer": "/components/securitySchemes/HubAuth/type" + }, + { + "pointer": "/features.openapi", + "beforePresent": true, + "afterPresent": false, + "before": { + "schemaDefinitionsTagName": "Schemas" + }, + "id": "dvp-133a84bacaf5", + "stage": "dvp-structural-correction", + "classification": "evidence-backed correction", + "rationale": "Use the standard http bearer scheme and move invalid path security to each operation without changing the documented requirement.", + "evidence": "Existing HubAuth bearer definition and path-level security declarations", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/features.openapi", + "destinationPointer": null + }, + { + "pointer": "/paths/~1v2~1users~12fa-login/security", + "beforePresent": true, + "afterPresent": false, + "before": [], + "id": "dvp-bbb175aad84a", + "stage": "dvp-structural-correction", + "classification": "evidence-backed correction", + "rationale": "Use the standard http bearer scheme and move invalid path security to each operation without changing the documented requirement.", + "evidence": "Existing HubAuth bearer definition and path-level security declarations", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1users~12fa-login/security", + "destinationPointer": null + }, + { + "pointer": "/paths/~1v2~1users~1login/security", + "beforePresent": true, + "afterPresent": false, + "before": [], + "id": "dvp-a0ab3de3a681", + "stage": "dvp-structural-correction", + "classification": "evidence-backed correction", + "rationale": "Use the standard http bearer scheme and move invalid path security to each operation without changing the documented requirement.", + "evidence": "Existing HubAuth bearer definition and path-level security declarations", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1users~1login/security", + "destinationPointer": null + }, + { + "pointer": "/x-features-openapi", + "beforePresent": false, + "afterPresent": true, + "after": { + "schemaDefinitionsTagName": "Schemas" + }, + "id": "dvp-b66b5e3c3512", + "stage": "dvp-structural-correction", + "classification": "evidence-backed correction", + "rationale": "Use the standard http bearer scheme and move invalid path security to each operation without changing the documented requirement.", + "evidence": "Existing HubAuth bearer definition and path-level security declarations", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/x-features-openapi" + } + ] +} diff --git a/prototypes/api-docs/migrations/dvp.patch b/prototypes/api-docs/migrations/dvp.patch new file mode 100644 index 000000000000..b7aa184cbba6 --- /dev/null +++ b/prototypes/api-docs/migrations/dvp.patch @@ -0,0 +1,692 @@ +--- original/dvp.yaml ++++ converted/dvp.yaml +@@ -1,4 +1,4 @@ +-openapi: 3.0.0 ++openapi: 3.2.0 + info: + title: DVP Data API + version: 1.0.0 +@@ -6,75 +6,79 @@ + url: https://docs.docker.com/assets/images/logo-docker-main.png + href: /reference + description: | +- The Docker DVP Data API allows [Docker Verified Publishers](https://docs.docker.com/docker-hub/publish/) to view image pull analytics data for their namespaces. Analytics data can be retrieved in a CSV as raw data, or in a summary format. +- +- #### Summary data +- +- In your summary data CSV, you will have access to the data points listed below. You can request summary data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month). +- +- There are two levels of summary data: +- +- - Repository-level, a summary of every namespace and repository +- - Tag- or digest-level, a summary of every namespace, repository, and reference +- (tag or digest) +- +- The summary data formats contain the following data points: +- +- - Unique IP address count +- - Pulls by tag count +- - Pulls by digest count +- - Version check count +- +- #### Raw data +- +- In your raw data CSV you will have access to the data points listed below. You can request raw data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month). **Note:** each action is represented as a single row. +- +- - Type (industry) +- - Host (cloud provider) +- - Country (geolocation) +- - Timestamp +- - Namespace +- - Repository +- - Reference (digest is always included, tag is provided when available) +- - HTTP request method +- - Action, one of the following: +- - Pull by tag +- - Pull by digest +- - Version check +- - User-Agent +- ++ The Docker DVP Data API allows [Docker Verified Publishers](https://docs.docker.com/docker-hub/publish/) to view image pull analytics data for their namespaces. Analytics data can be retrieved in a CSV as raw data, or in a summary format. ++ ++ #### Summary data ++ ++ In your summary data CSV, you will have access to the data points listed below. You can request summary data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month). ++ ++ There are two levels of summary data: ++ ++ - Repository-level, a summary of every namespace and repository ++ - Tag- or digest-level, a summary of every namespace, repository, and reference ++ (tag or digest) ++ ++ The summary data formats contain the following data points: ++ ++ - Unique IP address count ++ - Pulls by tag count ++ - Pulls by digest count ++ - Version check count ++ ++ #### Raw data ++ ++ In your raw data CSV you will have access to the data points listed below. You can request raw data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month). **Note:** each action is represented as a single row. ++ ++ - Type (industry) ++ - Host (cloud provider) ++ - Country (geolocation) ++ - Timestamp ++ - Namespace ++ - Repository ++ - Reference (digest is always included, tag is provided when available) ++ - HTTP request method ++ - Action, one of the following: ++ - Pull by tag ++ - Pull by digest ++ - Version check ++ - User-Agent + servers: + - url: https://hub.docker.com/api/publisher/analytics/v1 + security: + - HubAuth: [] +- +-features.openapi: +- schemaDefinitionsTagName: Schemas +- + tags: + - name: authentication +- x-displayName: Authentication Endpoints ++ summary: Authentication Endpoints ++ kind: nav ++ description: Authentication Endpoints reference. + - name: namespaces +- x-displayName: Namespace data ++ summary: Namespace data ++ kind: nav ++ description: Namespace data reference. + - name: discovery +- x-displayName: Discovery ++ summary: Discovery ++ kind: nav ++ description: Discovery reference. + - name: responseDataFile +- x-displayName: ResponseDataFile + description: | +- ++ [ResponseDataFile](#schema-ResponseDataFile) ++ summary: ResponseDataFile ++ kind: info + - name: yearModel +- x-displayName: Year Data Model + description: | +- ++ [YearModel](#schema-YearModel) ++ summary: Year Data Model ++ kind: info + - name: monthModel +- x-displayName: Month Data Model + description: | +- ++ [MonthModel](#schema-MonthModel) ++ summary: Month Data Model ++ kind: info + - name: weekModel +- x-displayName: Week Data Model + description: | +- +- ++ [WeekModel](#schema-WeekModel) ++ summary: Week Data Model ++ kind: info + x-tagGroups: + - name: API + tags: +@@ -87,10 +91,8 @@ + - yearModel + - monthModel + - weekModel +- + paths: + /v2/users/login: +- security: [] + servers: + - url: https://hub.docker.com + post: +@@ -114,20 +116,19 @@ + description: Login details. + required: true + responses: +- 200: ++ "200": + description: Authentication successful + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" +- 401: ++ "401": + description: Authentication failed or second factor required + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginErrorResponse" + /v2/users/2fa-login: +- security: [] + servers: + - url: https://hub.docker.com + post: +@@ -153,53 +154,54 @@ + description: Login details. + required: true + responses: +- 200: ++ "200": + description: Authentication successful + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" +- 401: ++ "401": + description: Authentication failed or second factor required + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsers2FALoginErrorResponse" +- +- + /: + get: +- tags: [discovery] ++ tags: ++ - discovery + summary: Get namespaces and repos + description: Gets a list of your namespaces and repos which have data available. + operationId: getNamespaces + responses: +- '200': ++ "200": + description: Success + content: + application/json: + schema: +- $ref: '#/components/schemas/NamespaceData' ++ $ref: "#/components/schemas/NamespaceData" + /namespaces: + get: +- tags: [discovery] ++ tags: ++ - discovery + summary: Get user's namespaces + description: Get metadata associated with the namespaces the user has access to, including extra repos associated with the namespaces. + operationId: getUserNamespaces + responses: +- '200': ++ "200": + description: Success + content: + application/json: + schema: + type: array + items: +- $ref: '#/components/schemas/NamespaceMetadata' +- '401': ++ $ref: "#/components/schemas/NamespaceMetadata" ++ "401": + description: Authentication failed or second factor required + /namespaces/{namespace}: + get: +- tags: [discovery] ++ tags: ++ - discovery + summary: Get namespace + description: Gets metadata associated with specified namespace, including extra repos associated with the namespace. + operationId: getNamespace +@@ -211,15 +213,16 @@ + required: true + description: Namespace to fetch data for + responses: +- '200': ++ "200": + description: Success + content: + application/json: + schema: +- $ref: '#/components/schemas/NamespaceMetadata' ++ $ref: "#/components/schemas/NamespaceMetadata" + /namespaces/{namespace}/pulls: + get: +- tags: [namespaces] ++ tags: ++ - namespaces + summary: Get pull data + description: Gets pulls for the given namespace. + operationId: getNamespacePulls +@@ -233,33 +236,34 @@ + - in: query + name: timespan + schema: +- $ref: '#/components/schemas/TimespanType' ++ $ref: "#/components/schemas/TimespanType" + required: false + description: Timespan type for fetching data + - in: query + name: period + schema: +- $ref: '#/components/schemas/PeriodType' ++ $ref: "#/components/schemas/PeriodType" + required: false + description: Relative period of the period to fetch data + - in: query + name: group + schema: +- $ref: '#/components/schemas/GroupType' ++ $ref: "#/components/schemas/GroupType" + required: false + description: Field to group the data by + responses: +- '200': ++ "200": + description: Success + content: + application/json: + schema: +- $ref: '#/components/schemas/PullData' +- '404': ++ $ref: "#/components/schemas/PullData" ++ "404": + description: Not found - namespace doesn't exist or user does not have permission to access it + /namespaces/{namespace}/repos/{repo}/pulls: + get: +- tags: [namespaces] ++ tags: ++ - namespaces + summary: Get pull data + description: Gets pulls for the given repo. + operationId: getRepoPulls +@@ -279,33 +283,34 @@ + - in: query + name: timespan + schema: +- $ref: '#/components/schemas/TimespanType' ++ $ref: "#/components/schemas/TimespanType" + required: false + description: Timespan type for fetching data + - in: query + name: period + schema: +- $ref: '#/components/schemas/PeriodType' ++ $ref: "#/components/schemas/PeriodType" + required: false + description: Relative period of the period to fetch data + - in: query + name: group + schema: +- $ref: '#/components/schemas/GroupType' ++ $ref: "#/components/schemas/GroupType" + required: false + description: Field to group the data by + responses: +- '200': ++ "200": + description: Success + content: + application/json: + schema: +- $ref: '#/components/schemas/PullData' +- '404': ++ $ref: "#/components/schemas/PullData" ++ "404": + description: Not found - repo doesn't exist or user does not have permission to access it + /namespaces/{namespace}/pulls/exports/years: + get: +- tags: [namespaces] ++ tags: ++ - namespaces + summary: Get years with data + description: Gets a list of years that have data for the given namespace. + operationId: getNamespaceYears +@@ -317,15 +322,16 @@ + required: true + description: Namespace to fetch data for + responses: +- '200': ++ "200": + description: Success + content: + application/json: + schema: +- $ref: '#/components/schemas/YearData' ++ $ref: "#/components/schemas/YearData" + /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}: + get: +- tags: [namespaces] ++ tags: ++ - namespaces + summary: Get timespans with data + description: Gets a list of timespans of the given type that have data for the given namespace and year. + operationId: getNamespaceTimespans +@@ -345,19 +351,20 @@ + - in: path + name: timespantype + schema: +- $ref: '#/components/schemas/TimespanType' ++ $ref: "#/components/schemas/TimespanType" + required: true + description: Type of timespan to fetch data for + responses: +- '200': ++ "200": + description: Success + content: + application/json: + schema: +- $ref: '#/components/schemas/TimespanData' ++ $ref: "#/components/schemas/TimespanData" + /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}/{timespan}: + get: +- tags: [namespaces] ++ tags: ++ - namespaces + summary: Get namespace metadata for timespan + description: Gets info about data for the given namespace and timespan. + operationId: getNamespaceTimespanMetadata +@@ -377,7 +384,7 @@ + - in: path + name: timespantype + schema: +- $ref: '#/components/schemas/TimespanType' ++ $ref: "#/components/schemas/TimespanType" + required: true + description: Type of timespan to fetch data for + - in: path +@@ -387,17 +394,18 @@ + required: true + description: Timespan to fetch data for + responses: +- '200': ++ "200": + description: Success + content: + application/json: + schema: +- $ref: '#/components/schemas/TimespanModel' +- '404': ++ $ref: "#/components/schemas/TimespanModel" ++ "404": + description: Not Found + /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}/{timespan}/{dataview}: + get: +- tags: [namespaces] ++ tags: ++ - namespaces + summary: Get namespace data for timespan + description: Gets a list of URLs that can be used to download the pull data for the given namespace and timespan. + operationId: getNamespaceDataByTimespan +@@ -417,7 +425,7 @@ + - in: path + name: timespantype + schema: +- $ref: '#/components/schemas/TimespanType' ++ $ref: "#/components/schemas/TimespanType" + required: true + description: Type of timespan to fetch data for + - in: path +@@ -429,19 +437,20 @@ + - in: path + name: dataview + schema: +- $ref: '#/components/schemas/DataviewType' ++ $ref: "#/components/schemas/DataviewType" + required: true + description: Type of data to fetch + responses: +- '200': ++ "200": + description: Success + content: + application/json: + schema: +- $ref: '#/components/schemas/ResponseData' ++ $ref: "#/components/schemas/ResponseData" + /repos/pulls: + get: +- tags: [namespaces] ++ tags: ++ - namespaces + summary: Get pull data for multiple repos + description: Gets pull for the given repos. + operationId: getManyReposPulls +@@ -457,29 +466,28 @@ + - in: query + name: timespan + schema: +- $ref: '#/components/schemas/TimespanType' ++ $ref: "#/components/schemas/TimespanType" + required: false + description: Timespan type for fetching data + - in: query + name: period + schema: +- $ref: '#/components/schemas/PeriodType' ++ $ref: "#/components/schemas/PeriodType" + required: false + description: Relative period of the period to fetch data + - in: query + name: group + schema: +- $ref: '#/components/schemas/GroupType' ++ $ref: "#/components/schemas/GroupType" + required: false + description: Field to group the data by + responses: +- '200': ++ "200": + description: Success + content: + application/json: + schema: +- $ref: '#/components/schemas/ReposPullData' +- ++ $ref: "#/components/schemas/ReposPullData" + components: + schemas: + UsersLoginRequest: +@@ -494,9 +502,7 @@ + type: string + example: myusername + password: +- description: +- The password or personal access token (PAT) of the Docker Hub +- account to authenticate with. ++ description: The password or personal access token (PAT) of the Docker Hub account to authenticate with. + type: string + example: hunter2 + PostUsersLoginSuccessResponse: +@@ -510,7 +516,6 @@ + This token can be used in the HTTP Authorization header as a JWT to authenticate with the Docker Hub APIs. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c +- nullable: false + PostUsersLoginErrorResponse: + description: failed user login response or second factor required + type: object +@@ -521,15 +526,12 @@ + description: Description of the error. + type: string + example: Incorrect authentication credentials +- nullable: false + login_2fa_token: +- description: +- Short-lived token to be used on `/v2/users/2fa-login` to +- complete the authentication. This field is present only if 2FA is +- enabled. +- type: string ++ description: Short-lived token to be used on `/v2/users/2fa-login` to complete the authentication. This field is present only if 2FA is enabled. ++ type: ++ - string ++ - "null" + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c +- nullable: true + Users2FALoginRequest: + description: Second factor user login details + type: object +@@ -542,9 +544,7 @@ + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + code: +- description: +- The Time-based One-Time Password of the Docker Hub account to +- authenticate with. ++ description: The Time-based One-Time Password of the Docker Hub account to authenticate with. + type: string + example: 123456 + PostUsers2FALoginErrorResponse: +@@ -555,16 +555,14 @@ + description: Description of the error. + type: string + example: Incorrect authentication credentials +- nullable: false +- + ResponseData: + properties: + data: + type: array + description: | + List of urls to download the data. When the data is large, the data will be split into multiple files. +- items: +- $ref: '#/components/schemas/ResponseDataFile' ++ items: ++ $ref: "#/components/schemas/ResponseDataFile" + ResponseDataFile: + properties: + url: +@@ -589,31 +587,31 @@ + datasets: + type: array + items: +- $ref: '#/components/schemas/DatasetModel' ++ $ref: "#/components/schemas/DatasetModel" + DatasetModel: + properties: + name: +- $ref: '#/components/schemas/DatasetType' ++ $ref: "#/components/schemas/DatasetType" + views: + type: array + items: +- $ref: '#/components/schemas/DataviewType' ++ $ref: "#/components/schemas/DataviewType" + timespans: + type: array + items: +- $ref: '#/components/schemas/TimespanType' ++ $ref: "#/components/schemas/TimespanType" + PullData: + properties: + pulls: + type: array + items: +- $ref: '#/components/schemas/PullModel' ++ $ref: "#/components/schemas/PullModel" + ReposPullData: + properties: + repos: + type: object + additionalProperties: +- $ref: '#/components/schemas/PullData' ++ $ref: "#/components/schemas/PullData" + PullModel: + properties: + start: +@@ -630,13 +628,12 @@ + type: integer + country: + type: string +- + YearData: + properties: + years: + type: array + items: +- $ref: '#/components/schemas/YearModel' ++ $ref: "#/components/schemas/YearModel" + YearModel: + properties: + year: +@@ -646,7 +643,7 @@ + months: + type: array + items: +- $ref: '#/components/schemas/MonthModel' ++ $ref: "#/components/schemas/MonthModel" + MonthModel: + properties: + month: +@@ -656,37 +653,50 @@ + weeks: + type: array + items: +- $ref: '#/components/schemas/WeekModel' ++ $ref: "#/components/schemas/WeekModel" + WeekModel: + properties: + week: + type: integer + TimespanType: + type: string +- enum: [months,weeks] ++ enum: ++ - months ++ - weeks + PeriodType: + type: string +- enum: [last-2-months,last-3-months,last-6-months,last-12-months] ++ enum: ++ - last-2-months ++ - last-3-months ++ - last-6-months ++ - last-12-months + DataviewType: + type: string +- enum: [raw,summary,repo-summary,namespace-summary] ++ enum: ++ - raw ++ - summary ++ - repo-summary ++ - namespace-summary + DatasetType: + type: string +- enum: [pulls] ++ enum: ++ - pulls + TimespanModel: + oneOf: +- - $ref: '#/components/schemas/MonthModel' +- - $ref: '#/components/schemas/WeekModel' ++ - $ref: "#/components/schemas/MonthModel" ++ - $ref: "#/components/schemas/WeekModel" + TimespanData: + oneOf: +- - $ref: '#/components/schemas/MonthData' +- - $ref: '#/components/schemas/WeekData' ++ - $ref: "#/components/schemas/MonthData" ++ - $ref: "#/components/schemas/WeekData" + GroupType: + type: string +- enum: [repo,namespace] ++ enum: ++ - repo ++ - namespace + securitySchemes: + HubAuth: +- type: https ++ type: http + scheme: bearer + bearerFormat: JWT + description: | +@@ -694,3 +704,6 @@ + + This authentication documentation is duplicated from the [Hub API Authentication docs](https://docs.docker.com/reference/api/hub/latest/#tag/authentication) + x-displayName: Docker Hub Authentication ++jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base ++x-features-openapi: ++ schemaDefinitionsTagName: Schemas diff --git a/prototypes/api-docs/migrations/engine-1.55.intermediate.json b/prototypes/api-docs/migrations/engine-1.55.intermediate.json new file mode 100644 index 000000000000..0413f9521159 --- /dev/null +++ b/prototypes/api-docs/migrations/engine-1.55.intermediate.json @@ -0,0 +1,18830 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Docker Engine API", + "version": "1.55", + "x-logo": { + "url": "https://docs.docker.com/assets/images/logo-docker-main.png" + }, + "description": "The Engine API is an HTTP API served by Docker Engine. It is the API the\nDocker client uses to communicate with the Engine, so everything the Docker\nclient can do can be done with the API.\n\nMost of the client's commands map directly to API endpoints (e.g. `docker ps`\nis `GET /containers/json`). The notable exception is running containers,\nwhich consists of several API calls.\n\n# Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure\nof the API call. The body of the response will be JSON in the following\nformat:\n\n```\n{\n \"message\": \"page not found\"\n}\n```\n\n# Versioning\n\nThe API is usually changed in each release, so API calls are versioned to\nensure that clients don't break. To lock to a specific version of the API,\nyou prefix the URL with its version, for example, call `/v1.30/info` to use\nthe v1.30 version of the `/info` endpoint. If the API version specified in\nthe URL is not supported by the daemon, a HTTP `400 Bad Request` error message\nis returned.\n\nIf you omit the version-prefix, the current version of the API is used.\nFor example, calling `/info` is the same as calling `/v1.55/info`. Using the\nAPI without a version-prefix is deprecated and will be removed in a future release.\n\nEngine releases in the near future should support this version of the API,\nso your client will continue to work even if it is talking to a newer Engine.\n\nThe API uses an open schema model, which means the server may add extra properties\nto responses. Likewise, the server will ignore any extra query parameters and\nrequest body properties. When you write clients, you need to ignore additional\nproperties in responses to ensure they do not break when talking to newer\ndaemons.\n\n\n# Authentication\n\nAuthentication for registries is handled client side. The client has to send\nauthentication details to various endpoints that need to communicate with\nregistries, such as `POST /images/(name)/push`. These are sent as\n`X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5)\n(JSON) string with the following structure:\n\n```\n{\n \"username\": \"string\",\n \"password\": \"string\",\n \"serveraddress\": \"string\"\n}\n```\n\nThe `serveraddress` is a domain/IP without a protocol. Throughout this\nstructure, double quotes are required.\n\nIf you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth),\nyou can just pass this instead of credentials:\n\n```\n{\n \"identitytoken\": \"9cbaf023786cd7...\"\n}\n```\n" + }, + "tags": [ + { + "name": "Container", + "x-displayName": "Containers", + "description": "Create and manage containers.\n" + }, + { + "name": "Image", + "x-displayName": "Images" + }, + { + "name": "Network", + "x-displayName": "Networks", + "description": "Networks are user-defined networks that containers can be attached to.\nSee the [networking documentation](https://docs.docker.com/network/)\nfor more information.\n" + }, + { + "name": "Volume", + "x-displayName": "Volumes", + "description": "Create and manage persistent storage that can be attached to containers.\n" + }, + { + "name": "Exec", + "x-displayName": "Exec", + "description": "Run new commands inside running containers. Refer to the\n[command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\nfor more information.\n\nTo exec a command in a container, you first need to create an exec instance,\nthen start it. These two API endpoints are wrapped up in a single command-line\ncommand, `docker exec`.\n" + }, + { + "name": "Swarm", + "x-displayName": "Swarm", + "description": "Engines can be clustered together in a swarm. Refer to the\n[swarm mode documentation](https://docs.docker.com/engine/swarm/)\nfor more information.\n" + }, + { + "name": "Node", + "x-displayName": "Nodes", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode\nmust be enabled for these endpoints to work.\n" + }, + { + "name": "Service", + "x-displayName": "Services", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must\nbe enabled for these endpoints to work.\n" + }, + { + "name": "Task", + "x-displayName": "Tasks", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit\nof swarm. Swarm mode must be enabled for these endpoints to work.\n" + }, + { + "name": "Secret", + "x-displayName": "Secrets", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must\nbe enabled for these endpoints to work.\n" + }, + { + "name": "Config", + "x-displayName": "Configs", + "description": "Configs are application configurations that can be used by services. Swarm\nmode must be enabled for these endpoints to work.\n" + }, + { + "name": "Plugin", + "x-displayName": "Plugins" + }, + { + "name": "System", + "x-displayName": "System" + } + ], + "paths": { + "/containers/json": { + "get": { + "summary": "List containers", + "description": "Returns a list of containers. For details on the format, see the\n[inspect endpoint](#operation/ContainerInspect).\n\nNote that it uses a different, smaller representation of a container\nthan inspecting a single container. For example, the list of linked\ncontainers is not propagated .\n", + "operationId": "ContainerList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "schema": { + "type": "integer" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Container" + ] + } + }, + "/containers/create": { + "post": { + "summary": "Create a container", + "operationId": "ContainerCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match\n`/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n", + "schema": { + "type": "string", + "pattern": "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format `os[/arch[/variant]]` used for image lookup.\n\nWhen specified, the daemon checks if the requested image is present\nin the local image cache with the given OS and Architecture, and\notherwise returns a `404` status.\n\nIf the option is not set, the host's native OS and Architecture are\nused to look up the image in the image cache. However, if no platform\nis passed and the given image does exist in the local image cache,\nbut its OS or architecture does not match, the container is created\nwith the available image, and a warning is added to the `Warnings`\nfield in the response, for example;\n\n WARNING: The requested image's platform (linux/arm64/v8) does not\n match the detected host platform (linux/amd64) and no\n specific platform was requested\n", + "schema": { + "type": "string", + "default": "" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ], + "example": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + }, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "HostConfig": { + "Binds": [ + "/tmp:/tmp" + ], + "Links": [ + "redis3:redis" + ], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "NanoCpus": 500000, + "CpuPercent": 80, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuQuota": 50000, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "MemorySwappiness": 60, + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": 0, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "VolumesFrom": [ + "parent", + "other:ro" + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "GroupAdd": [ + "newgroup" + ], + "RestartPolicy": { + "Name": "", + "MaximumRetryCount": 0 + }, + "AutoRemove": true, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [ + {} + ], + "LogConfig": { + "Type": "json-file", + "Config": {} + }, + "SecurityOpt": [], + "StorageOpt": {}, + "CgroupParent": "", + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + } + } + }, + "application/octet-stream": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ], + "example": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + }, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "HostConfig": { + "Binds": [ + "/tmp:/tmp" + ], + "Links": [ + "redis3:redis" + ], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "NanoCpus": 500000, + "CpuPercent": 80, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuQuota": 50000, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "MemorySwappiness": 60, + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": 0, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "VolumesFrom": [ + "parent", + "other:ro" + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "GroupAdd": [ + "newgroup" + ], + "RestartPolicy": { + "Name": "", + "MaximumRetryCount": 0 + }, + "AutoRemove": true, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [ + {} + ], + "LogConfig": { + "Type": "json-file", + "Config": {} + }, + "SecurityOpt": [], + "StorageOpt": {}, + "CgroupParent": "", + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + } + } + } + }, + "description": "Container to create", + "required": true + }, + "responses": { + "201": { + "description": "Container created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: c2ada9df5af8" + } + } + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/json": { + "get": { + "summary": "Inspect a container", + "description": "Return low-level information about a container.", + "operationId": "ContainerInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerInspectResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/top": { + "get": { + "summary": "List processes running inside a container", + "description": "On Unix systems, this is done by running the `ps` command. This endpoint\nis not supported on Windows.\n", + "operationId": "ContainerTop", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerTopResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ContainerTopResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "schema": { + "type": "string", + "default": "-ef" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/logs": { + "get": { + "summary": "Get container logs", + "description": "Get `stdout` and `stderr` logs from a container.\n\nNote: This endpoint works only for containers with the `json-file` or\n`journald` logging driver.\n", + "operationId": "ContainerLogs", + "responses": { + "200": { + "description": "logs returned as a stream in response body.\nFor the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\nNote that unlike the attach endpoint, the logs endpoint does not\nupgrade the connection and does not set Content-Type.\n", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/changes": { + "get": { + "summary": "Get changes on a container’s filesystem", + "description": "Returns which files in a container's filesystem have been added, deleted,\nor modified. The `Kind` of modification can be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "operationId": "ContainerChanges", + "responses": { + "200": { + "description": "The list of changes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilesystemChange" + } + }, + "examples": { + "response": { + "value": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + } + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/export": { + "get": { + "summary": "Export a container", + "description": "Export the contents of a container as a tarball.", + "operationId": "ContainerExport", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/stats": { + "get": { + "summary": "Get container stats based on resource usage", + "description": "This endpoint returns a live stream of a container’s resource usage\nstatistics.\n\nThe `precpu_stats` is the CPU statistic of the *previous* read, and is\nused to calculate the CPU usage percentage. It is not an exact copy\nof the `cpu_stats` field.\n\nIf either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is\nnil then for compatibility with older daemons the length of the\ncorresponding `cpu_usage.percpu_usage` array should be used.\n\nOn a cgroup v2 host, the following fields are not set\n* `blkio_stats`: all fields other than `io_service_bytes_recursive`\n* `cpu_stats`: `cpu_usage.percpu_usage`\n* `memory_stats`: `max_usage` and `failcnt`\nAlso, `memory_stats.stats` fields are incompatible with cgroup v1.\n\nTo calculate the values shown by the `stats` command of the docker cli tool\nthe following formulas can be used:\n* used_memory = `memory_stats.usage - memory_stats.stats.cache` (cgroups v1)\n* used_memory = `memory_stats.usage - memory_stats.stats.inactive_file` (cgroups v2)\n* available_memory = `memory_stats.limit`\n* Memory usage % = `(used_memory / available_memory) * 100.0`\n* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`\n* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`\n* number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`\n* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`\n", + "operationId": "ContainerStats", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerStatsResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then\nit will disconnect.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "one-shot", + "in": "query", + "description": "Only get a single stat instead of waiting for 2 cycles. Must be used\nwith `stream=false`.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/resize": { + "post": { + "summary": "Resize a container TTY", + "description": "Resize the TTY for a container.", + "operationId": "ContainerResize", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "cannot resize container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/start": { + "post": { + "summary": "Start a container", + "operationId": "ContainerStart", + "responses": { + "204": { + "description": "no error" + }, + "304": { + "description": "container already started" + }, + "400": { + "description": "bad parameter, including an invalid checkpoint ID", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a\nsingle character `[a-Z]` or `ctrl-` where `` is one\nof: `a-z`, `@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/stop": { + "post": { + "summary": "Stop a container", + "operationId": "ContainerStop", + "responses": { + "204": { + "description": "no error" + }, + "304": { + "description": "container already stopped" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/restart": { + "post": { + "summary": "Restart a container", + "operationId": "ContainerRestart", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/kill": { + "post": { + "summary": "Kill a container", + "description": "Send a POSIX signal to a container, defaulting to killing to the\ncontainer.\n", + "operationId": "ContainerKill", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "container is not running", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string", + "default": "SIGKILL" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/update": { + "post": { + "summary": "Update a container", + "description": "Change various configuration options of a container without having to\nrecreate it.\n", + "operationId": "ContainerUpdate", + "responses": { + "200": { + "description": "The container has been updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerUpdateResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + } + } + } + ], + "example": { + "BlkioWeight": 300, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuQuota": 50000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpusetCpus": "0,1", + "CpusetMems": "0", + "Memory": 314572800, + "MemorySwap": 514288000, + "MemoryReservation": 209715200, + "RestartPolicy": { + "MaximumRetryCount": 4, + "Name": "on-failure" + } + } + } + } + }, + "required": true + }, + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/rename": { + "post": { + "summary": "Rename a container", + "operationId": "ContainerRename", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name already in use", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "required": true, + "description": "New name for the container", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/pause": { + "post": { + "summary": "Pause a container", + "description": "Use the freezer cgroup to suspend all processes in a container.\n\nTraditionally, when suspending a process the `SIGSTOP` signal is used,\nwhich is observable by the process being suspended. With the freezer\ncgroup the process is unaware, and unable to capture, that it is being\nsuspended, and subsequently resumed.\n", + "operationId": "ContainerPause", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/unpause": { + "post": { + "summary": "Unpause a container", + "description": "Resume a container which has been paused.", + "operationId": "ContainerUnpause", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/attach": { + "post": { + "summary": "Attach to a container", + "description": "Attach to a container to read its output or send it input. You can attach\nto the same container multiple times and you can reattach to containers\nthat have been detached.\n\nEither the `stream` or `logs` parameter must be `true` for this endpoint\nto do anything.\n\nSee the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/)\nfor more details.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to transport `stdin`, `stdout`,\nand `stderr` on the same socket.\n\nThis is the response from the daemon for an attach request:\n\n```\nHTTP/1.1 200 OK\nContent-Type: application/vnd.docker.raw-stream\n\n[STREAM]\n```\n\nAfter the headers and two new lines, the TCP connection can now be used\nfor raw, bidirectional communication between the client and server.\n\nTo hint potential proxies about connection hijacking, the Docker client\ncan also optionally send connection upgrade headers.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1\nUpgrade: tcp\nConnection: Upgrade\n```\n\nThe Docker daemon will respond with a `101 UPGRADED` response, and will\nsimilarly follow with the raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nContent-Type: application/vnd.docker.raw-stream\nConnection: Upgrade\nUpgrade: tcp\n\n[STREAM]\n```\n\n### Stream format\n\nWhen the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream\nand the stream over the hijacked connected is multiplexed to separate out\n`stdout` and `stderr`. The stream consists of a series of frames, each\ncontaining a header and a payload.\n\nThe header contains the information which the stream writes (`stdout` or\n`stderr`). It also contains the size of the associated frame encoded in\nthe last four bytes (`uint32`).\n\nIt is encoded on the first eight bytes like this:\n\n```go\nheader := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}\n```\n\n`STREAM_TYPE` can be:\n\n- 0: `stdin` (is written on `stdout`)\n- 1: `stdout`\n- 2: `stderr`\n\n`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size\nencoded as big endian.\n\nFollowing the header is the payload, which is the specified number of\nbytes of `STREAM_TYPE`.\n\nThe simplest way to implement this protocol is the following:\n\n1. Read 8 bytes.\n2. Choose `stdout` or `stderr` depending on the first byte.\n3. Extract the frame size from the last four bytes.\n4. Read the extracted size and output it on the correct output.\n5. Goto 1.\n\n### Stream format when using a TTY\n\nWhen the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe stream is not multiplexed. The data exchanged over the hijacked\nconnection is simply the raw data from the process PTY and client's\n`stdin`.\n", + "operationId": "ContainerAttach", + "responses": { + "101": { + "description": "no error, hints proxy about hijacking" + }, + "200": { + "description": "no error, no upgrade header found" + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you\nwant to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been\nreturned, it will seamlessly transition into streaming current\noutput.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/attach/ws": { + "get": { + "summary": "Attach to a container via a websocket", + "operationId": "ContainerAttachWebsocket", + "responses": { + "101": { + "description": "no error, hints proxy about hijacking" + }, + "200": { + "description": "no error, no upgrade header found" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,`, or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/wait": { + "post": { + "summary": "Wait for a container", + "description": "Block until a container stops, then returns the exit code.", + "operationId": "ContainerWait", + "responses": { + "200": { + "description": "The container has exit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerWaitResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition.\n\nDefaults to `not-running` if omitted or empty.\n", + "schema": { + "type": "string", + "enum": [ + "not-running", + "next-exit", + "removed" + ], + "default": "not-running" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}": { + "delete": { + "summary": "Remove a container", + "operationId": "ContainerDelete", + "responses": { + "204": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the\ncontainer before attempting removal or force remove\n" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "v", + "in": "query", + "description": "Remove anonymous volumes associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/archive": { + "head": { + "summary": "Get information about files in a container", + "description": "A response header `X-Docker-Container-Path-Stat` is returned, containing\na base64 - encoded JSON object with some filesystem header information\nabout the path.\n", + "operationId": "ContainerArchiveInfo", + "responses": { + "200": { + "description": "no error", + "headers": { + "X-Docker-Container-Path-Stat": { + "description": "A base64 - encoded JSON object with some filesystem header\ninformation about the path\n", + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + }, + "get": { + "summary": "Get an archive of a filesystem resource in a container", + "description": "Get a tar archive of a resource in the filesystem of container id.", + "operationId": "ContainerArchive", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "Bad parameter", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + }, + "put": { + "summary": "Extract an archive of files or folders to a directory in a container", + "description": "Upload a tar archive to be extracted to a path in the filesystem of container id.\n`path` parameter is asserted to be a directory. If it exists as a file, 400 error\nwill be returned with message \"not a directory\".\n", + "operationId": "PutContainerArchive", + "responses": { + "200": { + "description": "The content was extracted successfully" + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "not a directory" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Permission denied, the volume or container rootfs is marked as read-only.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such container or path does not exist inside the container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "schema": { + "type": "string" + } + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If `1`, `true`, or `True` then it will be an error if unpacking the\ngiven content would cause an existing directory to be replaced with\na non-directory and vice versa.\n", + "schema": { + "type": "string" + } + }, + { + "name": "copyUIDGID", + "in": "query", + "description": "If `1`, `true`, then it will copy UID/GID maps to the dest file or\ndir\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "The input stream must be a tar archive compressed with one of the\nfollowing algorithms: `identity` (no compression), `gzip`, `bzip2`,\nor `xz`.\n", + "required": true + }, + "tags": [ + "Container" + ] + } + }, + "/containers/prune": { + "post": { + "summary": "Delete stopped containers", + "operationId": "ContainerPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ContainerPruneResponse", + "properties": { + "ContainersDeleted": { + "description": "Container IDs that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Container" + ] + } + }, + "/images/json": { + "get": { + "summary": "List Images", + "description": "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.", + "operationId": "ImageList", + "responses": { + "200": { + "description": "Summary image data for the images matching the query", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the images list.\n\nAvailable filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n- `until=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "shared-size", + "in": "query", + "description": "Compute and show shared size as a `SharedSize` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "manifests", + "in": "query", + "description": "Include `Manifests` in the image summary.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "identity", + "in": "query", + "description": "Include `Identity` in each manifest summary. Requires `manifests=1`.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/build": { + "post": { + "summary": "Build an image", + "description": "Build an image from a tar archive with a `Dockerfile` in it.\n\nThe `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/).\n\nThe Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output.\n\nThe build is canceled if the client drops the connection by quitting or being killed.\n", + "operationId": "ImageBuild", + "parameters": [ + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "schema": { + "type": "string", + "default": "Dockerfile" + } + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "schema": { + "type": "string" + } + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "schema": { + "type": "string" + } + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "schema": { + "type": "string" + } + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "schema": { + "type": "string" + } + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "schema": { + "type": "string" + } + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "schema": { + "type": "string" + } + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "schema": { + "type": "boolean" + } + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "schema": { + "type": "string" + } + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported\nstandard values are: `bridge`, `host`, `none`, and `container:`.\nAny other value is taken as a custom network's name or ID to which this\ncontainer should connect to.\n", + "schema": { + "type": "string" + } + }, + { + "name": "Content-type", + "in": "header", + "schema": { + "type": "string", + "enum": [ + "application/x-tar" + ], + "default": "application/x-tar" + } + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "target", + "in": "query", + "description": "Target build stage", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "outputs", + "in": "query", + "description": "BuildKit output configuration in the format of a stringified JSON array of objects.\nEach object must have two top-level properties: `Type` and `Attrs`.\nThe `Type` property must be set to 'moby'.\nThe `Attrs` property is a map of attributes for the BuildKit output configuration.\nSee https://docs.docker.com/build/exporters/oci-docker/ for more information.\n\nExample:\n\n```\n[{\"Type\":\"moby\",\"Attrs\":{\"type\":\"image\",\"force-compression\":\"true\",\"compression\":\"zstd\"}}]\n```\n", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "version", + "in": "query", + "description": "Version of the builder backend to use.\n\n- `1` is the first generation classic (deprecated) builder in the Docker daemon (default)\n- `2` is [BuildKit](https://github.com/moby/buildkit)\n", + "schema": { + "type": "string", + "enum": [ + "1", + "2" + ], + "default": "1" + } + } + ], + "requestBody": { + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." + }, + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Image" + ] + } + }, + "/build/prune": { + "post": { + "summary": "Delete builder cache", + "operationId": "BuildPrune", + "parameters": [ + { + "name": "reserved-space", + "in": "query", + "description": "Amount of disk space in bytes to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "max-used-space", + "in": "query", + "description": "Maximum amount of disk space allowed to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "min-free-space", + "in": "query", + "description": "Target amount of free disk space after pruning", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "all", + "in": "query", + "description": "Remove all types of build cache", + "schema": { + "type": "boolean" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the list of build cache objects.\n\nAvailable filters:\n\n- `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time.\n- `id=`\n- `parent=`\n- `type=`\n- `description=`\n- `inuse`\n- `shared`\n- `private`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "BuildPruneResponse", + "properties": { + "CachesDeleted": { + "type": "array", + "items": { + "description": "ID of build cache object", + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Image" + ] + } + }, + "/images/create": { + "post": { + "summary": "Create an image", + "description": "Pull or import an image.", + "operationId": "ImageCreate", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "repository does not exist or no read access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. If the name includes a tag or digest, specific behavior applies:\n\n- If only `fromImage` includes a tag, that tag is used.\n- If both `fromImage` and `tag` are provided, `tag` takes precedence.\n- If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored.\n- If neither a tag nor digest is specified, all tags are pulled.\n", + "schema": { + "type": "string" + } + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "schema": { + "type": "string" + } + }, + { + "name": "message", + "in": "query", + "description": "Set commit message for imported image.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + }, + { + "name": "changes", + "in": "query", + "description": "Apply `Dockerfile` instructions to the image that is created,\nfor example: `changes=ENV DEBUG=true`.\nNote that `ENV DEBUG=true` should be URI component encoded.\n\nSupported `Dockerfile` instructions:\n`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]].\n\nWhen used in combination with the `fromImage` option, the daemon checks\nif the given image is present in the local image cache with the given\nOS and Architecture, and otherwise attempts to pull the image. If the\noption is not set, the host's native OS and Architecture are used.\nIf the given image does not exist in the local image cache, the daemon\nattempts to pull the image with the host's native OS and Architecture.\nIf the given image does exists in the local image cache, but its OS or\narchitecture does not match, a warning is produced.\n\nWhen used with the `fromSrc` option to import an image from an archive,\nthis option sets the platform information for the imported image. If\nthe option is not set, the host's native OS and Architecture are used\nfor the imported image.\n", + "schema": { + "type": "string", + "default": "" + } + } + ], + "requestBody": { + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/octet-stream": { + "schema": { + "type": "string" + } + } + }, + "description": "Image content if the value `-` has been specified in fromSrc query parameter" + }, + "tags": [ + "Image" + ] + } + }, + "/images/{name}/json": { + "get": { + "summary": "Inspect an image", + "description": "Return low-level information about an image.", + "operationId": "ImageInspect", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageInspect" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: someimage (tag: latest)" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "manifests", + "in": "query", + "description": "Include Manifests in the image summary.\n\nThe `manifests` and `platform` options are mutually exclusive, and\nan error is produced if both are set.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show inspect. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nThe `platform` and `manifests` options are mutually exclusive, and\nan error is produced if both are set.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/{name}/attestations": { + "get": { + "summary": "Get attestation statements for an image", + "description": "Return the in-toto attestation statements attached to the image for the\ngiven platform. The daemon locates the attestation manifest(s) that\nreference the matching platform image manifest, reads their statement\nlayers, and returns the verbatim statement JSON together with layer\nmetadata.\n\nIf the image has no attestations an empty array is returned.\n", + "operationId": "ImageAttestations", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AttestationStatement" + } + } + } + } + }, + "400": { + "description": "Bad parameter (e.g. malformed `platform` value)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such image, or no manifest found for the requested platform", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "501": { + "description": "The daemon's image backend does not support attestations. This\nis returned by the legacy (graphdriver) image store, which does\nnot preserve OCI image indexes.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the image variant whose\nattestations to return.\nIf omitted, the daemon's default (host) platform is used.\n\nOnly one platform value is currently accepted; passing more than\none returns an error. The parameter is declared as an array so the\nwire shape can accept multiple values in the future without an\nAPI version bump.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"amd64\"}`", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "type", + "in": "query", + "description": "In-toto predicate type URI to filter returned statements. May be\nrepeated to accept any of several predicate types. If omitted, all\nstatements are returned.\n\nExample: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document`", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "statement", + "in": "query", + "description": "Include the verbatim in-toto statement body in each returned\nentry. Defaults to false; when omitted or false, only the\ndescriptor and predicate type are returned and statement blobs\nare not read.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/{name}/history": { + "get": { + "summary": "Get the history of an image", + "description": "Return parent layers of an image.", + "operationId": "ImageHistory", + "responses": { + "200": { + "description": "List of image layers", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageHistoryResponseItem" + } + }, + "examples": { + "response": { + "value": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + } + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show the history for. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/{name}/push": { + "post": { + "summary": "Push an image", + "description": "Push an image to a registry.\n\nIf you wish to push an image on to a private registry, that image must\nalready have a tag which references the registry. For example,\n`registry.example.com/myimage:latest`.\n\nThe push is cancelled if the HTTP connection is closed.\n", + "operationId": "ImagePush", + "responses": { + "200": { + "description": "No error" + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Name of the image to push. For example, `registry.example.com/myimage`.\nThe image must be present in the local image store with the same name.\n\nThe name should be provided without tag; if a tag is provided, it\nis ignored. For example, `registry.example.com/myimage:latest` is\nconsidered equivalent to `registry.example.com/myimage`.\n\nUse the `tag` parameter to specify the tag to push.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag of the image to push. For example, `latest`. If no tag is provided,\nall tags of the given image that are present in the local image store\nare pushed.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant to push.\nIf not provided, all available variants will attempt to be pushed.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to push to the registry. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/{name}/tag": { + "post": { + "summary": "Tag an image", + "description": "Create a tag that refers to a source image.\n\nThis creates an additional reference (tag) to the source image. The tag\ncan include a different repository name and/or tag. If the repository\nor tag already exists, it will be overwritten.\n", + "operationId": "ImageTag", + "responses": { + "201": { + "description": "No error" + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/{name}": { + "delete": { + "summary": "Remove an image", + "description": "Remove an image, along with any untagged parent images that were\nreferenced by that image.\n\nImages can't be removed if they have descendant images, are being\nused by a running container or are being used by a build.\n", + "operationId": "ImageDelete", + "responses": { + "200": { + "description": "The image was deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "examples": { + "response": { + "value": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + } + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platforms", + "in": "query", + "description": "Select platform-specific content to delete.\nMultiple values are accepted.\nEach platform is a OCI platform encoded as a JSON string.\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/search": { + "get": { + "summary": "Search images", + "description": "Search for an image on Docker Hub.", + "operationId": "ImageSearch", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "title": "ImageSearchResponseItem", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "description": "Whether this repository has automated builds enabled.\n\n


\n\n> **Deprecated**: This field is deprecated and will always be \"false\".\n", + "type": "boolean", + "example": false + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "examples": { + "response": { + "value": [ + { + "description": "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!", + "is_official": true, + "is_automated": false, + "name": "alpine", + "star_count": 10093 + }, + { + "description": "Busybox base image.", + "is_official": true, + "is_automated": false, + "name": "Busybox base image.", + "star_count": 3037 + }, + { + "description": "The PostgreSQL object-relational database system provides reliability and data integrity.", + "is_official": true, + "is_automated": false, + "name": "postgres", + "star_count": 12408 + } + ] + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "schema": { + "type": "integer" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/prune": { + "post": { + "summary": "Delete unused images", + "operationId": "ImagePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ImagePruneResponse", + "properties": { + "ImagesDeleted": { + "description": "Images that were deleted", + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Image" + ] + } + }, + "/auth": { + "post": { + "summary": "Check auth configuration", + "description": "Validate credentials for a registry and, if available, get an identity\ntoken for accessing the registry without password.\n", + "operationId": "SystemAuth", + "responses": { + "200": { + "description": "An identity token was generated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + } + } + } + }, + "204": { + "description": "No error" + }, + "401": { + "description": "Auth error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthConfig" + } + } + }, + "description": "Authentication to check" + }, + "tags": [ + "System" + ] + } + }, + "/info": { + "get": { + "summary": "Get system information", + "operationId": "SystemInfo", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemInfo" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "System" + ] + } + }, + "/version": { + "get": { + "summary": "Get version", + "description": "Returns the version of Docker that is running and various information about the system that Docker is running on.", + "operationId": "SystemVersion", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemVersion" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "System" + ] + } + }, + "/_ping": { + "get": { + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPing", + "responses": { + "200": { + "description": "no error", + "headers": { + "Api-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder\n\nThe default on Linux is version \"2\" (BuildKit), but the daemon\ncan be configured to recommend version \"1\" (classic Builder).\nWindows does not yet support BuildKit for native Windows images,\nand uses \"1\" (classic builder) as a default.\n\nThis value is a recommendation as advertised by the daemon, and\nit is up to the client to choose which builder to use.\n", + "schema": { + "type": "string", + "default": "2" + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "default": "inactive" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "OK" + } + } + } + }, + "500": { + "description": "server error", + "headers": { + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + } + }, + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "System" + ] + }, + "head": { + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPingHead", + "responses": { + "200": { + "description": "no error", + "headers": { + "Api-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder", + "schema": { + "type": "string" + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "default": "inactive" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "(empty)" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "System" + ] + } + }, + "/commit": { + "post": { + "summary": "Create a new image from a container", + "operationId": "ImageCommit", + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "schema": { + "type": "string" + } + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "schema": { + "type": "string" + } + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "schema": { + "type": "string" + } + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerConfig" + } + } + }, + "description": "The container configuration" + }, + "tags": [ + "Image" + ] + } + }, + "/events": { + "get": { + "summary": "Monitor events", + "description": "Stream real-time events from the server.\n\nVarious objects within Docker report events when something happens to them.\n\nContainers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune`\n\nImages report these events: `create`, `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune`\n\nVolumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune`\n\nNetworks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune`\n\nThe Docker daemon reports these events: `reload`\n\nServices report these events: `create`, `update`, and `remove`\n\nNodes report these events: `create`, `update`, and `remove`\n\nSecrets report these events: `create`, `update`, and `remove`\n\nConfigs report these events: `create`, `update`, and `remove`\n\nThe Builder reports `prune` events\n", + "operationId": "SystemEvents", + "responses": { + "200": { + "description": "no error", + "content": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "schema": { + "type": "string" + } + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "System" + ] + } + }, + "/system/df": { + "get": { + "summary": "Get data usage information", + "operationId": "SystemDataUsage", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SystemDataUsageResponse", + "properties": { + "ImageUsage": { + "$ref": "#/components/schemas/ImagesDiskUsage" + }, + "ContainerUsage": { + "$ref": "#/components/schemas/ContainersDiskUsage" + }, + "VolumeUsage": { + "$ref": "#/components/schemas/VolumesDiskUsage" + }, + "BuildCacheUsage": { + "$ref": "#/components/schemas/BuildCacheDiskUsage" + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SystemDataUsageResponse", + "properties": { + "ImageUsage": { + "$ref": "#/components/schemas/ImagesDiskUsage" + }, + "ContainerUsage": { + "$ref": "#/components/schemas/ContainersDiskUsage" + }, + "VolumeUsage": { + "$ref": "#/components/schemas/VolumesDiskUsage" + }, + "BuildCacheUsage": { + "$ref": "#/components/schemas/BuildCacheDiskUsage" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "type", + "in": "query", + "description": "Object types, for which to compute and return data.\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "container", + "image", + "volume", + "build-cache" + ] + } + } + }, + { + "name": "verbose", + "in": "query", + "description": "Show detailed information on space usage.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "System" + ] + } + }, + "/images/{name}/get": { + "get": { + "summary": "Export an image", + "description": "Get a tarball containing all images and metadata for a repository.\n\nIf `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced.\n\n### Image tarball format\n\nAn image tarball contains [Content as defined in the OCI Image Layout Specification](https://github.com/opencontainers/image-spec/blob/v1.1.1/image-layout.md#content).\n\nAdditionally, includes the manifest.json file associated with a backwards compatible docker save format.\n\nIf the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs.\n\n```json\n{\n \"hello-world\": {\n \"latest\": \"565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1\"\n }\n}\n```\n", + "operationId": "ImageGet", + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform describing a platform which will be used\nto select a platform-specific image to be saved if the image is\nmulti-platform.\nIf not provided, the full multi-platform image will be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/get": { + "get": { + "summary": "Export several images", + "description": "Get a tarball containing all images and metadata for several image\nrepositories.\n\nFor each value of the `names` parameter: if it is a specific name and\ntag (e.g. `ubuntu:latest`), then only that image (and its parents) are\nreturned; if it is an image ID, similarly only that image (and its parents)\nare returned and there would be no names referenced in the 'repositories'\nfile for this image ID.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageGetAll", + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to be saved if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/load": { + "post": { + "summary": "Import images", + "description": "Load a set of images and tags into a repository.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageLoad", + "responses": { + "200": { + "description": "no error" + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to load if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be loaded.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "requestBody": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "Tar archive containing images" + }, + "tags": [ + "Image" + ] + } + }, + "/containers/{id}/exec": { + "post": { + "summary": "Create an exec instance", + "description": "Run a command inside a running container.", + "operationId": "ContainerExec", + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "409": { + "description": "container is paused", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecConfig", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ], + "nullable": true + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is\na single character `[a-Z]` or `ctrl-` where ``\nis one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n" + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside\nthe container. Format is one of: `user`, `user:group`, `uid`,\nor `uid:gid`.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container.\n" + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + } + } + }, + "description": "Exec configuration", + "required": true + }, + "tags": [ + "Exec" + ] + } + }, + "/exec/{id}/start": { + "post": { + "summary": "Start an exec instance", + "description": "Starts a previously set up exec instance. If detach is true, this endpoint\nreturns immediately after starting the command. Otherwise, it sets up an\ninteractive session with the command.\n", + "operationId": "ExecStart", + "responses": { + "200": { + "description": "No error" + }, + "404": { + "description": "No such exec instance", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Container is stopped or paused", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecStartConfig", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command.", + "example": false + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY.", + "example": true + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ], + "nullable": true + } + } + } + } + } + }, + "tags": [ + "Exec" + ] + } + }, + "/exec/{id}/resize": { + "post": { + "summary": "Resize an exec instance", + "description": "Resize the TTY session used by an exec instance. This endpoint only works\nif `tty` was specified as part of creating and starting the exec instance.\n", + "operationId": "ExecResize", + "responses": { + "200": { + "description": "No error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "tags": [ + "Exec" + ] + } + }, + "/exec/{id}/json": { + "get": { + "summary": "Inspect an exec instance", + "description": "Return low-level information about an exec instance.", + "operationId": "ExecInspect", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecInspectResponse", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/components/schemas/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "examples": { + "response": { + "value": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + } + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Exec" + ] + } + }, + "/volumes": { + "get": { + "summary": "List volumes", + "operationId": "VolumeList", + "responses": { + "200": { + "description": "Summary volume data that matches the query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeListResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "schema": { + "type": "string", + "format": "json" + } + } + ], + "tags": [ + "Volume" + ] + } + }, + "/volumes/create": { + "post": { + "summary": "Create a volume", + "operationId": "VolumeCreate", + "responses": { + "201": { + "description": "The volume was created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeCreateRequest" + } + } + }, + "description": "Volume configuration", + "required": true + }, + "tags": [ + "Volume" + ] + } + }, + "/volumes/{name}": { + "get": { + "summary": "Inspect a volume", + "operationId": "VolumeInspect", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "404": { + "description": "No such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Volume" + ] + }, + "put": { + "summary": "\"Update a volume. Valid only for Swarm cluster volumes\"\n", + "operationId": "VolumeUpdate", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name or ID of the volume", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the volume being updated. This is required to\navoid conflicting writes. Found in the volume's `ClusterVolume`\nfield.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Volume configuration", + "properties": { + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + } + } + } + }, + "description": "The spec of the volume to update. Currently, only Availability may\nchange. All other fields must remain unchanged.\n" + }, + "tags": [ + "Volume" + ] + }, + "delete": { + "summary": "Remove a volume", + "description": "Instruct the driver to remove the volume.", + "operationId": "VolumeDelete", + "responses": { + "204": { + "description": "The volume was removed" + }, + "404": { + "description": "No such volume or volume driver", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Volume is in use and cannot be removed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Volume" + ] + } + }, + "/volumes/prune": { + "post": { + "summary": "Delete unused volumes", + "operationId": "VolumePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n- `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "VolumePruneResponse", + "properties": { + "VolumesDeleted": { + "description": "Volumes that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Volume" + ] + } + }, + "/networks": { + "get": { + "summary": "List networks", + "description": "Returns a list of networks. For details on the format, see the\n[network inspect endpoint](#operation/NetworkInspect).\n\nNote that it uses a different, smaller representation of a network than\ninspecting a single network. For example, the list of containers attached\nto the network is not propagated in API versions 1.28 and up.\n", + "operationId": "NetworkList", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkSummary" + } + }, + "examples": { + "response": { + "value": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv4": true, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process\non the networks list.\n\nAvailable filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n networks that are not in use by a container. When set to `false`\n (or `0`), only networks that are in use by one or more\n containers are returned.\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Network" + ] + } + }, + "/networks/{id}": { + "get": { + "summary": "Inspect a network", + "operationId": "NetworkInspect", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkInspect" + } + } + } + }, + "404": { + "description": "Network not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Network" + ] + }, + "delete": { + "summary": "Remove a network", + "operationId": "NetworkDelete", + "responses": { + "204": { + "description": "No error" + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such network", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Network" + ] + } + }, + "/networks/create": { + "post": { + "summary": "Create a network", + "operationId": "NetworkCreate", + "responses": { + "201": { + "description": "Network created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden operation. This happens when trying to create a network named after a pre-defined network,\nor when trying to create an overlay network on a daemon which is not part of a Swarm cluster.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "plugin not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "NetworkCreateRequest", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "The network's name.", + "type": "string", + "example": "my_network" + }, + "Driver": { + "description": "Name of the network driver plugin to use.", + "type": "string", + "default": "bridge", + "example": "bridge" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level).\n", + "type": "string" + }, + "Internal": { + "description": "Restrict external access to the network.", + "type": "boolean" + }, + "Attachable": { + "description": "Globally scoped network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "example": true + }, + "Ingress": { + "description": "Ingress network is the network which provides the routing-mesh\nin swarm mode.\n", + "type": "boolean", + "example": false + }, + "ConfigOnly": { + "description": "Creates a config-only network. Config-only networks are placeholder\nnetworks for network configurations to be used by other networks.\nConfig-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "default": false, + "example": false + }, + "ConfigFrom": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigReference" + }, + { + "description": "Specifies the source which will provide the configuration for\nthis network. The specified network must be an existing\nconfig-only network; see ConfigOnly.\n" + } + ] + }, + "IPAM": { + "allOf": [ + { + "$ref": "#/components/schemas/IPAM" + }, + { + "description": "Optional custom IP scheme for the network." + } + ] + }, + "EnableIPv4": { + "description": "Enable IPv4 on the network.", + "type": "boolean", + "example": true + }, + "EnableIPv6": { + "description": "Enable IPv6 on the network.", + "type": "boolean", + "example": true + }, + "Options": { + "description": "Network specific options to be used by the drivers.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + } + }, + "description": "Network configuration", + "required": true + }, + "tags": [ + "Network" + ] + } + }, + "/networks/{id}/connect": { + "post": { + "summary": "Connect a container to a network", + "description": "The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container", + "operationId": "NetworkConnect", + "responses": { + "200": { + "description": "No error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Operation forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkConnectRequest" + } + } + }, + "required": true + }, + "tags": [ + "Network" + ] + } + }, + "/networks/{id}/disconnect": { + "post": { + "summary": "Disconnect a container from a network", + "operationId": "NetworkDisconnect", + "responses": { + "200": { + "description": "No error" + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkDisconnectRequest" + } + } + }, + "required": true + }, + "tags": [ + "Network" + ] + } + }, + "/networks/prune": { + "post": { + "summary": "Delete unused networks", + "operationId": "NetworkPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "NetworkPruneResponse", + "properties": { + "NetworksDeleted": { + "description": "Networks that were deleted", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Network" + ] + } + }, + "/plugins": { + "get": { + "summary": "List plugins", + "operationId": "PluginList", + "description": "Returns information about installed plugins.", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plugin" + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the plugin list.\n\nAvailable filters:\n\n- `capability=`\n- `enable=|`\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/privileges": { + "get": { + "summary": "Get plugin privileges", + "operationId": "GetPluginPrivileges", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/pull": { + "post": { + "summary": "Install a plugin", + "operationId": "PluginPull", + "description": "Pulls and installs a plugin. After the plugin is installed, it can be\nenabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable).\n", + "responses": { + "204": { + "description": "no error" + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/PluginPrivilegeArray" + }, + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/json": { + "get": { + "summary": "Inspect a plugin", + "operationId": "PluginInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}": { + "delete": { + "summary": "Remove a plugin", + "operationId": "PluginDelete", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the\nplugin is in use by a container.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/enable": { + "post": { + "summary": "Enable a plugin", + "operationId": "PluginEnable", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "schema": { + "type": "integer", + "default": 0 + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/disable": { + "post": { + "summary": "Disable a plugin", + "operationId": "PluginDisable", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force disable a plugin even if still in use.\n", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/upgrade": { + "post": { + "summary": "Upgrade a plugin", + "operationId": "PluginUpgrade", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/PluginPrivilegeArray" + }, + "tags": [ + "Plugin" + ] + } + }, + "/plugins/create": { + "post": { + "summary": "Create a plugin", + "operationId": "PluginCreate", + "responses": { + "204": { + "description": "no error" + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "Path to tar containing plugin rootfs and manifest" + }, + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/push": { + "post": { + "summary": "Push a plugin", + "operationId": "PluginPush", + "description": "Push a plugin to the registry.\n", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/set": { + "post": { + "summary": "Configure a plugin", + "operationId": "PluginSet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=1" + ] + } + } + } + }, + "responses": { + "204": { + "description": "No error" + }, + "404": { + "description": "Plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Plugin" + ] + } + }, + "/nodes": { + "get": { + "summary": "List nodes", + "operationId": "NodeList", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `node.label=`\n- `role=`(`manager`|`worker`)`\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Node" + ] + } + }, + "/nodes/{id}": { + "get": { + "summary": "Inspect a node", + "operationId": "NodeInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Node" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Node" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Node" + ] + }, + "delete": { + "summary": "Delete a node", + "operationId": "NodeDelete", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Node" + ] + } + }, + "/nodes/{id}/update": { + "post": { + "summary": "Update a node", + "operationId": "NodeUpdate", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required\nto avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + } + } + }, + "tags": [ + "Node" + ] + } + }, + "/swarm": { + "get": { + "summary": "Inspect swarm", + "operationId": "SwarmInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + } + } + }, + "404": { + "description": "no such swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Swarm" + ] + } + }, + "/swarm/init": { + "post": { + "summary": "Initialize a new swarm", + "operationId": "SwarmInit", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "description": "The node ID", + "type": "string", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + }, + "text/plain": { + "schema": { + "description": "The node ID", + "type": "string", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmInitRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "type": "integer", + "format": "uint32" + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "type": "array", + "items": { + "type": "string", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "ForceNewCluster": { + "description": "Force creation of a new swarm.", + "type": "boolean" + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "type": "integer", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SwarmInitRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "type": "integer", + "format": "uint32" + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "type": "array", + "items": { + "type": "string", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "ForceNewCluster": { + "description": "Force creation of a new swarm.", + "type": "boolean" + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "type": "integer", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + }, + "required": true + }, + "tags": [ + "Swarm" + ] + } + }, + "/swarm/join": { + "post": { + "summary": "Join an existing swarm", + "operationId": "SwarmJoin", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmJoinRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP). This is\nrequired for joining a swarm. If the port number is omitted,\nthe default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "RemoteAddrs": { + "description": "Addresses of manager nodes already participating in the swarm.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "JoinToken": { + "description": "Secret token for joining this swarm.", + "type": "string" + } + }, + "required": [ + "ListenAddr", + "RemoteAddrs", + "JoinToken" + ], + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathAddr": "192.168.1.1", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SwarmJoinRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP). This is\nrequired for joining a swarm. If the port number is omitted,\nthe default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "RemoteAddrs": { + "description": "Addresses of manager nodes already participating in the swarm.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "JoinToken": { + "description": "Secret token for joining this swarm.", + "type": "string" + } + }, + "required": [ + "ListenAddr", + "RemoteAddrs", + "JoinToken" + ], + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathAddr": "192.168.1.1", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + }, + "required": true + }, + "tags": [ + "Swarm" + ] + } + }, + "/swarm/leave": { + "post": { + "summary": "Leave a swarm", + "operationId": "SwarmLeave", + "responses": { + "200": { + "description": "no error" + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "force", + "description": "Force leave swarm, even if this is the last manager or that it will\nbreak the cluster.\n", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Swarm" + ] + } + }, + "/swarm/update": { + "post": { + "summary": "Update a swarm", + "operationId": "SwarmUpdate", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + } + }, + "required": true + }, + "tags": [ + "Swarm" + ] + } + }, + "/swarm/unlockkey": { + "get": { + "summary": "Get the unlock key", + "operationId": "SwarmUnlockkey", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "UnlockKeyResponse", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "UnlockKeyResponse", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Swarm" + ] + } + }, + "/swarm/unlock": { + "post": { + "summary": "Unlock a locked manager", + "operationId": "SwarmUnlock", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmUnlockRequest", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error" + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Swarm" + ] + } + }, + "/services": { + "get": { + "summary": "List services", + "operationId": "ServiceList", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the services list.\n\nAvailable filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "query", + "description": "Include service status, with count of running and desired tasks.\n", + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "Service" + ] + } + }, + "/services/create": { + "post": { + "summary": "Create a service", + "operationId": "ServiceCreate", + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "network is not eligible for services", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ], + "OomScoreAdj": 0 + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "required": true + }, + "tags": [ + "Service" + ] + } + }, + "/services/{id}": { + "get": { + "summary": "Inspect a service", + "operationId": "ServiceInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Service" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Service" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Service" + ] + }, + "delete": { + "summary": "Delete a service", + "operationId": "ServiceDelete", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Service" + ] + } + }, + "/services/{id}/update": { + "post": { + "summary": "Update a service", + "operationId": "ServiceUpdate", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUpdateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is\nrequired to avoid conflicting writes.\nThis version number should be the value as currently set on the\nservice *before* the update. You can find the current version by\ncalling `GET /services/{id}`\n", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the `X-Registry-Auth` header is not specified, this parameter\nindicates where to find registry authorization credentials.\n", + "schema": { + "type": "string", + "enum": [ + "spec", + "previous-spec" + ], + "default": "spec" + } + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback\nto the previous service spec. The supplied spec will be ignored in\nthis case.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ], + "OomScoreAdj": 0 + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + } + }, + "required": true + }, + "tags": [ + "Service" + ] + } + }, + "/services/{id}/logs": { + "get": { + "summary": "Get service logs", + "description": "Get `stdout` and `stderr` logs from a service. See also\n[`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "ServiceLogs", + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such service: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the service", + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "tags": [ + "Service" + ] + } + }, + "/tasks": { + "get": { + "summary": "List tasks", + "operationId": "TaskList", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Task" + }, + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ] + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the tasks list.\n\nAvailable filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Task" + ] + } + }, + "/tasks/{id}": { + "get": { + "summary": "Inspect a task", + "operationId": "TaskInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Task" + ] + } + }, + "/tasks/{id}/logs": { + "get": { + "summary": "Get task logs", + "description": "Get `stdout` and `stderr` logs from a task.\nSee also [`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "TaskLogs", + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such task: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the task", + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "tags": [ + "Task" + ] + } + }, + "/secrets": { + "get": { + "summary": "List secrets", + "operationId": "SecretList", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Secret" + }, + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the secrets list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a secret name (prefix match)\n- `names=` matches a secret name (exact match)\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Secret" + ] + } + }, + "/secrets/create": { + "post": { + "summary": "Create a secret", + "operationId": "SecretCreate", + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + } + }, + "tags": [ + "Secret" + ] + } + }, + "/secrets/{id}": { + "get": { + "summary": "Inspect a secret", + "operationId": "SecretInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Secret" + }, + "examples": { + "response": { + "value": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + } + } + } + } + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the secret", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Secret" + ] + }, + "delete": { + "summary": "Delete a secret", + "operationId": "SecretDelete", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the secret", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Secret" + ] + } + }, + "/secrets/{id}/update": { + "post": { + "summary": "Update a Secret", + "operationId": "SecretUpdate", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such secret", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "description": "The spec of the secret to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[SecretInspect endpoint](#operation/SecretInspect) response values.\n" + }, + "tags": [ + "Secret" + ] + } + }, + "/configs": { + "get": { + "summary": "List configs", + "operationId": "ConfigList", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Config" + }, + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ] + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the configs list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a config name (prefix match)\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Config" + ] + } + }, + "/configs/create": { + "post": { + "summary": "Create a config", + "operationId": "ConfigCreate", + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + } + }, + "tags": [ + "Config" + ] + } + }, + "/configs/{id}": { + "get": { + "summary": "Inspect a config", + "operationId": "ConfigInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Config" + }, + "examples": { + "response": { + "value": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + } + } + } + } + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the config", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Config" + ] + }, + "delete": { + "summary": "Delete a config", + "operationId": "ConfigDelete", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the config", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Config" + ] + } + }, + "/configs/{id}/update": { + "post": { + "summary": "Update a Config", + "operationId": "ConfigUpdate", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "description": "The spec of the config to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[ConfigInspect endpoint](#operation/ConfigInspect) response values.\n" + }, + "tags": [ + "Config" + ] + } + }, + "/distribution/{name}/json": { + "get": { + "summary": "Get image information from the registry", + "description": "Return image digest and platform information by contacting the registry.\n", + "operationId": "DistributionInspect", + "responses": { + "200": { + "description": "descriptor and platform information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DistributionInspect" + } + } + } + }, + "401": { + "description": "Failed authentication or no image found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: someimage (tag: latest)" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Distribution" + ] + } + }, + "/session": { + "post": { + "summary": "Initialize interactive session", + "description": "Start a new interactive session with a server. Session allows server to\ncall back to the client for advanced capabilities.\n\n> **Deprecated**: This endpoint is deprecated and will be removed in a future version.\n> Server should support gRPC directly on the listening socket.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to HTTP2 transport that allows\nthe client to expose gPRC services on that connection.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /session HTTP/1.1\nUpgrade: h2c\nConnection: Upgrade\n```\n\nThe Docker daemon responds with a `101 UPGRADED` response follow with\nthe raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nConnection: Upgrade\nUpgrade: h2c\n```\n", + "operationId": "Session", + "responses": { + "101": { + "description": "no error, hijacking successful" + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Session" + ] + } + } + }, + "servers": [ + { + "url": "/v1.55" + } + ], + "components": { + "requestBodies": { + "PluginPrivilegeArray": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + } + } + }, + "schemas": { + "ImageHistoryResponseItem": { + "type": "object", + "x-go-name": "HistoryResponseItem", + "title": "HistoryResponseItem", + "description": "individual image layer information in response to ImageHistory operation", + "required": [ + "Id", + "Created", + "CreatedBy", + "Tags", + "Size", + "Comment" + ], + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "Created": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "CreatedBy": { + "type": "string", + "nullable": false + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "Comment": { + "type": "string", + "nullable": false + } + } + }, + "PortSummary": { + "type": "object", + "description": "Describes a port-mapping between the container and the host.\n", + "required": [ + "PrivatePort", + "Type" + ], + "properties": { + "IP": { + "type": "string", + "format": "ip-address", + "description": "Host IP address that the container's port is mapped to", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "PrivatePort": { + "type": "integer", + "format": "uint16", + "description": "Port on the container", + "nullable": false + }, + "PublicPort": { + "type": "integer", + "format": "uint16", + "description": "Port exposed on the host" + }, + "Type": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ], + "nullable": false + } + }, + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountType": { + "description": "The mount type. Available types:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.", + "type": "string", + "enum": [ + "bind", + "cluster", + "image", + "npipe", + "tmpfs", + "volume" + ], + "example": "volume" + }, + "MountPoint": { + "type": "object", + "description": "MountPoint represents a mount point configuration inside the container.\nThis is used for reporting the mountpoints in use by a container.\n", + "properties": { + "Type": { + "description": "The mount type:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.\n", + "allOf": [ + { + "$ref": "#/components/schemas/MountType" + } + ], + "example": "volume" + }, + "Name": { + "description": "Name is the name reference to the underlying data defined by `Source`\ne.g., the volume name.\n", + "type": "string", + "example": "myvolume" + }, + "Source": { + "description": "Source location of the mount.\n\nFor volumes, this contains the storage location of the volume (within\n`/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\nthe source (host) part of the bind-mount. For `tmpfs` mount points, this\nfield is empty.\n", + "type": "string", + "example": "/var/lib/docker/volumes/myvolume/_data" + }, + "Destination": { + "description": "Destination is the path relative to the container root (`/`) where\nthe `Source` is mounted inside the container.\n", + "type": "string", + "example": "/usr/share/nginx/html/" + }, + "Driver": { + "description": "Driver is the volume driver used to create the volume (if it is a volume).\n", + "type": "string", + "example": "local" + }, + "Mode": { + "description": "Mode is a comma separated list of options supplied by the user when\ncreating the bind/volume mount.\n\nThe default is platform-specific (`\"z\"` on Linux, empty on Windows).\n", + "type": "string", + "example": "z" + }, + "RW": { + "description": "Whether the mount is mounted writable (read-write).\n", + "type": "boolean", + "example": true + }, + "Propagation": { + "description": "Propagation describes how mounts are propagated from the host into the\nmount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)\nfor details. This field is not used on Windows.\n", + "type": "string", + "example": "" + } + } + }, + "DeviceMapping": { + "type": "object", + "description": "A device mapping between the host and container", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "DeviceRequest": { + "type": "object", + "description": "A request for devices to be sent to device drivers", + "properties": { + "Driver": { + "description": "The name of the device driver to use for this request.\n\nNote that if this is specified the capabilities are ignored when\nselecting a device driver.\n", + "type": "string", + "example": "nvidia" + }, + "Count": { + "type": "integer", + "example": -1 + }, + "DeviceIDs": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ] + }, + "Capabilities": { + "description": "A list of capabilities; an OR list of AND lists of capabilities.\n\nNote that if a driver is specified the capabilities have no effect on\nselecting a driver as the driver name is used directly.\n\nNote that if no driver is specified the capabilities are used to\nselect a driver with the required capabilities.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "gpu", + "nvidia", + "compute" + ] + ] + }, + "Options": { + "description": "Driver-specific options, specified as a key/value pairs. These options\nare passed directly to the driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "description": "Device path", + "type": "string" + }, + "Rate": { + "description": "Rate", + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "description": "Container path.", + "type": "string" + }, + "Source": { + "description": "Mount source (e.g. a volume name, a host path). The source cannot be\nspecified when using `Type=tmpfs`. For `Type=bind`, the source path\nmust either exist, or the `CreateMountpoint` must be set to `true` to\ncreate the source path on the host if missing.\n\nFor `Type=npipe`, the pipe must exist prior to creating the container.", + "type": "string" + }, + "Type": { + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container.\n- `cluster` a Swarm cluster volume\n- `image` Mounts an image.\n- `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container.\n- `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n", + "allOf": [ + { + "$ref": "#/components/schemas/MountType" + } + ] + }, + "ReadOnly": { + "description": "Whether the mount should be read-only.", + "type": "boolean" + }, + "Consistency": { + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`.", + "type": "string" + }, + "BindOptions": { + "description": "Optional configuration for the `bind` type.", + "type": "object", + "properties": { + "Propagation": { + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "type": "string", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + }, + "NonRecursive": { + "description": "Disable recursive bind mount.", + "type": "boolean", + "default": false + }, + "CreateMountpoint": { + "description": "Create mount point on host if missing", + "type": "boolean", + "default": false + }, + "ReadOnlyNonRecursive": { + "description": "Make the mount non-recursively read-only, but still leave the mount recursive\n(unless NonRecursive is set to `true` in conjunction).\n\nAdded in v1.44, before that version all read-only mounts were\nnon-recursive by default. To match the previous behaviour this\nwill default to `true` for clients on versions prior to v1.44.\n", + "type": "boolean", + "default": false + }, + "ReadOnlyForceRecursive": { + "description": "Raise an error if the mount cannot be made recursively read-only.", + "type": "boolean", + "default": false + } + } + }, + "VolumeOptions": { + "description": "Optional configuration for the `volume` type.", + "type": "object", + "properties": { + "NoCopy": { + "description": "Populate volume with data from the target.", + "type": "boolean", + "default": false + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "DriverConfig": { + "description": "Map of driver specific options", + "type": "object", + "properties": { + "Name": { + "description": "Name of the driver to use to create the volume.", + "type": "string" + }, + "Options": { + "description": "key/value map of driver specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "Subpath": { + "description": "Source path inside the volume. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-volume/subdirectory" + } + } + }, + "ImageOptions": { + "description": "Optional configuration for the `image` type.", + "type": "object", + "properties": { + "Subpath": { + "description": "Source path inside the image. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-image/subdirectory" + } + } + }, + "TmpfsOptions": { + "description": "Optional configuration for the `tmpfs` type.", + "type": "object", + "properties": { + "SizeBytes": { + "description": "The size for the tmpfs mount in bytes.", + "type": "integer", + "format": "int64" + }, + "Mode": { + "description": "The permission mode for the tmpfs mount in an integer.\nThe value must not be in octal format (e.g. 755) but rather\nthe decimal representation of the octal value (e.g. 493).\n", + "type": "integer" + }, + "Options": { + "description": "The options to be passed to the tmpfs mount. An array of arrays.\nFlag options should be provided as 1-length arrays. Other types\nshould be provided as as 2-length arrays, where the first item is\nthe key and the second the value.\n", + "type": "array", + "items": { + "type": "array", + "minItems": 1, + "maxItems": 2, + "items": { + "type": "string" + } + }, + "example": [ + [ + "noexec" + ] + ] + } + } + } + } + }, + "RestartPolicy": { + "description": "The behavior to apply when the container exits. The default is not to\nrestart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is\nadded before each restart to prevent flooding the server.\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `no` Do not automatically restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "no", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up.\n" + } + } + }, + "Resources": { + "description": "A container's resources (cgroups config, ulimits, etc)", + "type": "object", + "properties": { + "CpuShares": { + "description": "An integer value representing this container's relative CPU weight\nversus other containers.\n", + "type": "integer" + }, + "Memory": { + "description": "Memory limit in bytes.", + "type": "integer", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "description": "Path to `cgroups` under which the container's `cgroup` is created. If\nthe path is not absolute, the path is considered to be relative to the\n`cgroups` path of the init process. Cgroups are created if they do not\nalready exist.\n", + "type": "string" + }, + "BlkioWeight": { + "description": "Block IO weight (relative weight).", + "type": "integer", + "minimum": 0, + "maximum": 1000 + }, + "BlkioWeightDevice": { + "description": "Block IO weight (relative device weight) in the form:\n\n```\n[{\"Path\": \"device_path\", \"Weight\": weight}]\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "type": "integer", + "minimum": 0 + } + } + } + }, + "BlkioDeviceReadBps": { + "description": "Limit read rate (bytes per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "description": "Limit write rate (bytes per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "description": "Limit read rate (IO per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "description": "Limit write rate (IO per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "CpuPeriod": { + "description": "The length of a CPU period in microseconds.", + "type": "integer", + "format": "int64" + }, + "CpuQuota": { + "description": "Microseconds of CPU time that the container can get in a CPU period.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimePeriod": { + "description": "The length of a CPU real-time period in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpusetCpus": { + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n", + "type": "string", + "example": "0-3" + }, + "CpusetMems": { + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\neffective on NUMA systems.\n", + "type": "string" + }, + "Devices": { + "description": "A list of devices to add to the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "description": "a list of cgroup rules to apply to the container", + "type": "array", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DeviceRequests": { + "description": "A list of requests for devices to be sent to device drivers.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceRequest" + } + }, + "MemoryReservation": { + "description": "Memory soft limit in bytes.", + "type": "integer", + "format": "int64" + }, + "MemorySwap": { + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited\nswap.\n", + "type": "integer", + "format": "int64" + }, + "MemorySwappiness": { + "description": "Tune a container's memory swappiness behavior. Accepts an integer\nbetween 0 and 100.\n", + "type": "integer", + "format": "int64", + "minimum": 0, + "maximum": 100 + }, + "NanoCpus": { + "description": "CPU quota in units of 10-9 CPUs.", + "type": "integer", + "format": "int64" + }, + "OomKillDisable": { + "description": "Disable OOM Killer for the container.", + "type": "boolean" + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": "boolean", + "nullable": true + }, + "PidsLimit": { + "description": "Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\nto not change.\n", + "type": "integer", + "format": "int64", + "nullable": true + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example:\n\n```\n{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + }, + "CpuCount": { + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "CpuPercent": { + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "IOMaximumIOps": { + "description": "Maximum IOps for the container system drive (Windows only)", + "type": "integer", + "format": "int64" + }, + "IOMaximumBandwidth": { + "description": "Maximum IO in bytes per second for the container system drive\n(Windows only).\n", + "type": "integer", + "format": "int64" + } + } + }, + "Limit": { + "description": "An object describing a limit on resources which can be requested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "Pids": { + "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n", + "type": "integer", + "format": "int64", + "default": 0, + "example": 100 + } + } + }, + "ResourceObject": { + "description": "An object describing the resources which can be advertised by a node and\nrequested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + } + } + }, + "GenericResources": { + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`).\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + }, + "HealthConfig": { + "description": "A test to perform to check that the container is healthy.\nHealthcheck commands should be side-effect free.\n", + "type": "object", + "properties": { + "Test": { + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n\nA non-zero exit code indicates a failed healthcheck:\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (treated as unhealthy)\n- other values: error running probe\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "Timeout": { + "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n\nIf the health check command does not complete within this timeout,\nthe check is considered failed and the health check process is\nforcibly terminated without a graceful shutdown.\n", + "type": "integer", + "format": "int64" + }, + "Retries": { + "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n", + "type": "integer" + }, + "StartPeriod": { + "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "StartInterval": { + "description": "The time to wait between checks in nanoseconds during the start period.\nIt should be 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + } + } + }, + "Health": { + "description": "Health stores information about the container's healthcheck results.\n", + "type": "object", + "properties": { + "Status": { + "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n", + "type": "string", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + }, + "Log": { + "type": "array", + "description": "Log contains the last few results (oldest first)\n", + "items": { + "$ref": "#/components/schemas/HealthcheckResult" + } + } + }, + "nullable": true + }, + "HealthcheckResult": { + "description": "HealthcheckResult stores information about a single run of a healthcheck probe\n", + "type": "object", + "properties": { + "Start": { + "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2020-01-04T10:44:24.496525531Z" + }, + "End": { + "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2020-01-04T10:45:21.364524523Z" + }, + "ExitCode": { + "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n", + "type": "integer", + "example": 0 + }, + "Output": { + "description": "Output from last check", + "type": "string" + } + }, + "nullable": true + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written", + "example": "" + }, + "LogConfig": { + "type": "object", + "description": "The logging configuration for this container", + "properties": { + "Type": { + "description": "Name of the logging driver used for the container or \"none\"\nif logging is disabled.", + "type": "string", + "enum": [ + "local", + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "description": "Driver-specific configuration options for the logging driver.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "5", + "max-size": "10m" + } + } + } + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to the container.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.\n", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ], + "nullable": true + }, + "Annotations": { + "type": "object", + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n", + "additionalProperties": { + "type": "string" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "enum": [ + "private", + "host" + ], + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n" + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string", + "format": "ip-address", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n", + "additionalProperties": { + "type": "string" + } + }, + "Tmpfs": { + "type": "object", + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n", + "additionalProperties": { + "type": "string" + } + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "type": "integer", + "format": "int64", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "minimum": 0 + }, + "Sysctls": { + "type": "object", + "description": "A list of kernel parameters (sysctls) to set in the container.\n\nThis field is omitted if not set.", + "additionalProperties": { + "type": "string" + }, + "example": { + "net.ipv4.ip_forward": "1" + }, + "nullable": true + }, + "Runtime": { + "type": "string", + "description": "Runtime to use with this container.", + "nullable": true + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/asound", + "/proc/acpi", + "/proc/kcore", + "/proc/keys", + "/proc/latency_stats", + "/proc/timer_list", + "/proc/timer_stats", + "/proc/sched_debug", + "/proc/scsi", + "/sys/firmware", + "/sys/devices/virtual/powercap" + ] + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/bus", + "/proc/fs", + "/proc/irq", + "/proc/sys", + "/proc/sysrq-trigger" + ] + } + } + } + ] + }, + "ContainerConfig": { + "description": "Configuration for a container that is portable between hosts.\n", + "type": "object", + "properties": { + "Hostname": { + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.\n", + "type": "string", + "example": "439f4e91bd1d" + }, + "Domainname": { + "description": "The domain name to use for the container.\n", + "type": "string" + }, + "User": { + "description": "Commands run as this user inside the container. If omitted, commands\nrun as the user specified in the image the container was started from.\n\nCan be either user-name or UID, and optional group-name or GID,\nseparated by a colon (`[<:group-name|GID>]`).", + "type": "string", + "example": "123:456" + }, + "AttachStdin": { + "description": "Whether to attach to `stdin`.", + "type": "boolean", + "default": false + }, + "AttachStdout": { + "description": "Whether to attach to `stdout`.", + "type": "boolean", + "default": true + }, + "AttachStderr": { + "description": "Whether to attach to `stderr`.", + "type": "boolean", + "default": true + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + }, + "nullable": true + }, + "Tty": { + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.\n", + "type": "boolean", + "default": false + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean", + "default": false + }, + "StdinOnce": { + "description": "Close `stdin` after one attached client disconnects", + "type": "boolean", + "default": false + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": "boolean", + "default": false, + "example": false, + "nullable": true + }, + "Image": { + "description": "The name (or reference) of the image to use when creating the container,\nor which was used when the container was created.\n", + "type": "string", + "example": "example-image:1.0" + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "NetworkDisabled": { + "description": "Disable networking for the container.", + "type": "boolean", + "nullable": true + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [], + "nullable": true + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": "string", + "example": "SIGTERM", + "nullable": true + }, + "StopTimeout": { + "description": "Timeout to stop a container in seconds. If omitted, the daemon-wide\ndefault (`default-stop-timeout`) is used.\n", + "type": "integer", + "nullable": true + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ], + "nullable": true + } + } + }, + "ImageConfig": { + "description": "Configuration of the image. These fields are used as defaults\nwhen starting a container from the image.\n", + "type": "object", + "properties": { + "User": { + "description": "The user that commands are run as inside the container.", + "type": "string", + "example": "web:web" + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + }, + "nullable": true + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": "boolean", + "default": false, + "example": false, + "nullable": true + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "/app/data": {}, + "/app/config": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [], + "nullable": true + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": "string", + "example": "SIGTERM", + "nullable": true + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ], + "nullable": true + } + } + }, + "NetworkingConfig": { + "description": "NetworkingConfig represents the container's networking configuration for\neach of its interfaces.\nIt is used for the networking configs specified in the `docker create`\nand `docker network connect` commands.\n", + "type": "object", + "properties": { + "EndpointsConfig": { + "description": "A mapping of network name to endpoint configuration for that network.\nThe endpoint configuration can be left empty to connect to that\nnetwork with no particular endpoint configuration.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + }, + "example": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "MacAddress": "02:42:ac:12:05:02", + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + }, + "NetworkSettings": { + "description": "NetworkSettings exposes the network settings in the API", + "type": "object", + "properties": { + "SandboxID": { + "description": "SandboxID uniquely represents a container's network stack.", + "type": "string", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "SandboxKey": { + "description": "SandboxKey is the full path of the netns handle", + "type": "string", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "Ports": { + "$ref": "#/components/schemas/PortMap" + }, + "Networks": { + "description": "Information about all networks that the container is connected to.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + } + }, + "Address": { + "description": "Address represents an IPv4 or IPv6 IP address.", + "type": "object", + "properties": { + "Addr": { + "description": "IP address.", + "type": "string" + }, + "PrefixLen": { + "description": "Mask length of the IP address.", + "type": "integer" + } + } + }, + "PortMap": { + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PortBinding" + }, + "nullable": true + }, + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ], + "2377/tcp": null + } + }, + "PortBinding": { + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n", + "type": "object", + "properties": { + "HostIp": { + "description": "Host IP address that the container's port is mapped to.", + "type": "string", + "example": "127.0.0.1", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "HostPort": { + "description": "Host port number that the container's port is mapped to.", + "type": "string", + "example": "4443" + } + } + }, + "DriverData": { + "description": "Information about the storage driver used to store the container's and\nimage's filesystem.\n", + "type": "object", + "required": [ + "Name", + "Data" + ], + "properties": { + "Name": { + "description": "Name of the storage driver.", + "type": "string", + "example": "overlay2", + "nullable": false + }, + "Data": { + "description": "Low-level storage metadata, provided as key/value pairs.\n\nThis information is driver-specific, and depends on the storage-driver\nin use, and should be used for informational purposes only.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + }, + "nullable": false + } + } + }, + "Storage": { + "description": "Information about the storage used by the container.\n", + "type": "object", + "properties": { + "RootFS": { + "allOf": [ + { + "$ref": "#/components/schemas/RootFSStorage" + }, + { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true + } + ] + } + } + }, + "RootFSStorage": { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorage", + "properties": { + "Snapshot": { + "allOf": [ + { + "$ref": "#/components/schemas/RootFSStorageSnapshot" + }, + { + "description": "Information about the snapshot used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true + } + ] + } + } + }, + "RootFSStorageSnapshot": { + "description": "Information about a snapshot backend of the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorageSnapshot", + "properties": { + "Name": { + "description": "Name of the snapshotter.", + "type": "string", + "nullable": false + } + } + }, + "FilesystemChange": { + "description": "Change in the container's filesystem.\n", + "type": "object", + "required": [ + "Path", + "Kind" + ], + "properties": { + "Path": { + "description": "Path to file or directory that has changed.\n", + "type": "string", + "nullable": false + }, + "Kind": { + "$ref": "#/components/schemas/ChangeType" + } + } + }, + "ChangeType": { + "description": "Kind of change\n\nCan be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "type": "integer", + "format": "uint8", + "enum": [ + 0, + 1, + 2 + ], + "nullable": false + }, + "ImageInspect": { + "description": "Information about an image in the local image cache.\n", + "type": "object", + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710", + "nullable": false + }, + "Descriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true + } + ] + }, + "Manifests": { + "description": "Manifests is a list of image manifests available in this image. It\nprovides a more detailed view of the platform-specific image manifests or\nother image-attached data like build attestations.\n\nOnly available if the daemon provides a multi-platform image store\nand the `manifests` option is set in the inspect request.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageManifestSummary" + }, + "nullable": true + }, + "Identity": { + "allOf": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "x-nullable": true + } + ] + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ] + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + }, + "Comment": { + "description": "Optional message that was set when committing or importing the image.\n", + "type": "string", + "example": "", + "nullable": true + }, + "Created": { + "description": "Date and time at which the image was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if present in the image,\nand omitted otherwise.\n", + "type": "string", + "format": "dateTime", + "example": "2022-02-04T21:20:12.497794809Z", + "nullable": true + }, + "Author": { + "description": "Name of the author that was specified when committing the image, or as\nspecified through MAINTAINER (deprecated) in the Dockerfile.\n", + "type": "string", + "example": "", + "nullable": true + }, + "Config": { + "$ref": "#/components/schemas/ImageConfig" + }, + "Architecture": { + "description": "Hardware CPU architecture that the image runs on.\n", + "type": "string", + "example": "arm", + "nullable": false + }, + "Variant": { + "description": "CPU architecture variant (presently ARM-only).\n", + "type": "string", + "example": "v7", + "nullable": true + }, + "Os": { + "description": "Operating System the image is built to run on.\n", + "type": "string", + "example": "linux", + "nullable": false + }, + "OsVersion": { + "description": "Operating System version the image is built to run on (especially\nfor Windows).\n", + "type": "string", + "example": "", + "nullable": true + }, + "Size": { + "description": "Total size of the image including all layers it is composed of.\n", + "type": "integer", + "format": "int64", + "example": 1239828, + "nullable": false + }, + "GraphDriver": { + "allOf": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "x-nullable": true + } + ] + }, + "RootFS": { + "description": "Information about the image's RootFS, including the layer IDs.\n", + "type": "object", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "example": "layers", + "nullable": false + }, + "Layers": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ] + } + } + }, + "Metadata": { + "description": "Additional metadata of the image in the local cache. This information\nis local to the daemon, and not part of the image itself.\n", + "type": "object", + "properties": { + "LastTagTime": { + "description": "Date and time at which the image was last tagged in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if the image was tagged locally,\nand omitted otherwise.\n", + "type": "string", + "format": "dateTime", + "example": "2022-02-28T14:40:02.623929178Z", + "nullable": true + } + } + } + } + }, + "Identity": { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "type": "object", + "properties": { + "Signature": { + "description": "Signature contains the properties of verified signatures for the image.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SignatureIdentity" + } + }, + "Pull": { + "description": "Pull contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.\nAfter successful push this images also contains the pushed repository location.", + "type": "array", + "items": { + "$ref": "#/components/schemas/PullIdentity" + } + }, + "Build": { + "description": "Build contains build reference information if image was created via build.", + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildIdentity" + } + } + } + }, + "BuildIdentity": { + "description": "BuildIdentity contains build reference information if image was created via build.", + "type": "object", + "properties": { + "Ref": { + "description": "Ref is the identifier for the build request. This reference can be used to\nlook up the build details in BuildKit history API.", + "type": "string" + }, + "CreatedAt": { + "description": "CreatedAt is the time when the build ran.", + "type": "string", + "format": "date-time" + } + } + }, + "PullIdentity": { + "description": "PullIdentity contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.", + "type": "object", + "properties": { + "Repository": { + "description": "Repository is the remote repository location the image was pulled from.", + "type": "string" + } + } + }, + "SignatureIdentity": { + "description": "SignatureIdentity contains the properties of verified signatures for the image.", + "type": "object", + "properties": { + "Name": { + "description": "Name is a textual description summarizing the type of signature.", + "type": "string" + }, + "Timestamps": { + "description": "Timestamps contains a list of verified signed timestamps for the signature.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SignatureTimestamp" + } + }, + "KnownSigner": { + "allOf": [ + { + "$ref": "#/components/schemas/KnownSignerIdentity" + }, + { + "description": "KnownSigner is an identifier for a special signer identity that is known to the implementation." + } + ] + }, + "DockerReference": { + "description": "DockerReference is the Docker image reference associated with the signature.\nThis is an optional field only present in older hashedrecord signatures.", + "type": "string" + }, + "Signer": { + "allOf": [ + { + "$ref": "#/components/schemas/SignerIdentity" + }, + { + "description": "Signer contains information about the signer certificate used to sign the image." + } + ] + }, + "SignatureType": { + "allOf": [ + { + "$ref": "#/components/schemas/SignatureType" + }, + { + "description": "SignatureType is the type of signature format. E.g. \"bundle-v0.3\" or \"hashedrecord\"." + } + ] + }, + "Error": { + "description": "Error contains error information if signature verification failed.\nOther fields will be empty in this case.", + "type": "string" + }, + "Warnings": { + "description": "Warnings contains any warnings that occurred during signature verification.\nFor example, if there was no internet connectivity and cached trust roots were used.\nWarning does not indicate a failed verification but may point to configuration issues.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SignatureTimestamp": { + "description": "SignatureTimestamp contains information about a verified signed timestamp for an image signature.", + "type": "object", + "properties": { + "Type": { + "$ref": "#/components/schemas/SignatureTimestampType" + }, + "URI": { + "type": "string" + }, + "Timestamp": { + "type": "string", + "format": "date-time" + } + } + }, + "SignatureTimestampType": { + "description": "SignatureTimestampType is the type of timestamp used in the signature.", + "type": "string", + "enum": [ + "Tlog", + "TimestampAuthority" + ] + }, + "SignatureType": { + "description": "SignatureType is the type of signature format.", + "type": "string", + "enum": [ + "bundle-v0.3", + "simplesigning-v1" + ] + }, + "KnownSignerIdentity": { + "description": "KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation.", + "type": "string", + "enum": [ + "DHI" + ] + }, + "SignerIdentity": { + "description": "SignerIdentity contains information about the signer certificate used to sign the image.", + "type": "object", + "properties": { + "CertificateIssuer": { + "type": "string", + "description": "CertificateIssuer is the certificate issuer." + }, + "SubjectAlternativeName": { + "type": "string", + "description": "SubjectAlternativeName is the certificate subject alternative name." + }, + "Issuer": { + "type": "string", + "description": "The OIDC issuer. Should match `iss` claim of ID token or, in the case of\na federated login like Dex it should match the issuer URL of the\nupstream issuer. The issuer is not set the extensions are invalid and\nwill fail to render." + }, + "BuildSignerURI": { + "type": "string", + "description": "Reference to specific build instructions that are responsible for signing." + }, + "BuildSignerDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the build instructions that is responsible for signing." + }, + "RunnerEnvironment": { + "type": "string", + "description": "Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure." + }, + "SourceRepositoryURI": { + "type": "string", + "description": "Source repository URL that the build was based on." + }, + "SourceRepositoryDigest": { + "type": "string", + "description": "Immutable reference to a specific version of the source code that the build was based upon." + }, + "SourceRepositoryRef": { + "type": "string", + "description": "Source Repository Ref that the build run was based upon." + }, + "SourceRepositoryIdentifier": { + "type": "string", + "description": "Immutable identifier for the source repository the workflow was based upon." + }, + "SourceRepositoryOwnerURI": { + "type": "string", + "description": "Source repository owner URL of the owner of the source repository that the build was based on." + }, + "SourceRepositoryOwnerIdentifier": { + "type": "string", + "description": "Immutable identifier for the owner of the source repository that the workflow was based upon." + }, + "BuildConfigURI": { + "type": "string", + "description": "Build Config URL to the top-level/initiating build instructions." + }, + "BuildConfigDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the top-level/initiating build instructions." + }, + "BuildTrigger": { + "type": "string", + "description": "Event or action that initiated the build." + }, + "RunInvocationURI": { + "type": "string", + "description": "Run Invocation URL to uniquely identify the build execution." + }, + "SourceRepositoryVisibilityAtSigning": { + "type": "string", + "description": "Source repository visibility at the time of signing the certificate." + } + } + }, + "ImageSummary": { + "type": "object", + "x-go-name": "Summary", + "required": [ + "Id", + "ParentId", + "RepoTags", + "RepoDigests", + "Created", + "Size", + "SharedSize", + "Labels", + "Containers" + ], + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710", + "nullable": false + }, + "ParentId": { + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "type": "string", + "example": "", + "nullable": false + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ], + "nullable": false + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ], + "nullable": false + }, + "Created": { + "description": "Date and time at which the image was created as a Unix timestamp\n(number of seconds since EPOCH).\n", + "type": "integer", + "example": "1644009612", + "nullable": false + }, + "Size": { + "description": "Total size of the image including all layers it is composed of.\n", + "type": "integer", + "format": "int64", + "example": 172064416, + "nullable": false + }, + "SharedSize": { + "description": "Total size of image layers that are shared between this image and other\nimages.\n\nThis size is not calculated by default. `-1` indicates that the value\nhas not been set / calculated.\n", + "type": "integer", + "format": "int64", + "example": 1239828, + "nullable": false + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "nullable": false + }, + "Containers": { + "description": "Number of containers using this image. Includes both stopped and running\ncontainers.\n\n`-1` indicates that the value has not been set / calculated.\n", + "type": "integer", + "example": 2, + "nullable": false + }, + "Manifests": { + "description": "Manifests is a list of manifests available in this image.\nIt provides a more detailed view of the platform-specific image manifests\nor other image-attached data like build attestations.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": "array", + "x-omitempty": true, + "items": { + "$ref": "#/components/schemas/ImageManifestSummary" + }, + "nullable": false + }, + "Descriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true + } + ] + } + } + }, + "ImagesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/image", + "description": "represents system data usage for image resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active images.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all images.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing unused images.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by images.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of image summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "AuthResponse": { + "description": "An identity token was generated successfully.\n", + "type": "object", + "required": [ + "Status" + ], + "properties": { + "Status": { + "description": "The status of the authentication", + "type": "string", + "example": "Login Succeeded", + "nullable": false + }, + "IdentityToken": { + "description": "An opaque token used to authenticate a user after a successful login", + "type": "string", + "example": "9cbaf023786cd7...", + "nullable": false + } + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "type": "object", + "required": [ + "Name", + "Driver", + "Mountpoint", + "Labels", + "Scope", + "Options" + ], + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "example": "tardis", + "nullable": false + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "example": "custom", + "nullable": false + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "example": "/var/lib/docker/volumes/tardis", + "nullable": false + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "description": "Date/Time the volume was created.", + "example": "2016-06-07T20:31:11.853781916Z" + }, + "Status": { + "type": "object", + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n", + "additionalProperties": { + "type": "object" + }, + "example": { + "hello": "world" + } + }, + "Labels": { + "type": "object", + "description": "User-defined key/value metadata.", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "nullable": false + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide,\nor `local` for machine level.\n", + "default": "local", + "enum": [ + "local", + "global" + ], + "example": "local", + "nullable": false + }, + "ClusterVolume": { + "$ref": "#/components/schemas/ClusterVolume" + }, + "Options": { + "type": "object", + "description": "The driver specific options used when creating the volume.\n", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "UsageData": { + "type": "object", + "x-go-name": "UsageData", + "required": [ + "Size", + "RefCount" + ], + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "properties": { + "Size": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n", + "nullable": false + }, + "RefCount": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n", + "nullable": false + } + }, + "nullable": true + } + }, + "nullable": false + }, + "VolumesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/volume", + "description": "represents system data usage for volume resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active volumes.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all volumes.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive volumes.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by volumes.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of volumes.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Volume" + } + } + } + } + }, + "VolumeCreateRequest": { + "description": "Volume configuration", + "type": "object", + "title": "VolumeConfig", + "x-go-name": "CreateRequest", + "properties": { + "Name": { + "description": "The new volume's name. If not specified, Docker generates a name.\n", + "type": "string", + "example": "tardis", + "nullable": false + }, + "Driver": { + "description": "Name of the volume driver to use.", + "type": "string", + "default": "local", + "example": "custom", + "nullable": false + }, + "DriverOpts": { + "description": "A mapping of driver options and values. These options are\npassed directly to the driver and are driver specific.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "ClusterVolumeSpec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + } + }, + "VolumeListResponse": { + "type": "object", + "title": "VolumeListResponse", + "x-go-name": "ListResponse", + "description": "Volume list response", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes.\n", + "items": { + "type": "string" + }, + "example": [] + } + } + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "description": "Name of the network.\n", + "type": "string", + "example": "my_network", + "x-omitempty": false + }, + "Id": { + "description": "ID that uniquely identifies a network on a single machine.\n", + "type": "string", + "x-go-name": "ID", + "x-omitempty": false, + "example": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99" + }, + "Created": { + "description": "Date and time at which the network was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "x-omitempty": false, + "x-go-type": { + "type": "Time", + "import": { + "package": "time" + }, + "hints": { + "nullable": false + } + }, + "example": "2016-10-19T04:33:30.360899459Z" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level)\n", + "type": "string", + "x-omitempty": false, + "example": "local" + }, + "Driver": { + "description": "The name of the driver used to create the network (e.g. `bridge`,\n`overlay`).\n", + "type": "string", + "x-omitempty": false, + "example": "overlay" + }, + "EnableIPv4": { + "description": "Whether the network was created with IPv4 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": true + }, + "EnableIPv6": { + "description": "Whether the network was created with IPv6 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": false + }, + "IPAM": { + "allOf": [ + { + "$ref": "#/components/schemas/IPAM" + }, + { + "description": "The network's IP Address Management.\n", + "x-nullable": false, + "x-omitempty": false + } + ] + }, + "Internal": { + "description": "Whether the network is created to only allow internal networking\nconnectivity.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false, + "nullable": false + }, + "Attachable": { + "description": "Whether a global / swarm scope network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false, + "nullable": false + }, + "Ingress": { + "description": "Whether the network is providing the routing-mesh for the swarm cluster.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false, + "nullable": false + }, + "ConfigFrom": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigReference" + }, + { + "x-nullable": false, + "x-omitempty": false + } + ] + }, + "ConfigOnly": { + "description": "Whether the network is a config-only network. Config-only networks are\nplaceholder networks for network configurations to be used by other\nnetworks. Config-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "nullable": false + }, + "Options": { + "description": "Network-specific options uses when creating the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "Metadata specific to the network being created.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Peers": { + "description": "List of peer nodes for an overlay network. This field is only present\nfor overlay networks, and omitted for other network types.\n", + "type": "array", + "x-omitempty": true, + "items": { + "$ref": "#/components/schemas/PeerInfo" + } + } + } + }, + "NetworkSummary": { + "description": "Network list response item", + "x-go-name": "Summary", + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Network" + } + ] + }, + "NetworkInspect": { + "description": "The body of the \"get network\" http response message.", + "x-go-name": "Inspect", + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Network" + } + ], + "properties": { + "Containers": { + "description": "Contains endpoints attached to the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "$ref": "#/components/schemas/EndpointResource" + }, + "example": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + } + }, + "Services": { + "description": "List of services using the network. This field is only present for\nswarm scope networks, and omitted for local scope networks.\n", + "type": "object", + "x-omitempty": true, + "additionalProperties": { + "x-go-type": { + "type": "ServiceInfo", + "hints": { + "nullable": false + } + } + } + }, + "Status": { + "allOf": [ + { + "$ref": "#/components/schemas/NetworkStatus" + }, + { + "description": "provides runtime information about the network such as the number of allocated IPs.\n" + } + ] + } + } + }, + "NetworkStatus": { + "description": "provides runtime information about the network such as the number of allocated IPs.\n", + "type": "object", + "x-go-name": "Status", + "properties": { + "IPAM": { + "$ref": "#/components/schemas/IPAMStatus" + } + } + }, + "ServiceInfo": { + "x-omitempty": false, + "description": "represents service parameters with the list of service's tasks\n", + "type": "object", + "properties": { + "VIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Ports": { + "type": "array", + "x-omitempty": false, + "items": { + "type": "string" + } + }, + "LocalLBIndex": { + "type": "integer", + "format": "int", + "x-omitempty": false, + "x-go-type": { + "type": "int" + } + }, + "Tasks": { + "type": "array", + "x-omitempty": false, + "items": { + "$ref": "#/components/schemas/NetworkTaskInfo" + } + } + }, + "nullable": false + }, + "NetworkTaskInfo": { + "x-omitempty": false, + "x-go-name": "Task", + "description": "carries the information about one backend task\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false + }, + "EndpointID": { + "type": "string", + "x-omitempty": false + }, + "EndpointIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Info": { + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + } + } + }, + "nullable": false + }, + "ConfigReference": { + "x-omitempty": false, + "description": "The config-only network source to provide the configuration for\nthis network.\n", + "type": "object", + "properties": { + "Network": { + "description": "The name of the config-only network that provides the network's\nconfiguration. The specified network must be an existing config-only\nnetwork. Only network names are allowed, not network IDs.\n", + "type": "string", + "x-omitempty": false, + "example": "config_only_network_01" + } + }, + "nullable": false + }, + "IPAM": { + "type": "object", + "x-omitempty": false, + "properties": { + "Driver": { + "description": "Name of the IPAM driver to use.", + "type": "string", + "default": "default", + "example": "default" + }, + "Config": { + "description": "List of IPAM configuration options, specified as a map:\n\n```\n{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/IPAMConfig" + } + }, + "Options": { + "description": "Driver-specific options, specified as a map.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + } + }, + "nullable": false + }, + "IPAMConfig": { + "type": "object", + "properties": { + "Subnet": { + "type": "string", + "example": "172.20.0.0/16" + }, + "IPRange": { + "type": "string", + "example": "172.20.10.0/24" + }, + "Gateway": { + "type": "string", + "example": "172.20.10.11" + }, + "AuxiliaryAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "IPAMStatus": { + "type": "object", + "x-omitempty": false, + "properties": { + "Subnets": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SubnetStatus" + }, + "example": { + "172.16.0.0/16": { + "IPsInUse": 3, + "DynamicIPsAvailable": 65533 + }, + "2001:db8:abcd:0012::0/96": { + "IPsInUse": 5, + "DynamicIPsAvailable": 4294967291 + } + }, + "x-go-type": { + "type": "SubnetStatuses", + "kind": "map" + } + } + }, + "nullable": false + }, + "SubnetStatus": { + "type": "object", + "x-omitempty": false, + "properties": { + "IPsInUse": { + "description": "Number of IP addresses in the subnet that are in use or reserved and are therefore unavailable for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + }, + "DynamicIPsAvailable": { + "description": "Number of IP addresses within the network's IPRange for the subnet that are available for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + } + }, + "nullable": false + }, + "EndpointResource": { + "type": "object", + "description": "contains network resources allocated and used for a container in a network.\n", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false, + "example": "container_1" + }, + "EndpointID": { + "type": "string", + "x-omitempty": false, + "example": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" + }, + "MacAddress": { + "type": "string", + "x-omitempty": false, + "example": "02:42:ac:13:00:02", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "IPv4Address": { + "type": "string", + "x-omitempty": false, + "example": "172.19.0.2/16", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "x-omitempty": false, + "example": "", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + } + } + }, + "PeerInfo": { + "description": "represents one peer of an overlay network.\n", + "type": "object", + "properties": { + "Name": { + "description": "ID of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "6869d7c1732b" + }, + "IP": { + "description": "IP-address of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "10.133.77.91", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "nullable": false + }, + "NetworkCreateResponse": { + "description": "OK response to NetworkCreate operation", + "type": "object", + "title": "NetworkCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warning" + ], + "properties": { + "Id": { + "description": "The ID of the created network.", + "type": "string", + "example": "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d", + "nullable": false + }, + "Warning": { + "description": "Warnings encountered when creating the container", + "type": "string", + "example": "", + "nullable": false + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + }, + "aux": { + "$ref": "#/components/schemas/ImageID" + } + } + }, + "BuildCache": { + "type": "object", + "description": "BuildCache contains information about a build cache record.\n", + "properties": { + "ID": { + "type": "string", + "description": "Unique ID of the build cache record.\n", + "example": "ndlpt0hhvkqcdfkputsk4cq9c" + }, + "Parents": { + "description": "List of parent build cache record IDs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "hw53o5aio51xtltp5xjp8v7fx" + ], + "nullable": true + }, + "Type": { + "type": "string", + "description": "Cache record type.\n", + "example": "regular", + "enum": [ + "internal", + "frontend", + "source.local", + "source.git.checkout", + "exec.cachemount", + "regular" + ] + }, + "Description": { + "type": "string", + "description": "Description of the build-step that produced the build cache.\n", + "example": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + }, + "InUse": { + "type": "boolean", + "description": "Indicates if the build cache is in use.\n", + "example": false + }, + "Shared": { + "type": "boolean", + "description": "Indicates if the build cache is shared.\n", + "example": true + }, + "Size": { + "description": "Amount of disk space used by the build cache (in bytes).\n", + "type": "integer", + "example": 51 + }, + "CreatedAt": { + "description": "Date and time at which the build cache was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "LastUsedAt": { + "description": "Date and time at which the build cache was last used in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z", + "nullable": true + }, + "UsageCount": { + "type": "integer", + "example": 26 + } + } + }, + "BuildCacheDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/build", + "description": "represents system data usage for build cache resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active build cache records.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all build cache records.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive build cache records.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by build cache records.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of build cache records.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "CacheRecord" + } + } + } + } + }, + "ImageID": { + "type": "object", + "description": "Image ID or Digest", + "properties": { + "ID": { + "type": "string" + } + }, + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "DeviceInfo": { + "type": "object", + "description": "DeviceInfo represents a device that can be used by a container.\n", + "properties": { + "Source": { + "type": "string", + "example": "cdi", + "description": "The origin device driver.\n" + }, + "ID": { + "type": "string", + "example": "vendor.com/gpu=0", + "description": "The unique identifier for the device within its source driver.\nFor CDI devices, this would be an FQDN like \"vendor.com/gpu=0\".\n" + } + } + }, + "NRIInfo": { + "description": "Information about the Node Resource Interface (NRI).\n\nThis field is only present if NRI is enabled.\n", + "type": "object", + "properties": { + "Info": { + "description": "Information about NRI, provided as \"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "plugin-path", + "/opt/docker/nri/plugins" + ] + ] + } + }, + "nullable": true + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "description": "Represents an error.", + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "description": "The error message.", + "type": "string", + "nullable": false + } + }, + "example": { + "message": "Something went wrong." + } + }, + "IDResponse": { + "description": "Response to an API call that returns just an Id", + "type": "object", + "x-go-name": "IDResponse", + "required": [ + "Id" + ], + "properties": { + "Id": { + "description": "The id of the newly created object.", + "type": "string", + "nullable": false + } + } + }, + "NetworkConnectRequest": { + "description": "NetworkConnectRequest represents the data to be used to connect a container to a network.\n", + "type": "object", + "x-go-name": "ConnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network.", + "example": "3613f73ba0e4", + "nullable": false + }, + "EndpointConfig": { + "allOf": [ + { + "$ref": "#/components/schemas/EndpointSettings" + }, + { + "x-nullable": true + } + ] + } + } + }, + "NetworkDisconnectRequest": { + "description": "NetworkDisconnectRequest represents the data to be used to disconnect a container from a network.\n", + "type": "object", + "x-go-name": "DisconnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network.", + "example": "3613f73ba0e4", + "nullable": false + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network.", + "default": false, + "x-omitempty": false, + "example": false, + "nullable": false + } + } + }, + "EndpointSettings": { + "description": "Configuration for a network endpoint.", + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/components/schemas/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "container_1", + "container_2" + ] + }, + "MacAddress": { + "description": "MAC address for the endpoint on this network. The network driver might ignore this parameter.\n", + "type": "string", + "example": "02:42:ac:11:00:04", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "server_x", + "server_y" + ] + }, + "DriverOpts": { + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "nullable": true + }, + "GwPriority": { + "description": "This property determines which endpoint will provide the default\ngateway for a container. The endpoint with the highest priority will\nbe used. If multiple endpoints have the same priority, endpoints are\nlexicographically sorted based on their network name, and the one\nthat sorts first is picked.\n", + "type": "integer", + "format": "int64", + "example": [ + 10 + ] + }, + "NetworkID": { + "description": "Unique ID of the network.\n", + "type": "string", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "type": "string", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "description": "Gateway address for this network.\n", + "type": "string", + "example": "172.17.0.1" + }, + "IPAddress": { + "description": "IPv4 address.\n", + "type": "string", + "example": "172.17.0.4", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPPrefixLen": { + "description": "Mask length of the IPv4 address.\n", + "type": "integer", + "example": 16 + }, + "IPv6Gateway": { + "description": "IPv6 gateway address.\n", + "type": "string", + "example": "2001:db8:2::100", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6Address": { + "description": "Global IPv6 address.\n", + "type": "string", + "example": "2001:db8::5689", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6PrefixLen": { + "description": "Mask length of the global IPv6 address.\n", + "type": "integer", + "format": "int64", + "example": 64 + }, + "DNSNames": { + "description": "List of all DNS names an endpoint has on a specific network. This\nlist is based on the container name, network aliases, container short\nID, and hostname.\n\nThese DNS names are non-fully qualified but can contain several dots.\nYou can get fully qualified DNS names by appending `.`.\nFor instance, if container name is `my.ctr` and the network is named\n`testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be\n`my.ctr.testnet`.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "foobar", + "server_x", + "server_y", + "my.ctr" + ] + } + } + }, + "EndpointIPAMConfig": { + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "type": "object", + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "LinkLocalIPs": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "example": [ + "169.254.34.68", + "fe80::3468" + ] + } + }, + "nullable": true + }, + "PluginMount": { + "type": "object", + "x-go-name": "Mount", + "required": [ + "Name", + "Description", + "Settable", + "Source", + "Destination", + "Type", + "Options" + ], + "properties": { + "Name": { + "type": "string", + "example": "some-mount", + "nullable": false + }, + "Description": { + "type": "string", + "example": "This is a mount that's used by the plugin.", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "example": "/mnt/state", + "nullable": false + }, + "Type": { + "type": "string", + "example": "bind", + "nullable": false + }, + "Options": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "rbind", + "rw" + ] + } + }, + "nullable": false + }, + "PluginDevice": { + "type": "object", + "x-go-name": "Device", + "required": [ + "Name", + "Description", + "Settable", + "Path" + ], + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + }, + "nullable": false + }, + "PluginEnv": { + "type": "object", + "x-go-name": "Env", + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + }, + "nullable": false + }, + "PluginPrivilege": { + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n", + "type": "object", + "x-go-name": "Privilege", + "properties": { + "Name": { + "type": "string", + "example": "network" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "host" + ] + } + } + }, + "Plugin": { + "description": "A plugin for the Engine API", + "type": "object", + "x-go-name": "Plugin", + "required": [ + "Settings", + "Enabled", + "Config", + "Name" + ], + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "example": "tiborvass/sample-volume-plugin", + "nullable": false + }, + "Enabled": { + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "type": "boolean", + "example": true, + "nullable": false + }, + "Settings": { + "description": "user-configurable settings for the plugin.", + "type": "object", + "x-go-name": "Settings", + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=0" + ] + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "nullable": false + }, + "PluginReference": { + "description": "plugin remote reference used to push/pull the plugin", + "type": "string", + "x-go-name": "PluginReference", + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest", + "nullable": false + }, + "Config": { + "description": "The config of a plugin.", + "type": "object", + "x-go-name": "Config", + "required": [ + "Description", + "Documentation", + "Interface", + "Entrypoint", + "WorkDir", + "Network", + "Linux", + "PidHost", + "PropagatedMount", + "IpcHost", + "Mounts", + "Env", + "Args" + ], + "properties": { + "Description": { + "type": "string", + "example": "A sample volume plugin for Docker", + "nullable": false + }, + "Documentation": { + "type": "string", + "example": "https://docs.docker.com/engine/extend/plugins/", + "nullable": false + }, + "Interface": { + "description": "The interface between Docker and the plugin", + "type": "object", + "x-go-name": "Interface", + "required": [ + "Types", + "Socket" + ], + "properties": { + "Types": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "CapabilityID" + } + }, + "example": [ + "docker.volumedriver/1.0" + ] + }, + "Socket": { + "type": "string", + "example": "plugins.sock", + "nullable": false + }, + "ProtocolScheme": { + "type": "string", + "example": "some.protocol/v1.0", + "description": "Protocol to use for clients connecting to the plugin.", + "enum": [ + "", + "moby.plugins.http/v1" + ] + } + }, + "nullable": false + }, + "Entrypoint": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ] + }, + "WorkDir": { + "type": "string", + "example": "/bin/", + "nullable": false + }, + "User": { + "type": "object", + "x-go-name": "User", + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + }, + "nullable": false + }, + "Network": { + "type": "object", + "x-go-name": "NetworkConfig", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "example": "host", + "nullable": false + } + }, + "nullable": false + }, + "Linux": { + "type": "object", + "x-go-name": "LinuxConfig", + "required": [ + "Capabilities", + "AllowAllDevices", + "Devices" + ], + "properties": { + "Capabilities": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ] + }, + "AllowAllDevices": { + "type": "boolean", + "example": false, + "nullable": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "nullable": false + }, + "PropagatedMount": { + "type": "string", + "example": "/mnt/volumes", + "nullable": false + }, + "IpcHost": { + "type": "boolean", + "example": false, + "nullable": false + }, + "PidHost": { + "type": "boolean", + "example": false, + "nullable": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginEnv" + }, + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Settable": null, + "Value": "0" + } + ] + }, + "Args": { + "type": "object", + "x-go-name": "Args", + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "type": "string", + "example": "args", + "nullable": false + }, + "Description": { + "type": "string", + "example": "command line arguments", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "nullable": false + }, + "rootfs": { + "type": "object", + "x-go-name": "RootFS", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ] + } + } + } + }, + "nullable": false + } + } + }, + "ObjectVersion": { + "description": "The version number of the object such as node, service, etc. This is needed\nto avoid conflicting writes. The client must send the version number along\nwith the modified specification when updating these objects.\n\nThis approach ensures safe concurrency and determinism in that the change\non the object may not be applied if the version number has changed from the\nlast read. In other words, if two update requests specify the same base\nversion, only one of the requests can succeed. As a result, two separate\nupdate requests that happen at the same time will not unintentionally\noverwrite each other.\n", + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + } + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "description": "Name for the node.", + "type": "string", + "example": "my-node" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Role": { + "description": "Role of the node.", + "type": "string", + "enum": [ + "worker", + "manager" + ], + "example": "manager" + }, + "Availability": { + "description": "Availability of the node.", + "type": "string", + "enum": [ + "active", + "pause", + "drain" + ], + "example": "active" + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/NodeSpec" + }, + "Description": { + "$ref": "#/components/schemas/NodeDescription" + }, + "Status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/components/schemas/ManagerStatus" + } + } + }, + "NodeDescription": { + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n", + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/components/schemas/Platform" + }, + "Resources": { + "$ref": "#/components/schemas/ResourceObject" + }, + "Engine": { + "$ref": "#/components/schemas/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + } + } + }, + "Platform": { + "description": "Platform represents the platform (Arch/OS).\n", + "type": "object", + "properties": { + "Architecture": { + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "type": "string", + "example": "x86_64" + }, + "OS": { + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "type": "string", + "example": "linux" + } + } + }, + "EngineDescription": { + "description": "EngineDescription provides information about an engine.", + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ] + } + } + }, + "TLSInfo": { + "description": "Information about the issuer of leaf TLS certificates and the trusted root\nCA certificate.\n", + "type": "object", + "properties": { + "TrustRoot": { + "description": "The root CA certificate(s) that are used to validate leaf TLS\ncertificates.\n", + "type": "string" + }, + "CertIssuerSubject": { + "description": "The base64-url-safe-encoded raw subject bytes of the issuer.", + "type": "string" + }, + "CertIssuerPublicKey": { + "description": "The base64-url-safe-encoded raw public key bytes of the issuer.\n", + "type": "string" + } + }, + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n", + "type": "object", + "properties": { + "State": { + "$ref": "#/components/schemas/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "description": "IP address of the node.", + "type": "string", + "example": "172.17.0.2" + } + } + }, + "NodeState": { + "description": "NodeState represents the state of a node.", + "type": "string", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ], + "example": "ready" + }, + "ManagerStatus": { + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "type": "object", + "properties": { + "Leader": { + "type": "boolean", + "default": false, + "example": true + }, + "Reachability": { + "$ref": "#/components/schemas/Reachability" + }, + "Addr": { + "description": "The IP address and port at which the manager is reachable.\n", + "type": "string", + "example": "10.0.0.46:2377" + } + }, + "nullable": true + }, + "Reachability": { + "description": "Reachability represents the reachability of a node.", + "type": "string", + "enum": [ + "unknown", + "unreachable", + "reachable" + ], + "example": "reachable" + }, + "SwarmSpec": { + "description": "User modifiable swarm configuration.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the swarm.", + "type": "string", + "example": "default" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "description": "Orchestration configuration.", + "type": "object", + "properties": { + "TaskHistoryRetentionLimit": { + "description": "The number of historic tasks to keep per instance or node. If\nnegative, never remove completed or failed tasks.\n", + "type": "integer", + "format": "int64", + "example": 10 + } + }, + "nullable": true + }, + "Raft": { + "description": "Raft configuration.", + "type": "object", + "properties": { + "SnapshotInterval": { + "description": "The number of log entries between snapshots.", + "type": "integer", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "description": "The number of snapshots to keep beyond the current snapshot.\n", + "type": "integer", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "description": "The number of log entries to keep around to sync up slow followers\nafter a snapshot is created.\n", + "type": "integer", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "description": "The number of ticks that a follower will wait for a message from\nthe leader before becoming a candidate and starting an election.\n`ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 3 + }, + "HeartbeatTick": { + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks,\nthe leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 1 + } + } + }, + "Dispatcher": { + "description": "Dispatcher configuration.", + "type": "object", + "properties": { + "HeartbeatPeriod": { + "description": "The delay for an agent to send a heartbeat to the dispatcher.\n", + "type": "integer", + "format": "int64", + "example": 5000000000 + } + }, + "nullable": true + }, + "CAConfig": { + "description": "CA configuration.", + "type": "object", + "properties": { + "NodeCertExpiry": { + "description": "The duration node certificates are issued for.", + "type": "integer", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "description": "Configuration for forwarding signing requests to an external\ncertificate authority.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "description": "Protocol for communication with the external CA (currently\nonly `cfssl` is supported).\n", + "type": "string", + "enum": [ + "cfssl" + ], + "default": "cfssl" + }, + "URL": { + "description": "URL where certificate signing requests should be sent.\n", + "type": "string" + }, + "Options": { + "description": "An object with key/value pairs that are interpreted as\nprotocol-specific options for the external CA driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CACert": { + "description": "The root CA certificate (in PEM format) this external CA uses\nto issue TLS certificates (assumed to be to the current swarm\nroot CA certificate if not provided).\n", + "type": "string" + } + } + } + }, + "SigningCACert": { + "description": "The desired signing CA certificate for all swarm node TLS leaf\ncertificates, in PEM format.\n", + "type": "string" + }, + "SigningCAKey": { + "description": "The desired signing CA key for all swarm node TLS leaf certificates,\nin PEM format.\n", + "type": "string" + }, + "ForceRotate": { + "description": "An integer whose purpose is to force swarm to generate a new\nsigning CA certificate and key, if none have been specified in\n`SigningCACert` and `SigningCAKey`\n", + "format": "uint64", + "type": "integer" + } + }, + "nullable": true + }, + "EncryptionConfig": { + "description": "Parameters related to encryption-at-rest.", + "type": "object", + "properties": { + "AutoLockManagers": { + "description": "If set, generate a key and use it to lock data stored on the\nmanagers.\n", + "type": "boolean", + "example": false + } + } + }, + "TaskDefaults": { + "description": "Defaults for creating tasks in this cluster.", + "type": "object", + "properties": { + "LogDriver": { + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n", + "type": "object", + "properties": { + "Name": { + "description": "The log driver to use as a default for new tasks.\n", + "type": "string", + "example": "json-file" + }, + "Options": { + "description": "Driver-specific options for the selected log driver, specified\nas key/value pairs.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "10", + "max-size": "100m" + } + } + } + } + } + } + } + }, + "ClusterInfo": { + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "type": "object", + "properties": { + "ID": { + "description": "The ID of the swarm.", + "type": "string", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + }, + "RootRotationInProgress": { + "description": "Whether there is currently a root CA rotation in progress for the swarm\n", + "type": "boolean", + "example": false + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nIf no port is set or is set to 0, the default port (4789) is used.\n", + "type": "integer", + "format": "uint32", + "default": 4789, + "example": 4789 + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global scope\nnetworks.\n", + "type": "array", + "items": { + "type": "string", + "format": "CIDR", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created from the\ndefault subnet pool.\n", + "type": "integer", + "format": "uint32", + "maximum": 29, + "default": 24, + "example": 24 + } + }, + "nullable": true + }, + "JoinTokens": { + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n", + "type": "object", + "properties": { + "Worker": { + "description": "The token workers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "description": "The token managers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "Swarm": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/components/schemas/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "description": "User modifiable task configuration.", + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Name": { + "description": "The name or 'alias' to use for the plugin.", + "type": "string" + }, + "Remote": { + "description": "The plugin image reference to use.", + "type": "string" + }, + "Disabled": { + "description": "Disable the plugin once scheduled.", + "type": "boolean" + }, + "PluginPrivilege": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "ContainerSpec": { + "type": "object", + "description": "Container spec for the service.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Image": { + "description": "The image name to use for the container", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value data.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Command": { + "description": "The command to be run in the image.", + "type": "array", + "items": { + "type": "string" + } + }, + "Args": { + "description": "Arguments to the command.", + "type": "array", + "items": { + "type": "string" + } + }, + "Hostname": { + "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n", + "type": "string" + }, + "Env": { + "description": "A list of environment variables in the form `VAR=value`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Dir": { + "description": "The working directory for commands to run in.", + "type": "string" + }, + "User": { + "description": "The user inside the container.", + "type": "string" + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "description": "Security options for the container", + "properties": { + "CredentialSpec": { + "type": "object", + "description": "CredentialSpec for managed service account (Windows only)", + "properties": { + "Config": { + "type": "string", + "example": "0bt9dmxjvjiqermk6xrop3ekq", + "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "File": { + "type": "string", + "example": "spec.json", + "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + } + } + }, + "SELinuxContext": { + "type": "object", + "description": "SELinux labels of the container", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + } + }, + "Seccomp": { + "type": "object", + "description": "Options for configuring seccomp on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "unconfined", + "custom" + ] + }, + "Profile": { + "description": "The custom seccomp profile as a json object", + "type": "string" + } + } + }, + "AppArmor": { + "type": "object", + "description": "Options for configuring AppArmor on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "disabled" + ] + } + } + }, + "NoNewPrivileges": { + "type": "boolean", + "description": "Configuration of the no_new_privs bit in the container" + } + } + }, + "TTY": { + "description": "Whether a pseudo-TTY should be allocated.", + "type": "boolean" + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean" + }, + "ReadOnly": { + "description": "Mount the container's root filesystem as read only.", + "type": "boolean" + }, + "Mounts": { + "description": "Specification for mounts to be added to containers created as part\nof the service.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "StopSignal": { + "description": "Signal to stop the container.", + "type": "string" + }, + "StopGracePeriod": { + "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n", + "type": "integer", + "format": "int64" + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n", + "type": "object", + "properties": { + "Nameservers": { + "description": "The IP addresses of the name servers.", + "type": "array", + "items": { + "type": "string" + } + }, + "Search": { + "description": "A search list for host-name lookup.", + "type": "array", + "items": { + "type": "string" + } + }, + "Options": { + "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Secrets": { + "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "SecretID": { + "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n", + "type": "string" + }, + "SecretName": { + "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "OomScoreAdj": { + "type": "integer", + "format": "int64", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 0 + }, + "Configs": { + "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "Runtime": { + "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n", + "type": "object" + }, + "ConfigID": { + "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n", + "type": "string" + }, + "ConfigName": { + "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service.\n(Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": "boolean", + "nullable": true + }, + "Sysctls": { + "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CapabilityAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW", + "CAP_SYS_ADMIN", + "CAP_SYS_CHROOT", + "CAP_SYSLOG" + ] + }, + "CapabilityDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW" + ] + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + } + } + }, + "NetworkAttachmentSpec": { + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "type": "object", + "properties": { + "ContainerID": { + "description": "ID of the container represented by this task", + "type": "string" + } + } + }, + "Resources": { + "description": "Resource requirements which apply to each individual container created\nas part of the service.\n", + "type": "object", + "properties": { + "Limits": { + "allOf": [ + { + "$ref": "#/components/schemas/Limit" + }, + { + "description": "Define resources limits." + } + ] + }, + "Reservations": { + "allOf": [ + { + "$ref": "#/components/schemas/ResourceObject" + }, + { + "description": "Define resources reservation." + } + ] + }, + "SwapBytes": { + "description": "Amount of swap in bytes - can only be used together with a memory limit.\nIf not specified, the default behaviour is to grant a swap space twice\nas big as the memory limit.\nSet to -1 to enable unlimited swap.\n", + "type": "integer", + "format": "int64", + "minimum": -1, + "x-omitempty": true, + "nullable": true + }, + "MemorySwappiness": { + "description": "Tune the service's containers' memory swappiness (0 to 100).\nIf not specified, defaults to the containers' OS' default, generally 60,\nor whatever value was predefined in the image.\nSet to -1 to unset a previously set value.\n", + "type": "integer", + "format": "int64", + "minimum": -1, + "maximum": 100, + "x-omitempty": true, + "nullable": true + } + } + }, + "RestartPolicy": { + "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n", + "type": "object", + "properties": { + "Condition": { + "description": "Condition for restart.", + "type": "string", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "description": "Delay between restart attempts.", + "type": "integer", + "format": "int64" + }, + "MaxAttempts": { + "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Window": { + "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n", + "type": "integer", + "format": "int64", + "default": 0 + } + } + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production", + "node.platform.os==linux", + "node.platform.arch==x86_64" + ] + }, + "Preferences": { + "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "description": "label descriptor, such as `engine.labels.az`.\n", + "type": "string" + } + } + } + } + }, + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ] + }, + "MaxReplicas": { + "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Platforms": { + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Platform" + } + } + } + }, + "ForceUpdate": { + "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n", + "type": "integer", + "format": "uint64" + }, + "Runtime": { + "description": "Runtime is the type of runtime specified for the task executor.\n", + "type": "string" + }, + "Networks": { + "description": "Specifies which networks the service should attach to.", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "LogDriver": { + "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "ContainerStatus": { + "type": "object", + "description": "represents the status of a container.", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + } + }, + "PortStatus": { + "type": "object", + "description": "represents the port status of a task's host ports whose service has published host ports", + "properties": { + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + } + }, + "TaskStatus": { + "type": "object", + "description": "represents the status of a task.", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/components/schemas/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "$ref": "#/components/schemas/ContainerStatus" + }, + "PortStatus": { + "$ref": "#/components/schemas/PortStatus" + } + } + }, + "NetworkAttachment": { + "description": "Specifies how a task is attached to a network, and the addresses the\ntask was assigned on that network.\n", + "type": "object", + "properties": { + "Network": { + "$ref": "#/components/schemas/Network" + }, + "Addresses": { + "description": "The IP addresses (in CIDR notation) assigned to the task on this\nnetwork. To maintain backward compatibility this field accepts CIDR\nnotation, but only the IP address is used.\n", + "type": "array", + "items": { + "type": "string", + "format": "cidr" + } + } + }, + "example": { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1" + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "description": "The ID of the task.", + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "description": "Name of the task.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Spec": { + "$ref": "#/components/schemas/TaskSpec" + }, + "ServiceID": { + "description": "The ID of the service this task is part of.", + "type": "string" + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "description": "The ID of the node that this task is on.", + "type": "string" + }, + "AssignedGenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "Status": { + "$ref": "#/components/schemas/TaskStatus" + }, + "DesiredState": { + "$ref": "#/components/schemas/TaskState" + }, + "JobIteration": { + "allOf": [ + { + "$ref": "#/components/schemas/ObjectVersion" + }, + { + "description": "If the Service this Task belongs to is a job-mode service, contains\nthe JobIteration of the Service this Task was created for. Absent if\nthe Task was created for a Replicated or Global Service.\n" + } + ] + }, + "NetworksAttachments": { + "description": "The networks that this task is attached to, and the addresses the\ntask was assigned on each of them.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachment" + } + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "description": "User modifiable configuration for a service.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the service.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "TaskTemplate": { + "$ref": "#/components/schemas/TaskSpec" + }, + "Mode": { + "description": "Scheduling mode for the service.", + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object" + }, + "ReplicatedJob": { + "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n", + "type": "object", + "properties": { + "MaxConcurrent": { + "description": "The maximum number of replicas to run simultaneously.\n", + "type": "integer", + "format": "int64", + "default": 1 + }, + "TotalCompletions": { + "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n", + "type": "integer", + "format": "int64" + } + } + }, + "GlobalJob": { + "description": "The mode used for services which run a task to the completed state\non each valid node.\n", + "type": "object" + } + } + }, + "UpdateConfig": { + "description": "Specification for the update strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between updates, in nanoseconds.", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n", + "type": "string", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "RollbackConfig": { + "description": "Specification for the rollback strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between rollback iterations, in nanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n", + "type": "string", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "Networks": { + "description": "Specifies which networks the service should attach to.\n\nDeprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "EndpointSpec": { + "$ref": "#/components/schemas/EndpointSpec" + } + } + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "TargetPort": { + "description": "The port inside the container.", + "type": "integer" + }, + "PublishedPort": { + "description": "The port on the swarm hosts.", + "type": "integer" + }, + "PublishMode": { + "description": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "type": "string", + "enum": [ + "ingress", + "host" + ], + "default": "ingress", + "example": "ingress" + } + } + }, + "EndpointSpec": { + "description": "Properties that can be configured to access and load balance a service.", + "type": "object", + "properties": { + "Mode": { + "description": "The mode of resolution to use for internal load balancing between tasks.\n", + "type": "string", + "enum": [ + "vip", + "dnsrr" + ], + "default": "vip" + }, + "Ports": { + "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + } + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "description": "The status of a service update.", + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + } + }, + "ServiceStatus": { + "description": "The status of the service's tasks. Provided only when requested as\npart of a ServiceList operation.\n", + "type": "object", + "properties": { + "RunningTasks": { + "description": "The number of tasks for the service currently in the Running state.\n", + "type": "integer", + "format": "uint64", + "example": 7 + }, + "DesiredTasks": { + "description": "The number of tasks for the service desired to be running.\nFor replicated services, this is the replica count from the\nservice spec. For global services, this is computed by taking\ncount of all tasks for the service with a Desired State other\nthan Shutdown.\n", + "type": "integer", + "format": "uint64", + "example": 10 + }, + "CompletedTasks": { + "description": "The number of tasks for a job that are in the Completed state.\nThis field must be cross-referenced with the service type, as the\nvalue of 0 may mean the service is not in a job mode, or it may\nmean the job-mode service has no tasks yet Completed.\n", + "type": "integer", + "format": "uint64" + } + } + }, + "JobStatus": { + "description": "The status of the service when it is in one of ReplicatedJob or\nGlobalJob modes. Absent on Replicated and Global mode services. The\nJobIteration is an ObjectVersion, but unlike the Service's version,\ndoes not need to be sent with an update request.\n", + "type": "object", + "properties": { + "JobIteration": { + "allOf": [ + { + "$ref": "#/components/schemas/ObjectVersion" + }, + { + "description": "JobIteration is a value increased each time a Job is executed,\nsuccessfully or otherwise. \"Executed\", in this case, means the\njob as a whole has been started, not that an individual Task has\nbeen launched. A job is \"Executed\" when its ServiceSpec is\nupdated. JobIteration can be used to disambiguate Tasks belonging\nto different executions of a job. Though JobIteration will\nincrease with each subsequent execution, it may not necessarily\nincrease by 1, and so JobIteration should not be used to\n" + } + ] + }, + "LastExecution": { + "description": "The last time, as observed by the server, that this job was\nstarted.\n", + "type": "string", + "format": "dateTime" + } + } + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "x-go-name": "DeleteResponse", + "properties": { + "Untagged": { + "description": "The image ID of an image that was untagged", + "type": "string" + }, + "Deleted": { + "description": "The image ID of an image that was deleted", + "type": "string" + } + } + }, + "ServiceCreateResponse": { + "type": "object", + "description": "contains the information returned to a client on the\ncreation of a new service.\n", + "properties": { + "ID": { + "description": "The ID of the created service.", + "type": "string", + "example": "ak7w3gjqoa3kuz8xcpnyy0pvl", + "nullable": false + }, + "Warnings": { + "description": "Optional warning message.\n\nFIXME(thaJeztah): this should have \"omitempty\" in the generated type.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ], + "nullable": true + } + } + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "description": "Optional warning messages", + "type": "array", + "items": { + "type": "string" + } + } + }, + "example": { + "Warnings": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + }, + "ContainerInspectResponse": { + "type": "object", + "title": "ContainerInspectResponse", + "x-go-name": "InspectResponse", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Created": { + "description": "Date and time at which the container was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.", + "type": "string", + "format": "dateTime", + "example": "2025-02-17T17:43:39.64001363Z", + "nullable": true + }, + "Path": { + "description": "The path to the command being run", + "type": "string", + "example": "/bin/sh" + }, + "Args": { + "description": "The arguments to the command being run", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "-c", + "exit 9" + ] + }, + "State": { + "$ref": "#/components/schemas/ContainerState" + }, + "Image": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ResolvConfPath": { + "description": "Location of the `/etc/resolv.conf` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf" + }, + "HostnamePath": { + "description": "Location of the `/etc/hostname` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname" + }, + "HostsPath": { + "description": "Location of the `/etc/hosts` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts" + }, + "LogPath": { + "description": "Location of the file used to buffer the container's logs. Depending on\nthe logging-driver used for the container, this field may be omitted.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log", + "nullable": true + }, + "Name": { + "description": "The name associated with this container.\n\nFor historic reasons, the name may be prefixed with a forward-slash (`/`).", + "type": "string", + "example": "/funny_chatelet" + }, + "RestartCount": { + "description": "Number of times the container was restarted since it was created,\nor since daemon was started.", + "type": "integer", + "example": 0 + }, + "Driver": { + "description": "The storage-driver used for the container's filesystem (graph-driver\nor snapshotter).", + "type": "string", + "example": "overlayfs" + }, + "Platform": { + "description": "The platform (operating system) for which the container was created.\n\nThis field was introduced for the experimental \"LCOW\" (Linux Containers\nOn Windows) features, which has been removed. In most cases, this field\nis equal to the host's operating system (`linux` or `windows`).", + "type": "string", + "example": "linux" + }, + "ImageManifestDescriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store." + } + ] + }, + "MountLabel": { + "description": "SELinux mount label set for the container.", + "type": "string", + "example": "" + }, + "ProcessLabel": { + "description": "SELinux process label set for the container.", + "type": "string", + "example": "" + }, + "AppArmorProfile": { + "description": "The AppArmor profile set for the container.", + "type": "string", + "example": "" + }, + "ExecIDs": { + "description": "IDs of exec instances that are running in the container.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ], + "nullable": true + }, + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "GraphDriver": { + "allOf": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "x-nullable": true + } + ] + }, + "Storage": { + "allOf": [ + { + "$ref": "#/components/schemas/Storage" + }, + { + "x-nullable": true + } + ] + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "example": "122880", + "nullable": true + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "example": "1653948416", + "nullable": true + }, + "Mounts": { + "description": "List of mounts used by the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/components/schemas/NetworkSettings" + } + } + }, + "ContainerSummary": { + "type": "object", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Names": { + "description": "The names associated with this container. Most containers have a single\nname, but when using legacy \"links\", the container can have multiple\nnames.\n\nFor historic reasons, names are prefixed with a forward-slash (`/`).", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/funny_chatelet" + ] + }, + "Image": { + "description": "The name or ID of the image used to create the container.\n\nThis field shows the image reference as was specified when creating the container,\nwhich can be in its canonical form (e.g., `docker.io/library/ubuntu:latest`\nor `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`),\nshort form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`).\n\nThe content of this field can be updated at runtime if the image used to\ncreate the container is untagged, in which case the field is updated to\ncontain the the image ID (digest) it was resolved to in its canonical,\nnon-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`).", + "type": "string", + "example": "docker.io/library/ubuntu:latest" + }, + "ImageID": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ImageManifestDescriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "x-nullable": true, + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store.\n\nThis field is not populated in the `GET /system/df` endpoint.\n" + } + ] + }, + "Command": { + "description": "Command to run when starting the container", + "type": "string", + "example": "/bin/bash" + }, + "Created": { + "description": "Date and time at which the container was created as a Unix timestamp\n(number of seconds since EPOCH).", + "type": "integer", + "format": "int64", + "example": "1739811096" + }, + "Ports": { + "description": "Port-mappings for the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/PortSummary" + } + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "example": "122880", + "nullable": true + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "example": "1653948416", + "nullable": true + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + } + }, + "State": { + "description": "The state of this container.\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "exited", + "removing", + "dead" + ], + "example": "running" + }, + "Status": { + "description": "Additional human-readable status of this container (e.g. `Exit 0`)", + "type": "string", + "example": "Up 4 days" + }, + "HostConfig": { + "type": "object", + "description": "Summary of host-specific runtime information of the container. This\nis a reduced set of information in the container's \"HostConfig\" as\navailable in the container \"inspect\" response.", + "properties": { + "NetworkMode": { + "description": "Networking mode (`host`, `none`, `container:`) or name of the\nprimary network the container is using.\n\nThis field is primarily for backward compatibility. The container\ncan be connected to multiple networks for which information can be\nfound in the `NetworkSettings.Networks` field, which enumerates\nsettings per network.", + "type": "string", + "example": "mynetwork" + }, + "Annotations": { + "description": "Arbitrary key-value metadata attached to the container.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "io.kubernetes.docker.type": "container", + "io.kubernetes.sandbox.id": "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" + }, + "nullable": true + } + } + }, + "NetworkSettings": { + "description": "Summary of the container's network settings", + "type": "object", + "properties": { + "Networks": { + "type": "object", + "description": "Summary of network-settings for each network the container is\nattached to.", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + } + }, + "Mounts": { + "type": "array", + "description": "List of mounts used by the container.", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Health": { + "type": "object", + "description": "Summary of health status\n\nAdded in v1.52, before that version all container summary not include Health.\nAfter this attribute introduced, it includes containers with no health checks configured,\nor containers that are not running with none", + "properties": { + "Status": { + "type": "string", + "description": "the health status of the container", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + } + } + } + } + }, + "ContainersDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/container", + "description": "represents system data usage information for container resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active containers.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all containers.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive containers.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by containers.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of container summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "Driver": { + "description": "Driver represents a driver (network, logging, secrets).", + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "Name of the driver.", + "type": "string", + "example": "some-driver", + "nullable": false + }, + "Options": { + "description": "Key/value map of driver-specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + }, + "nullable": false + } + } + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the secret.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "description": "Data is the data to store as a secret, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nIt must be empty if the Driver field is set, in which case the data is\nloaded from an external secret store. The maximum allowed size is 500KB,\nas defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize).\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "type": "string", + "example": "" + }, + "Driver": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Name of the secrets driver used to fetch the secret's value from an\nexternal secret store.\n" + } + ] + }, + "Templating": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n" + } + ] + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the config.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Data": { + "description": "Data is the data to store as a config, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nThe maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize).\n", + "type": "string" + }, + "Templating": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n" + } + ] + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "ContainerState": { + "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command.\n", + "type": "object", + "properties": { + "Status": { + "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ], + "example": "running" + }, + "Running": { + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "type": "boolean", + "example": true + }, + "Paused": { + "description": "Whether this container is paused.", + "type": "boolean", + "example": false + }, + "Restarting": { + "description": "Whether this container is restarting.", + "type": "boolean", + "example": false + }, + "OOMKilled": { + "description": "Whether a process within this container has been killed because it ran\nout of memory since the container was last started.\n", + "type": "boolean", + "example": false + }, + "Dead": { + "type": "boolean", + "example": false + }, + "Pid": { + "description": "The process ID of this container", + "type": "integer", + "example": 1234 + }, + "ExitCode": { + "description": "The last exit code of this container", + "type": "integer", + "example": 0 + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "description": "The time when this container was last started.", + "type": "string", + "example": "2020-01-06T09:06:59.461876391Z" + }, + "FinishedAt": { + "description": "The time when this container last exited.", + "type": "string", + "example": "2020-01-06T09:07:59.461876391Z" + }, + "Health": { + "$ref": "#/components/schemas/Health" + } + }, + "nullable": true + }, + "ContainerCreateResponse": { + "description": "OK response to ContainerCreate operation", + "type": "object", + "title": "ContainerCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warnings" + ], + "properties": { + "Id": { + "description": "The ID of the created container", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", + "nullable": false + }, + "Warnings": { + "description": "Warnings encountered when creating the container", + "type": "array", + "items": { + "type": "string" + }, + "example": [], + "nullable": false + } + } + }, + "ContainerUpdateResponse": { + "type": "object", + "title": "ContainerUpdateResponse", + "x-go-name": "UpdateResponse", + "description": "Response for a successful container-update.", + "properties": { + "Warnings": { + "type": "array", + "description": "Warnings encountered when updating the container.", + "items": { + "type": "string" + }, + "example": [ + "Published ports are discarded when using host network mode" + ] + } + } + }, + "ContainerStatsResponse": { + "description": "Statistics sample for a container.\n", + "type": "object", + "x-go-name": "StatsResponse", + "title": "ContainerStatsResponse", + "properties": { + "id": { + "description": "ID of the container for which the stats were collected.\n", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", + "nullable": true + }, + "name": { + "description": "Name of the container for which the stats were collected.\n", + "type": "string", + "example": "boring_wozniak", + "nullable": true + }, + "os_type": { + "description": "OSType is the OS of the container (\"linux\" or \"windows\") to allow\nplatform-specific handling of stats.\n", + "type": "string", + "example": "linux", + "nullable": true + }, + "read": { + "description": "Date and time at which this sample was collected.\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:22.165243637Z" + }, + "cpu_stats": { + "$ref": "#/components/schemas/ContainerCPUStats" + }, + "memory_stats": { + "$ref": "#/components/schemas/ContainerMemoryStats" + }, + "networks": { + "description": "Network statistics for the container per interface.\n\nThis field is omitted if the container has no networking enabled.\n", + "additionalProperties": { + "$ref": "#/components/schemas/ContainerNetworkStats" + }, + "example": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + }, + "nullable": true + }, + "pids_stats": { + "$ref": "#/components/schemas/ContainerPidsStats" + }, + "blkio_stats": { + "$ref": "#/components/schemas/ContainerBlkioStats" + }, + "num_procs": { + "description": "The number of processors on the system.\n\nThis field is Windows-specific and always zero for Linux containers.\n", + "type": "integer", + "format": "uint32", + "example": 16 + }, + "storage_stats": { + "$ref": "#/components/schemas/ContainerStorageStats" + }, + "preread": { + "description": "Date and time at which this first sample was collected. This field\nis not propagated if the \"one-shot\" option is set. If the \"one-shot\"\noption is set, this field may be omitted, empty, or set to a default\ndate (`0001-01-01T00:00:00Z`).\n\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:21.160452595Z" + }, + "precpu_stats": { + "$ref": "#/components/schemas/ContainerCPUStats" + } + } + }, + "ContainerBlkioStats": { + "description": "BlkioStats stores all IO service stats for data read and write.\n\nThis type is Linux-specific and holds many fields that are specific to cgroups v1.\nOn a cgroup v2 host, all fields other than `io_service_bytes_recursive`\nare omitted or `null`.\n\nThis type is only populated on Linux and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "BlkioStats", + "properties": { + "io_service_bytes_recursive": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_serviced_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "io_queue_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "io_service_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "io_wait_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "io_merged_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "io_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "sectors_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + } + }, + "example": { + "io_service_bytes_recursive": [ + { + "major": 254, + "minor": 0, + "op": "read", + "value": 7593984 + }, + { + "major": 254, + "minor": 0, + "op": "write", + "value": 100 + } + ], + "io_serviced_recursive": null, + "io_queue_recursive": null, + "io_service_time_recursive": null, + "io_wait_time_recursive": null, + "io_merged_recursive": null, + "io_time_recursive": null, + "sectors_recursive": null + }, + "nullable": true + }, + "ContainerBlkioStatEntry": { + "description": "Blkio stats entry.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "BlkioStatEntry", + "properties": { + "major": { + "type": "integer", + "format": "uint64", + "example": 254 + }, + "minor": { + "type": "integer", + "format": "uint64", + "example": 0 + }, + "op": { + "type": "string", + "example": "read" + }, + "value": { + "type": "integer", + "format": "uint64", + "example": 7593984 + } + }, + "nullable": true + }, + "ContainerCPUStats": { + "description": "CPU related info of the container\n", + "type": "object", + "x-go-name": "CPUStats", + "properties": { + "cpu_usage": { + "$ref": "#/components/schemas/ContainerCPUUsage" + }, + "system_cpu_usage": { + "description": "System Usage.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 5, + "nullable": true + }, + "online_cpus": { + "description": "Number of online CPUs.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint32", + "example": 5, + "nullable": true + }, + "throttling_data": { + "$ref": "#/components/schemas/ContainerThrottlingData" + } + }, + "nullable": true + }, + "ContainerCPUUsage": { + "description": "All CPU stats aggregated since container inception.\n", + "type": "object", + "x-go-name": "CPUUsage", + "properties": { + "total_usage": { + "description": "Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows).\n", + "type": "integer", + "format": "uint64", + "example": 29912000 + }, + "percpu_usage": { + "description": "Total CPU time (in nanoseconds) consumed per core (Linux).\n\nThis field is Linux-specific when using cgroups v1. It is omitted\nwhen using cgroups v2 and Windows containers.\n", + "type": "array", + "items": { + "type": "integer", + "format": "uint64", + "example": 29912000 + }, + "nullable": true + }, + "usage_in_kernelmode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 21994000 + }, + "usage_in_usermode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 7918000 + } + }, + "nullable": true + }, + "ContainerPidsStats": { + "description": "PidsStats contains Linux-specific stats of a container's process-IDs (PIDs).\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "PidsStats", + "properties": { + "current": { + "description": "Current is the number of PIDs in the cgroup.\n", + "type": "integer", + "format": "uint64", + "example": 5, + "nullable": true + }, + "limit": { + "description": "Limit is the hard limit on the number of pids in the cgroup.\nA \"Limit\" of 0 means that there is no limit.\n", + "type": "integer", + "format": "uint64", + "example": "18446744073709551615", + "nullable": true + } + }, + "nullable": true + }, + "ContainerThrottlingData": { + "description": "CPU throttling stats of the container.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "ThrottlingData", + "properties": { + "periods": { + "description": "Number of periods with throttling active.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_periods": { + "description": "Number of periods when the container hit its throttling limit.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_time": { + "description": "Aggregated time (in nanoseconds) the container was throttled for.\n", + "type": "integer", + "format": "uint64", + "example": 0 + } + }, + "nullable": true + }, + "ContainerMemoryStats": { + "description": "Aggregates all memory stats since container inception on Linux.\nWindows returns stats for commit and private working set only.\n", + "type": "object", + "x-go-name": "MemoryStats", + "properties": { + "usage": { + "description": "Current `res_counter` usage for memory.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + }, + "max_usage": { + "description": "Maximum usage ever recorded.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + }, + "stats": { + "description": "All the stats exported via memory.stat.\n\nThe fields in this object differ between cgroups v1 and v2.\nOn cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available.\nOn cgroups v2, fields such as `file`, `anon`, `inactive_file` are available.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "uint64", + "nullable": true + }, + "example": { + "active_anon": 1572864, + "active_file": 5115904, + "anon": 1572864, + "anon_thp": 0, + "file": 7626752, + "file_dirty": 0, + "file_mapped": 2723840, + "file_writeback": 0, + "inactive_anon": 0, + "inactive_file": 2510848, + "kernel_stack": 16384, + "pgactivate": 0, + "pgdeactivate": 0, + "pgfault": 2042, + "pglazyfree": 0, + "pglazyfreed": 0, + "pgmajfault": 45, + "pgrefill": 0, + "pgscan": 0, + "pgsteal": 0, + "shmem": 0, + "slab": 1180928, + "slab_reclaimable": 725576, + "slab_unreclaimable": 455352, + "sock": 0, + "thp_collapse_alloc": 0, + "thp_fault_alloc": 1, + "unevictable": 0, + "workingset_activate": 0, + "workingset_nodereclaim": 0, + "workingset_refault": 0 + } + }, + "failcnt": { + "description": "Number of times memory usage hits limits.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + }, + "limit": { + "description": "This field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 8217579520, + "nullable": true + }, + "commitbytes": { + "description": "Committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + }, + "commitpeakbytes": { + "description": "Peak committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + }, + "privateworkingset": { + "description": "Private working set.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + } + } + }, + "ContainerNetworkStats": { + "description": "Aggregates the network stats of one container\n", + "type": "object", + "x-go-name": "NetworkStats", + "properties": { + "rx_bytes": { + "description": "Bytes received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 5338 + }, + "rx_packets": { + "description": "Packets received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 36 + }, + "rx_errors": { + "description": "Received errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "rx_dropped": { + "description": "Incoming packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_bytes": { + "description": "Bytes sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 1200 + }, + "tx_packets": { + "description": "Packets sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 12 + }, + "tx_errors": { + "description": "Sent errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_dropped": { + "description": "Outgoing packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "endpoint_id": { + "description": "Endpoint ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "string", + "nullable": true + }, + "instance_id": { + "description": "Instance ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "string", + "nullable": true + } + }, + "nullable": true + }, + "ContainerStorageStats": { + "description": "StorageStats is the disk I/O stats for read/write on Windows.\n\nThis type is Windows-specific and omitted for Linux containers.\n", + "type": "object", + "x-go-name": "StorageStats", + "properties": { + "read_count_normalized": { + "type": "integer", + "format": "uint64", + "example": 7593984, + "nullable": true + }, + "read_size_bytes": { + "type": "integer", + "format": "uint64", + "example": 7593984, + "nullable": true + }, + "write_count_normalized": { + "type": "integer", + "format": "uint64", + "example": 7593984, + "nullable": true + }, + "write_size_bytes": { + "type": "integer", + "format": "uint64", + "example": 7593984, + "nullable": true + } + }, + "nullable": true + }, + "ContainerTopResponse": { + "type": "object", + "x-go-name": "TopResponse", + "title": "ContainerTopResponse", + "description": "Container \"top\" response.", + "properties": { + "Titles": { + "description": "The ps column titles", + "type": "array", + "items": { + "type": "string" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ] + } + }, + "Processes": { + "description": "Each process running in the container, where each process\nis an array of values corresponding to the titles.", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": { + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + } + } + }, + "ContainerWaitResponse": { + "description": "OK response to ContainerWait operation", + "type": "object", + "x-go-name": "WaitResponse", + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "properties": { + "StatusCode": { + "description": "Exit code of the container", + "type": "integer", + "format": "int64", + "nullable": false + }, + "Error": { + "$ref": "#/components/schemas/ContainerWaitExitError" + } + } + }, + "ContainerWaitExitError": { + "description": "container waiting error, if any", + "type": "object", + "x-go-name": "WaitExitError", + "properties": { + "Message": { + "description": "Details of an error", + "type": "string" + } + } + }, + "SystemVersion": { + "type": "object", + "description": "Response of Engine API: GET \"/version\"\n", + "properties": { + "Platform": { + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "description": "Information about system components\n", + "items": { + "type": "object", + "x-go-name": "ComponentVersion", + "required": [ + "Name", + "Version" + ], + "properties": { + "Name": { + "description": "Name of the component\n", + "type": "string", + "example": "Engine" + }, + "Version": { + "description": "Version of the component\n", + "type": "string", + "example": "27.0.1", + "nullable": false + }, + "Details": { + "description": "Key/value pairs of strings with additional information about the\ncomponent. These values are intended for informational purposes\nonly, and their content is not defined, and not part of the API\nspecification.\n\nThese messages can be printed by the client as information to the user.\n", + "type": "object", + "nullable": true + } + } + } + }, + "Version": { + "description": "The version of the daemon", + "type": "string", + "example": "27.0.1" + }, + "ApiVersion": { + "description": "The default (and highest) API version that is supported by the daemon\n", + "type": "string", + "example": "1.47" + }, + "MinAPIVersion": { + "description": "The minimum API version that is supported by the daemon\n", + "type": "string", + "example": "1.24" + }, + "GitCommit": { + "description": "The Git commit of the source code that was used to build the daemon\n", + "type": "string", + "example": "48a66213fe" + }, + "GoVersion": { + "description": "The version Go used to compile the daemon, and the version of the Go\nruntime in use.\n", + "type": "string", + "example": "go1.22.7" + }, + "Os": { + "description": "The operating system that the daemon is running on (\"linux\" or \"windows\")\n", + "type": "string", + "example": "linux" + }, + "Arch": { + "description": "Architecture of the daemon, as returned by the Go runtime (`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "amd64" + }, + "KernelVersion": { + "description": "The kernel version (`uname -r`) that the daemon is running on.\n\nThis field is omitted when empty.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "Experimental": { + "description": "Indicates if the daemon is started with experimental features enabled.\n\nThis field is omitted when empty / false.\n", + "type": "boolean", + "example": true + }, + "BuildTime": { + "description": "The date and time that the daemon was compiled.\n", + "type": "string", + "example": "2020-06-22T15:49:27.000000000+00:00" + } + } + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "description": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "type": "string", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "description": "Total number of containers on the host.", + "type": "integer", + "example": 14 + }, + "ContainersRunning": { + "description": "Number of containers with status `\"running\"`.\n", + "type": "integer", + "example": 3 + }, + "ContainersPaused": { + "description": "Number of containers with status `\"paused\"`.\n", + "type": "integer", + "example": 1 + }, + "ContainersStopped": { + "description": "Number of containers with status `\"stopped\"`.\n", + "type": "integer", + "example": 10 + }, + "Images": { + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "type": "integer", + "example": 508 + }, + "Driver": { + "description": "Name of the storage driver in use.", + "type": "string", + "example": "overlay2" + }, + "DriverStatus": { + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ] + }, + "DockerRootDir": { + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "type": "string", + "example": "/var/lib/docker" + }, + "Plugins": { + "$ref": "#/components/schemas/PluginsInfo" + }, + "MemoryLimit": { + "description": "Indicates if the host has memory limit support enabled.", + "type": "boolean", + "example": true + }, + "SwapLimit": { + "description": "Indicates if the host has memory swap limit support enabled.", + "type": "boolean", + "example": true + }, + "CpuCfsPeriod": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CpuCfsQuota": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CPUShares": { + "description": "Indicates if CPU Shares limiting is supported by the host.\n", + "type": "boolean", + "example": true + }, + "CPUSet": { + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "type": "boolean", + "example": true + }, + "PidsLimit": { + "description": "Indicates if the host kernel has PID limit support enabled.", + "type": "boolean", + "example": true + }, + "OomKillDisable": { + "description": "Indicates if OOM killer disable is supported on the host.", + "type": "boolean" + }, + "IPv4Forwarding": { + "description": "Indicates IPv4 forwarding is enabled.", + "type": "boolean", + "example": true + }, + "Debug": { + "description": "Indicates if the daemon is running in debug-mode / with debug-level\nlogging enabled.\n", + "type": "boolean", + "example": true + }, + "NFd": { + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 64 + }, + "NGoroutines": { + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 174 + }, + "SystemTime": { + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "type": "string", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "description": "The logging driver to use as a default for new containers.\n", + "type": "string" + }, + "CgroupDriver": { + "description": "The driver to use for managing cgroups.\n", + "type": "string", + "enum": [ + "cgroupfs", + "systemd", + "none" + ], + "default": "cgroupfs", + "example": "cgroupfs" + }, + "CgroupVersion": { + "description": "The version of the cgroup.\n", + "type": "string", + "enum": [ + "1", + "2" + ], + "default": "1", + "example": "1" + }, + "NEventsListener": { + "description": "Number of event listeners subscribed.", + "type": "integer", + "example": 30 + }, + "KernelVersion": { + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "OperatingSystem": { + "description": "Name of the host's operating system, for example: \"Ubuntu 24.04 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "type": "string", + "example": "Ubuntu 24.04 LTS" + }, + "OSVersion": { + "description": "Version of the host's operating system\n\n


\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "type": "string", + "example": "24.04" + }, + "OSType": { + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "linux" + }, + "Architecture": { + "description": "Hardware architecture of the host, as returned by the operating system.\nThis is equivalent to the output of `uname -m` on Linux.\n\nUnlike `Arch` (from `/version`), this reports the machine's native\narchitecture, which can differ from the Go runtime architecture when\nrunning a binary compiled for a different architecture (for example,\na 32-bit binary running on 64-bit hardware).\n", + "type": "string", + "example": "x86_64" + }, + "NCPU": { + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "type": "integer", + "example": 4 + }, + "MemTotal": { + "description": "Total amount of physical memory available on the host, in bytes.\n", + "type": "integer", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "default": "https://index.docker.io/v1/", + "type": "string", + "example": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/components/schemas/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "HttpProxy": { + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + }, + "NoProxy": { + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "*.local, 169.254/16" + }, + "Name": { + "description": "Hostname of the host.", + "type": "string", + "example": "node5.corp.example.com" + }, + "Labels": { + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "storage=ssd", + "production" + ] + }, + "ExperimentalBuild": { + "description": "Indicates if experimental features are enabled on the daemon.\n", + "type": "boolean", + "example": true + }, + "ServerVersion": { + "description": "Version string of the daemon.\n", + "type": "string", + "example": "27.0.1" + }, + "Runtimes": { + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Runtime" + }, + "default": { + "runc": { + "path": "runc" + } + }, + "example": { + "runc": { + "path": "runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "type": "string", + "default": "runc", + "example": "runc" + }, + "Swarm": { + "$ref": "#/components/schemas/SwarmInfo" + }, + "LiveRestoreEnabled": { + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "type": "boolean", + "default": false, + "example": false + }, + "Isolation": { + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "type": "string", + "enum": [ + "default", + "hyperv", + "process", + "" + ] + }, + "InitBinary": { + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/components/schemas/Commit" + }, + "RuncCommit": { + "$ref": "#/components/schemas/Commit" + }, + "InitCommit": { + "$ref": "#/components/schemas/Commit" + }, + "SecurityOptions": { + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, user-namespaces (userns), rootless and\nno-new-privileges.\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns", + "name=rootless" + ] + }, + "ProductLicense": { + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "type": "string", + "example": "Community Engine" + }, + "DefaultAddressPools": { + "description": "List of custom default address pools for local networks, which can be\nspecified in the daemon.json file or dockerd option.\n\nExample: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n10.10.[0-255].0/24 address pools.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Base": { + "description": "The network address in CIDR format", + "type": "string", + "example": "10.10.0.0/16" + }, + "Size": { + "description": "The network pool size", + "type": "integer", + "example": "24" + } + } + } + }, + "FirewallBackend": { + "$ref": "#/components/schemas/FirewallInfo" + }, + "DiscoveredDevices": { + "description": "List of devices discovered by device drivers.\n\nEach device includes information about its source driver, kind, name,\nand additional driver-specific attributes.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceInfo" + } + }, + "NRI": { + "$ref": "#/components/schemas/NRIInfo" + }, + "Warnings": { + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "WARNING: No memory limit support" + ] + }, + "CDISpecDirs": { + "description": "List of directories where (Container Device Interface) CDI\nspecifications are located.\n\nThese specifications define vendor-specific modifications to an OCI\nruntime specification for a container being created.\n\nAn empty list indicates that CDI device injection is disabled.\n\nNote that since using CDI device injection requires the daemon to have\nexperimental enabled. For non-experimental daemons an empty list will\nalways be returned.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/etc/cdi", + "/var/run/cdi" + ] + }, + "Containerd": { + "$ref": "#/components/schemas/ContainerdInfo" + } + } + }, + "ContainerdInfo": { + "description": "Information for connecting to the containerd instance that is used by the daemon.\nThis is included for debugging purposes only.\n", + "type": "object", + "properties": { + "Address": { + "description": "The address of the containerd socket.", + "type": "string", + "example": "/run/containerd/containerd.sock" + }, + "Namespaces": { + "description": "The namespaces that the daemon uses for running containers and\nplugins in containerd. These namespaces can be configured in the\ndaemon configuration, and are considered to be used exclusively\nby the daemon, Tampering with the containerd instance may cause\nunexpected behavior.\n\nAs these namespaces are considered to be exclusively accessed\nby the daemon, it is not recommended to change these values,\nor to change them to a value that is used by other systems,\nsuch as cri-containerd.\n", + "type": "object", + "properties": { + "Containers": { + "description": "The default containerd namespace used for containers managed\nby the daemon.\n\nThe default namespace for containers is \"moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "moby", + "example": "moby" + }, + "Plugins": { + "description": "The default containerd namespace used for plugins managed by\nthe daemon.\n\nThe default namespace for plugins is \"plugins.moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "plugins.moby", + "example": "plugins.moby" + } + } + } + }, + "nullable": true + }, + "FirewallInfo": { + "description": "Information about the daemon's firewalling configuration.\n\nThis field is currently only used on Linux, and omitted on other platforms.\n", + "type": "object", + "properties": { + "Driver": { + "description": "The name of the firewall backend driver.\n", + "type": "string", + "example": "nftables" + }, + "Info": { + "description": "Information about the firewall backend, provided as\n\"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "ReloadedAt", + "2025-01-01T00:00:00Z" + ] + ] + } + }, + "nullable": true + }, + "PluginsInfo": { + "description": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n", + "type": "object", + "properties": { + "Volume": { + "description": "Names of available volume-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "local" + ] + }, + "Network": { + "description": "Names of available network-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ] + }, + "Authorization": { + "description": "Names of available authorization plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "img-authz-plugin", + "hbm" + ] + }, + "Log": { + "description": "Names of available logging-drivers, and logging-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "splunk", + "syslog" + ] + } + } + }, + "RegistryServiceConfig": { + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "type": "object", + "properties": { + "InsecureRegistryCIDRs": { + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`::1/128` and `127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "::1/128", + "127.0.0.0/8" + ] + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ] + } + }, + "nullable": true + }, + "IndexInfo": { + "description": "IndexInfo contains information about a registry.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the registry, such as \"docker.io\".\n", + "type": "string", + "example": "docker.io" + }, + "Mirrors": { + "description": "List of mirrors, expressed as URIs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ] + }, + "Secure": { + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "type": "boolean", + "example": true + }, + "Official": { + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "type": "boolean", + "example": true + } + }, + "nullable": true + }, + "Runtime": { + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n", + "type": "object", + "properties": { + "path": { + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "--debug", + "--systemd-cgroup=false" + ], + "nullable": true + }, + "status": { + "description": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" + }, + "nullable": true + } + } + }, + "Commit": { + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n", + "type": "object", + "properties": { + "ID": { + "description": "Actual commit ID of external tool.", + "type": "string", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + } + } + }, + "SwarmInfo": { + "description": "Represents generic information about swarm.\n", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string", + "default": "", + "example": "k67qz4598weg5unwwffg6z1m1" + }, + "NodeAddr": { + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "type": "string", + "default": "", + "example": "10.0.0.46" + }, + "LocalNodeState": { + "$ref": "#/components/schemas/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "default": false, + "example": true + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "description": "List of ID's and addresses of other managers in the swarm.\n", + "type": "array", + "default": null, + "items": { + "$ref": "#/components/schemas/PeerNode" + }, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ], + "nullable": true + }, + "Nodes": { + "description": "Total number of nodes in the swarm.", + "type": "integer", + "example": 4, + "nullable": true + }, + "Managers": { + "description": "Total number of managers in the swarm.", + "type": "integer", + "example": 3, + "nullable": true + }, + "Cluster": { + "$ref": "#/components/schemas/ClusterInfo" + } + } + }, + "LocalNodeState": { + "description": "Current local status of this node.", + "type": "string", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ], + "example": "active" + }, + "PeerNode": { + "description": "Represents a peer-node in the swarm", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string" + }, + "Addr": { + "description": "IP address and ports at which this node can be reached.\n", + "type": "string" + } + } + }, + "NetworkAttachmentConfig": { + "description": "Specifies how a service should be attached to a particular network.\n", + "type": "object", + "properties": { + "Target": { + "description": "The target network for attachment. Must be a network name or ID.\n", + "type": "string" + }, + "Aliases": { + "description": "Discoverable alternate names for the service on this network.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "description": "Driver attachment options for the network target.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "EventActor": { + "description": "Actor describes something that generates events, like a container, network,\nor a volume.\n", + "type": "object", + "properties": { + "ID": { + "description": "The ID of the object emitting the event", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Attributes": { + "description": "Various key/value attributes of the object, depending on its type.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-label-value", + "image": "alpine:latest", + "name": "my-container" + } + } + } + }, + "EventMessage": { + "description": "EventMessage represents the information an event contains.\n", + "type": "object", + "title": "SystemEventsResponse", + "properties": { + "Type": { + "description": "The type of object emitting the event", + "type": "string", + "enum": [ + "builder", + "config", + "container", + "daemon", + "image", + "network", + "node", + "plugin", + "secret", + "service", + "volume" + ], + "example": "container" + }, + "Action": { + "description": "The type of event", + "type": "string", + "example": "create" + }, + "Actor": { + "$ref": "#/components/schemas/EventActor" + }, + "scope": { + "description": "Scope of the event. Engine events are `local` scope. Cluster (Swarm)\nevents are `swarm` scope.\n", + "type": "string", + "enum": [ + "local", + "swarm" + ] + }, + "time": { + "description": "Timestamp of event", + "type": "integer", + "format": "int64", + "example": 1629574695 + }, + "timeNano": { + "description": "Timestamp of event, with nanosecond accuracy", + "type": "integer", + "format": "int64", + "example": 1629574695515050000 + } + } + }, + "OCIDescriptor": { + "type": "object", + "x-go-name": "Descriptor", + "description": "A descriptor struct containing digest, media type, and size, as defined in\nthe [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).\n", + "properties": { + "mediaType": { + "description": "The media type of the object this schema refers to.\n", + "type": "string", + "example": "application/vnd.oci.image.manifest.v1+json" + }, + "digest": { + "description": "The digest of the targeted content.\n", + "type": "string", + "example": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + }, + "size": { + "description": "The size in bytes of the blob.\n", + "type": "integer", + "format": "int64", + "example": 424 + }, + "urls": { + "description": "List of URLs from which this object MAY be downloaded.", + "type": "array", + "items": { + "type": "string", + "format": "uri" + }, + "nullable": true + }, + "annotations": { + "description": "Arbitrary metadata relating to the targeted content.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.base.digest": "sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8", + "org.opencontainers.image.base.name": "scratch", + "org.opencontainers.image.created": "2025-01-27T00:00:00Z", + "org.opencontainers.image.revision": "9fabb4bad5138435b01857e2fe9363e2dc5f6a79", + "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base", + "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu", + "org.opencontainers.image.version": "24.04" + }, + "nullable": true + }, + "data": { + "type": "string", + "description": "Data is an embedding of the targeted content. This is encoded as a base64\nstring when marshalled to JSON (automatically, by encoding/json). If\npresent, Data can be used directly to avoid fetching the targeted content.", + "example": null, + "nullable": true + }, + "platform": { + "$ref": "#/components/schemas/OCIPlatform" + }, + "artifactType": { + "description": "ArtifactType is the IANA media type of this artifact.", + "type": "string", + "example": null, + "nullable": true + } + } + }, + "OCIPlatform": { + "type": "object", + "x-go-name": "Platform", + "description": "Describes the platform which the image in the manifest runs on, as defined\nin the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).\n", + "properties": { + "architecture": { + "description": "The CPU architecture, for example `amd64` or `ppc64`.\n", + "type": "string", + "example": "arm" + }, + "os": { + "description": "The operating system, for example `linux` or `windows`.\n", + "type": "string", + "example": "windows" + }, + "os.version": { + "description": "Optional field specifying the operating system version, for example on\nWindows `10.0.19041.1165`.\n", + "type": "string", + "example": "10.0.19041.1165" + }, + "os.features": { + "description": "Optional field specifying an array of strings, each listing a required\nOS feature (for example on Windows `win32k`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "win32k" + ] + }, + "variant": { + "description": "Optional field specifying a variant of the CPU, for example `v7` to\nspecify ARMv7 when architecture is `arm`.\n", + "type": "string", + "example": "v7" + } + }, + "nullable": true + }, + "DistributionInspect": { + "type": "object", + "x-go-name": "DistributionInspect", + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "description": "Describes the result obtained from contacting the registry to retrieve\nimage metadata.\n", + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image.\n", + "items": { + "$ref": "#/components/schemas/OCIPlatform" + } + } + } + }, + "ClusterVolume": { + "type": "object", + "description": "Options and information specific to, and only present on, Swarm CSI\ncluster volumes.\n", + "properties": { + "ID": { + "type": "string", + "description": "The Swarm ID of this volume. Because cluster volumes are Swarm\nobjects, they have an ID, unlike non-cluster volumes. This ID can\nbe used to refer to the Volume instead of the name.\n" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + }, + "Info": { + "type": "object", + "description": "Information about the global status of the volume.\n", + "properties": { + "CapacityBytes": { + "type": "integer", + "format": "int64", + "description": "The capacity of the volume in bytes. A value of 0 indicates that\nthe capacity is unknown.\n" + }, + "VolumeContext": { + "type": "object", + "description": "A map of strings to strings returned from the storage plugin when\nthe volume is created.\n", + "additionalProperties": { + "type": "string" + } + }, + "VolumeID": { + "type": "string", + "description": "The ID of the volume as returned by the CSI storage plugin. This\nis distinct from the volume's ID as provided by Docker. This ID\nis never used by the user when communicating with Docker to refer\nto this volume. If the ID is blank, then the Volume has not been\nsuccessfully created in the plugin yet.\n" + }, + "AccessibleTopology": { + "type": "array", + "description": "The topology this volume is actually accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + } + }, + "PublishStatus": { + "type": "array", + "description": "The status of the volume as it pertains to its publishing and use on\nspecific nodes\n", + "items": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "The ID of the Swarm node the volume is published on.\n" + }, + "State": { + "type": "string", + "description": "The published state of the volume.\n* `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.\n* `published` The volume is published successfully to the node.\n* `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.\n* `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.\n", + "enum": [ + "pending-publish", + "published", + "pending-node-unpublish", + "pending-controller-unpublish" + ] + }, + "PublishContext": { + "type": "object", + "description": "A map of strings to strings returned by the CSI controller\nplugin when a volume is published.\n", + "additionalProperties": { + "type": "string" + } + } + } + } + } + } + }, + "ClusterVolumeSpec": { + "type": "object", + "description": "Cluster-specific options used to create the volume.\n", + "properties": { + "Group": { + "type": "string", + "description": "Group defines the volume group of this volume. Volumes belonging to\nthe same group can be referred to by group name when creating\nServices. Referring to a volume by group instructs Swarm to treat\nvolumes in that group interchangeably for the purpose of scheduling.\nVolumes with an empty string for a group technically all belong to\nthe same, emptystring group.\n" + }, + "AccessMode": { + "type": "object", + "description": "Defines how the volume is used by tasks.\n", + "properties": { + "Scope": { + "type": "string", + "description": "The set of nodes this volume can be used on at one time.\n- `single` The volume may only be scheduled to one node at a time.\n- `multi` the volume may be scheduled to any supported number of nodes at a time.\n", + "default": "single", + "enum": [ + "single", + "multi" + ], + "nullable": false + }, + "Sharing": { + "type": "string", + "description": "The number and way that different tasks can use this volume\nat one time.\n- `none` The volume may only be used by one task at a time.\n- `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly\n- `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.\n- `all` The volume may have any number of readers and writers.\n", + "default": "none", + "enum": [ + "none", + "readonly", + "onewriter", + "all" + ], + "nullable": false + }, + "MountVolume": { + "type": "object", + "description": "Options for using this volume as a Mount-type volume.\n\n Either MountVolume or BlockVolume, but not both, must be\n present.\n properties:\n FsType:\n type: \"string\"\n description: |\n Specifies the filesystem type for the mount volume.\n Optional.\n MountFlags:\n type: \"array\"\n description: |\n Flags to pass when mounting the volume. Optional.\n items:\n type: \"string\"\nBlockVolume:\n type: \"object\"\n description: |\n Options for using this volume as a Block-type volume.\n Intentionally empty.\n" + }, + "Secrets": { + "type": "array", + "description": "Swarm Secrets that are passed to the CSI storage plugin when\noperating on this volume.\n", + "items": { + "type": "object", + "description": "One cluster volume secret entry. Defines a key-value pair that\nis passed to the plugin.\n", + "properties": { + "Key": { + "type": "string", + "description": "Key is the name of the key of the key-value pair passed to\nthe plugin.\n" + }, + "Secret": { + "type": "string", + "description": "Secret is the swarm Secret object from which to read data.\nThis can be a Secret name or ID. The Secret data is\nretrieved by swarm and used as the value of the key-value\npair passed to the plugin.\n" + } + } + } + }, + "AccessibilityRequirements": { + "type": "object", + "description": "Requirements for the accessible topology of the volume. These\nfields are optional. For an in-depth description of what these\nfields mean, see the CSI specification.\n", + "properties": { + "Requisite": { + "type": "array", + "description": "A list of required topologies, at least one of which the\nvolume must be accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + }, + "Preferred": { + "type": "array", + "description": "A list of topologies that the volume should attempt to be\nprovisioned in.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + } + }, + "CapacityRange": { + "type": "object", + "description": "The desired capacity that the volume should be created with. If\nempty, the plugin will decide the capacity.\n", + "properties": { + "RequiredBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must be at least this big. The value of 0\nindicates an unspecified minimum\n" + }, + "LimitBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must not be bigger than this. The value of 0\nindicates an unspecified maximum.\n" + } + } + }, + "Availability": { + "type": "string", + "description": "The availability of the volume for use in tasks.\n- `active` The volume is fully available for scheduling on the cluster\n- `pause` No new workloads should use the volume, but existing workloads are not stopped.\n- `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.\n", + "default": "active", + "enum": [ + "active", + "pause", + "drain" + ], + "nullable": false + } + } + } + } + }, + "Topology": { + "description": "A map of topological domains to topological segments. For in depth\ndetails, see documentation for the Topology object in the CSI\nspecification.\n", + "type": "object", + "properties": { + "Segments": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "AttestationStatement": { + "x-go-name": "AttestationStatement", + "description": "AttestationStatement is a single in-toto statement attached to an image.\n", + "type": "object", + "required": [ + "Descriptor", + "PredicateType" + ], + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "PredicateType": { + "description": "The in-toto predicate type URI of this statement.", + "type": "string", + "example": "https://slsa.dev/provenance/v0.2" + }, + "Statement": { + "description": "The verbatim in-toto statement JSON. Only included when the caller\nopts in via the `statement=true` query parameter; otherwise absent.\n", + "type": "object", + "nullable": true + } + } + }, + "ImageManifestSummary": { + "x-go-name": "ManifestSummary", + "description": "ImageManifestSummary represents a summary of an image manifest.\n", + "type": "object", + "required": [ + "ID", + "Descriptor", + "Available", + "Size", + "Kind" + ], + "properties": { + "ID": { + "description": "ID is the content-addressable ID of an image and is the same as the\ndigest of the image manifest.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + }, + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Available": { + "description": "Indicates whether all the child content (image config, layers) is fully available locally.", + "type": "boolean", + "example": true + }, + "Size": { + "type": "object", + "required": [ + "Content", + "Total" + ], + "properties": { + "Total": { + "type": "integer", + "format": "int64", + "example": 8213251, + "description": "Total is the total size (in bytes) of all the locally present\ndata (both distributable and non-distributable) that's related to\nthis manifest and its children.\nThis equal to the sum of [Content] size AND all the sizes in the\n[Size] struct present in the Kind-specific data struct.\nFor example, for an image kind (Kind == \"image\")\nthis would include the size of the image content and unpacked\nimage snapshots ([Size.Content] + [ImageData.Size.Unpacked]).\n" + }, + "Content": { + "description": "Content is the size (in bytes) of all the locally present\ncontent in the content store (e.g. image config, layers)\nreferenced by this manifest and its children.\nThis only includes blobs in the content store.\n", + "type": "integer", + "format": "int64", + "example": 3987495 + } + }, + "nullable": false + }, + "Kind": { + "type": "string", + "example": "image", + "enum": [ + "image", + "attestation", + "unknown" + ], + "description": "The kind of the manifest.\n\nkind | description\n-------------|-----------------------------------------------------------\nimage | Image manifest that can be used to start a container.\nattestation | Attestation manifest produced by the Buildkit builder for a specific image manifest.\n" + }, + "ImageData": { + "description": "The image data for the image manifest.\nThis field is only populated when Kind is \"image\".\n", + "type": "object", + "x-omitempty": true, + "required": [ + "Platform", + "Containers", + "Size", + "UnpackedSize" + ], + "properties": { + "Platform": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIPlatform" + }, + { + "description": "OCI platform of the image. This will be the platform specified in the\nmanifest descriptor from the index/manifest list.\nIf it's not available, it will be obtained from the image config.\n" + } + ] + }, + "Identity": { + "allOf": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "description": "Identity holds information about the identity and origin of this image.\nFor image list responses, this can duplicate Build/Pull fields across\nimage manifests, because those parts are image-level metadata.\n", + "x-nullable": true + } + ] + }, + "Containers": { + "description": "The IDs of the containers that are using this image.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430", + "abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e" + ] + }, + "Size": { + "type": "object", + "required": [ + "Unpacked" + ], + "properties": { + "Unpacked": { + "type": "integer", + "format": "int64", + "example": 3987495, + "description": "Unpacked is the size (in bytes) of the locally unpacked\n(uncompressed) image content that's directly usable by the containers\nrunning this image.\nIt's independent of the distributable content - e.g.\nthe image might still have an unpacked data that's still used by\nsome container even when the distributable/compressed content is\nalready gone.\n" + } + }, + "nullable": false + } + }, + "nullable": true + }, + "AttestationData": { + "description": "The image data for the attestation manifest.\nThis field is only populated when Kind is \"attestation\".\n", + "type": "object", + "x-omitempty": true, + "required": [ + "For" + ], + "properties": { + "For": { + "description": "The digest of the image manifest that this attestation is for.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + } + }, + "nullable": true + } + } + } + } + } +} diff --git a/prototypes/api-docs/migrations/engine-1.55.json b/prototypes/api-docs/migrations/engine-1.55.json new file mode 100644 index 000000000000..5abc6e1793b3 --- /dev/null +++ b/prototypes/api-docs/migrations/engine-1.55.json @@ -0,0 +1,52560 @@ +{ + "api": "engine-1.55", + "source": { + "id": "engine-1.55", + "product": "engine", + "title": "Docker Engine", + "source": "_vendor/github.com/moby/moby/api/docs/v1.55.yaml", + "owner": "moby/moby", + "moduleVersion": "github.com/moby/moby/api@v1.56.0", + "manual": "/manuals/engine/", + "connection": "unix", + "auth": "Connect to a daemon you operate. Local socket permissions control access; remote daemons require their configured transport protection. X-Registry-Auth delegates registry credentials and does not authenticate the daemon caller.", + "guides": [ + "/manuals/engine/security/protect-access.md", + "/manuals/engine/daemon/remote-access.md" + ], + "sha256": "5464356f9e0ba0d6b01d90564b7f6438aca69d9fc627892fc4d824645ddb9710" + }, + "convertedSha256": "492c9d497f3ff5e9e1e9b069f603ff3b8791a28a7abfc99ffae0279137a35a40", + "profile": "docker-docs-prototype-1", + "changes": [ + { + "pointer": "/basePath", + "beforePresent": true, + "afterPresent": false, + "before": "/v1.55", + "id": "engine-1.55-c20ed503b4c1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/basePath", + "destinationPointer": null + }, + { + "pointer": "/components", + "beforePresent": false, + "afterPresent": true, + "after": { + "requestBodies": { + "PluginPrivilegeArray": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + } + } + }, + "schemas": { + "ImageHistoryResponseItem": { + "type": "object", + "x-go-name": "HistoryResponseItem", + "title": "HistoryResponseItem", + "description": "individual image layer information in response to ImageHistory operation", + "required": [ + "Id", + "Created", + "CreatedBy", + "Tags", + "Size", + "Comment" + ], + "properties": { + "Id": { + "type": "string" + }, + "Created": { + "type": "integer", + "format": "int64" + }, + "CreatedBy": { + "type": "string" + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64" + }, + "Comment": { + "type": "string" + } + } + }, + "PortSummary": { + "type": "object", + "description": "Describes a port-mapping between the container and the host.\n", + "required": [ + "PrivatePort", + "Type" + ], + "properties": { + "IP": { + "type": "string", + "format": "ip-address", + "description": "Host IP address that the container's port is mapped to", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "PrivatePort": { + "type": "integer", + "format": "uint16", + "description": "Port on the container" + }, + "PublicPort": { + "type": "integer", + "format": "uint16", + "description": "Port exposed on the host" + }, + "Type": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + } + }, + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountType": { + "description": "The mount type. Available types:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.", + "type": "string", + "enum": [ + "bind", + "cluster", + "image", + "npipe", + "tmpfs", + "volume" + ], + "example": "volume" + }, + "MountPoint": { + "type": "object", + "description": "MountPoint represents a mount point configuration inside the container.\nThis is used for reporting the mountpoints in use by a container.\n", + "properties": { + "Type": { + "description": "The mount type:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.\n", + "allOf": [ + { + "$ref": "#/components/schemas/MountType" + } + ], + "example": "volume" + }, + "Name": { + "description": "Name is the name reference to the underlying data defined by `Source`\ne.g., the volume name.\n", + "type": "string", + "example": "myvolume" + }, + "Source": { + "description": "Source location of the mount.\n\nFor volumes, this contains the storage location of the volume (within\n`/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\nthe source (host) part of the bind-mount. For `tmpfs` mount points, this\nfield is empty.\n", + "type": "string", + "example": "/var/lib/docker/volumes/myvolume/_data" + }, + "Destination": { + "description": "Destination is the path relative to the container root (`/`) where\nthe `Source` is mounted inside the container.\n", + "type": "string", + "example": "/usr/share/nginx/html/" + }, + "Driver": { + "description": "Driver is the volume driver used to create the volume (if it is a volume).\n", + "type": "string", + "example": "local" + }, + "Mode": { + "description": "Mode is a comma separated list of options supplied by the user when\ncreating the bind/volume mount.\n\nThe default is platform-specific (`\"z\"` on Linux, empty on Windows).\n", + "type": "string", + "example": "z" + }, + "RW": { + "description": "Whether the mount is mounted writable (read-write).\n", + "type": "boolean", + "example": true + }, + "Propagation": { + "description": "Propagation describes how mounts are propagated from the host into the\nmount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)\nfor details. This field is not used on Windows.\n", + "type": "string", + "example": "" + } + } + }, + "DeviceMapping": { + "type": "object", + "description": "A device mapping between the host and container", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "DeviceRequest": { + "type": "object", + "description": "A request for devices to be sent to device drivers", + "properties": { + "Driver": { + "description": "The name of the device driver to use for this request.\n\nNote that if this is specified the capabilities are ignored when\nselecting a device driver.\n", + "type": "string", + "example": "nvidia" + }, + "Count": { + "type": "integer", + "example": -1 + }, + "DeviceIDs": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ] + }, + "Capabilities": { + "description": "A list of capabilities; an OR list of AND lists of capabilities.\n\nNote that if a driver is specified the capabilities have no effect on\nselecting a driver as the driver name is used directly.\n\nNote that if no driver is specified the capabilities are used to\nselect a driver with the required capabilities.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "gpu", + "nvidia", + "compute" + ] + ] + }, + "Options": { + "description": "Driver-specific options, specified as a key/value pairs. These options\nare passed directly to the driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "description": "Device path", + "type": "string" + }, + "Rate": { + "description": "Rate", + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "description": "Container path.", + "type": "string" + }, + "Source": { + "description": "Mount source (e.g. a volume name, a host path). The source cannot be\nspecified when using `Type=tmpfs`. For `Type=bind`, the source path\nmust either exist, or the `CreateMountpoint` must be set to `true` to\ncreate the source path on the host if missing.\n\nFor `Type=npipe`, the pipe must exist prior to creating the container.", + "type": "string" + }, + "Type": { + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container.\n- `cluster` a Swarm cluster volume\n- `image` Mounts an image.\n- `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container.\n- `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n", + "allOf": [ + { + "$ref": "#/components/schemas/MountType" + } + ] + }, + "ReadOnly": { + "description": "Whether the mount should be read-only.", + "type": "boolean" + }, + "Consistency": { + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`.", + "type": "string" + }, + "BindOptions": { + "description": "Optional configuration for the `bind` type.", + "type": "object", + "properties": { + "Propagation": { + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "type": "string", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + }, + "NonRecursive": { + "description": "Disable recursive bind mount.", + "type": "boolean", + "default": false + }, + "CreateMountpoint": { + "description": "Create mount point on host if missing", + "type": "boolean", + "default": false + }, + "ReadOnlyNonRecursive": { + "description": "Make the mount non-recursively read-only, but still leave the mount recursive\n(unless NonRecursive is set to `true` in conjunction).\n\nAdded in v1.44, before that version all read-only mounts were\nnon-recursive by default. To match the previous behaviour this\nwill default to `true` for clients on versions prior to v1.44.\n", + "type": "boolean", + "default": false + }, + "ReadOnlyForceRecursive": { + "description": "Raise an error if the mount cannot be made recursively read-only.", + "type": "boolean", + "default": false + } + } + }, + "VolumeOptions": { + "description": "Optional configuration for the `volume` type.", + "type": "object", + "properties": { + "NoCopy": { + "description": "Populate volume with data from the target.", + "type": "boolean", + "default": false + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "DriverConfig": { + "description": "Map of driver specific options", + "type": "object", + "properties": { + "Name": { + "description": "Name of the driver to use to create the volume.", + "type": "string" + }, + "Options": { + "description": "key/value map of driver specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "Subpath": { + "description": "Source path inside the volume. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-volume/subdirectory" + } + } + }, + "ImageOptions": { + "description": "Optional configuration for the `image` type.", + "type": "object", + "properties": { + "Subpath": { + "description": "Source path inside the image. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-image/subdirectory" + } + } + }, + "TmpfsOptions": { + "description": "Optional configuration for the `tmpfs` type.", + "type": "object", + "properties": { + "SizeBytes": { + "description": "The size for the tmpfs mount in bytes.", + "type": "integer", + "format": "int64" + }, + "Mode": { + "description": "The permission mode for the tmpfs mount in an integer.\nThe value must not be in octal format (e.g. 755) but rather\nthe decimal representation of the octal value (e.g. 493).\n", + "type": "integer" + }, + "Options": { + "description": "The options to be passed to the tmpfs mount. An array of arrays.\nFlag options should be provided as 1-length arrays. Other types\nshould be provided as as 2-length arrays, where the first item is\nthe key and the second the value.\n", + "type": "array", + "items": { + "type": "array", + "minItems": 1, + "maxItems": 2, + "items": { + "type": "string" + } + }, + "example": [ + [ + "noexec" + ] + ] + } + } + } + } + }, + "RestartPolicy": { + "description": "The behavior to apply when the container exits. The default is not to\nrestart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is\nadded before each restart to prevent flooding the server.\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `no` Do not automatically restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "no", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up.\n" + } + } + }, + "Resources": { + "description": "A container's resources (cgroups config, ulimits, etc)", + "type": "object", + "properties": { + "CpuShares": { + "description": "An integer value representing this container's relative CPU weight\nversus other containers.\n", + "type": "integer" + }, + "Memory": { + "description": "Memory limit in bytes.", + "type": "integer", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "description": "Path to `cgroups` under which the container's `cgroup` is created. If\nthe path is not absolute, the path is considered to be relative to the\n`cgroups` path of the init process. Cgroups are created if they do not\nalready exist.\n", + "type": "string" + }, + "BlkioWeight": { + "description": "Block IO weight (relative weight).", + "type": "integer", + "minimum": 0, + "maximum": 1000 + }, + "BlkioWeightDevice": { + "description": "Block IO weight (relative device weight) in the form:\n\n```\n[{\"Path\": \"device_path\", \"Weight\": weight}]\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "type": "integer", + "minimum": 0 + } + } + } + }, + "BlkioDeviceReadBps": { + "description": "Limit read rate (bytes per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "description": "Limit write rate (bytes per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "description": "Limit read rate (IO per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "description": "Limit write rate (IO per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "CpuPeriod": { + "description": "The length of a CPU period in microseconds.", + "type": "integer", + "format": "int64" + }, + "CpuQuota": { + "description": "Microseconds of CPU time that the container can get in a CPU period.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimePeriod": { + "description": "The length of a CPU real-time period in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpusetCpus": { + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n", + "type": "string", + "example": "0-3" + }, + "CpusetMems": { + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\neffective on NUMA systems.\n", + "type": "string" + }, + "Devices": { + "description": "A list of devices to add to the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "description": "a list of cgroup rules to apply to the container", + "type": "array", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DeviceRequests": { + "description": "A list of requests for devices to be sent to device drivers.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceRequest" + } + }, + "MemoryReservation": { + "description": "Memory soft limit in bytes.", + "type": "integer", + "format": "int64" + }, + "MemorySwap": { + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited\nswap.\n", + "type": "integer", + "format": "int64" + }, + "MemorySwappiness": { + "description": "Tune a container's memory swappiness behavior. Accepts an integer\nbetween 0 and 100.\n", + "type": "integer", + "format": "int64", + "minimum": 0, + "maximum": 100 + }, + "NanoCpus": { + "description": "CPU quota in units of 10-9 CPUs.", + "type": "integer", + "format": "int64" + }, + "OomKillDisable": { + "description": "Disable OOM Killer for the container.", + "type": "boolean" + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": [ + "boolean", + "null" + ] + }, + "PidsLimit": { + "description": "Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\nto not change.\n", + "type": [ + "integer", + "null" + ], + "format": "int64" + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example:\n\n```\n{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + }, + "CpuCount": { + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "CpuPercent": { + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "IOMaximumIOps": { + "description": "Maximum IOps for the container system drive (Windows only)", + "type": "integer", + "format": "int64" + }, + "IOMaximumBandwidth": { + "description": "Maximum IO in bytes per second for the container system drive\n(Windows only).\n", + "type": "integer", + "format": "int64" + } + } + }, + "Limit": { + "description": "An object describing a limit on resources which can be requested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "Pids": { + "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n", + "type": "integer", + "format": "int64", + "default": 0, + "example": 100 + } + } + }, + "ResourceObject": { + "description": "An object describing the resources which can be advertised by a node and\nrequested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + } + } + }, + "GenericResources": { + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`).\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + }, + "HealthConfig": { + "description": "A test to perform to check that the container is healthy.\nHealthcheck commands should be side-effect free.\n", + "type": "object", + "properties": { + "Test": { + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n\nA non-zero exit code indicates a failed healthcheck:\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (treated as unhealthy)\n- other values: error running probe\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "Timeout": { + "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n\nIf the health check command does not complete within this timeout,\nthe check is considered failed and the health check process is\nforcibly terminated without a graceful shutdown.\n", + "type": "integer", + "format": "int64" + }, + "Retries": { + "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n", + "type": "integer" + }, + "StartPeriod": { + "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "StartInterval": { + "description": "The time to wait between checks in nanoseconds during the start period.\nIt should be 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + } + } + }, + "Health": { + "description": "Health stores information about the container's healthcheck results.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Status": { + "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n", + "type": "string", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + }, + "Log": { + "type": "array", + "description": "Log contains the last few results (oldest first)\n", + "items": { + "$ref": "#/components/schemas/HealthcheckResult" + } + } + } + }, + "HealthcheckResult": { + "description": "HealthcheckResult stores information about a single run of a healthcheck probe\n", + "type": [ + "object", + "null" + ], + "properties": { + "Start": { + "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2020-01-04T10:44:24.496525531Z" + }, + "End": { + "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2020-01-04T10:45:21.364524523Z" + }, + "ExitCode": { + "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n", + "type": "integer", + "example": 0 + }, + "Output": { + "description": "Output from last check", + "type": "string" + } + } + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written", + "example": "" + }, + "LogConfig": { + "type": "object", + "description": "The logging configuration for this container", + "properties": { + "Type": { + "description": "Name of the logging driver used for the container or \"none\"\nif logging is disabled.", + "type": "string", + "enum": [ + "local", + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "description": "Driver-specific configuration options for the logging driver.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "5", + "max-size": "10m" + } + } + } + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to the container.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "type": [ + "array", + "null" + ], + "description": "Initial console size, as an `[height, width]` array.\n", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + }, + "Annotations": { + "type": "object", + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n", + "additionalProperties": { + "type": "string" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "enum": [ + "private", + "host" + ], + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n" + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string", + "format": "ip-address", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n", + "additionalProperties": { + "type": "string" + } + }, + "Tmpfs": { + "type": "object", + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n", + "additionalProperties": { + "type": "string" + } + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "type": "integer", + "format": "int64", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "minimum": 0 + }, + "Sysctls": { + "type": [ + "object", + "null" + ], + "description": "A list of kernel parameters (sysctls) to set in the container.\n\nThis field is omitted if not set.", + "additionalProperties": { + "type": "string" + }, + "example": { + "net.ipv4.ip_forward": "1" + } + }, + "Runtime": { + "type": [ + "string", + "null" + ], + "description": "Runtime to use with this container." + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/asound", + "/proc/acpi", + "/proc/kcore", + "/proc/keys", + "/proc/latency_stats", + "/proc/timer_list", + "/proc/timer_stats", + "/proc/sched_debug", + "/proc/scsi", + "/sys/firmware", + "/sys/devices/virtual/powercap" + ] + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/bus", + "/proc/fs", + "/proc/irq", + "/proc/sys", + "/proc/sysrq-trigger" + ] + } + } + } + ] + }, + "ContainerConfig": { + "description": "Configuration for a container that is portable between hosts.\n", + "type": "object", + "properties": { + "Hostname": { + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.\n", + "type": "string", + "example": "439f4e91bd1d" + }, + "Domainname": { + "description": "The domain name to use for the container.\n", + "type": "string" + }, + "User": { + "description": "Commands run as this user inside the container. If omitted, commands\nrun as the user specified in the image the container was started from.\n\nCan be either user-name or UID, and optional group-name or GID,\nseparated by a colon (`[<:group-name|GID>]`).", + "type": "string", + "example": "123:456" + }, + "AttachStdin": { + "description": "Whether to attach to `stdin`.", + "type": "boolean", + "default": false + }, + "AttachStdout": { + "description": "Whether to attach to `stdout`.", + "type": "boolean", + "default": true + }, + "AttachStderr": { + "description": "Whether to attach to `stderr`.", + "type": "boolean", + "default": true + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Tty": { + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.\n", + "type": "boolean", + "default": false + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean", + "default": false + }, + "StdinOnce": { + "description": "Close `stdin` after one attached client disconnects", + "type": "boolean", + "default": false + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": [ + "boolean", + "null" + ], + "default": false, + "example": false + }, + "Image": { + "description": "The name (or reference) of the image to use when creating the container,\nor which was used when the container was created.\n", + "type": "string", + "example": "example-image:1.0" + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "NetworkDisabled": { + "description": "Disable networking for the container.", + "type": [ + "boolean", + "null" + ] + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [] + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": [ + "string", + "null" + ], + "example": "SIGTERM" + }, + "StopTimeout": { + "description": "Timeout to stop a container in seconds. If omitted, the daemon-wide\ndefault (`default-stop-timeout`) is used.\n", + "type": [ + "integer", + "null" + ] + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ] + } + } + }, + "ImageConfig": { + "description": "Configuration of the image. These fields are used as defaults\nwhen starting a container from the image.\n", + "type": "object", + "properties": { + "User": { + "description": "The user that commands are run as inside the container.", + "type": "string", + "example": "web:web" + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": [ + "boolean", + "null" + ], + "default": false, + "example": false + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "/app/data": {}, + "/app/config": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [] + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": [ + "string", + "null" + ], + "example": "SIGTERM" + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ] + } + } + }, + "NetworkingConfig": { + "description": "NetworkingConfig represents the container's networking configuration for\neach of its interfaces.\nIt is used for the networking configs specified in the `docker create`\nand `docker network connect` commands.\n", + "type": "object", + "properties": { + "EndpointsConfig": { + "description": "A mapping of network name to endpoint configuration for that network.\nThe endpoint configuration can be left empty to connect to that\nnetwork with no particular endpoint configuration.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + }, + "example": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "MacAddress": "02:42:ac:12:05:02", + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + }, + "NetworkSettings": { + "description": "NetworkSettings exposes the network settings in the API", + "type": "object", + "properties": { + "SandboxID": { + "description": "SandboxID uniquely represents a container's network stack.", + "type": "string", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "SandboxKey": { + "description": "SandboxKey is the full path of the netns handle", + "type": "string", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "Ports": { + "$ref": "#/components/schemas/PortMap" + }, + "Networks": { + "description": "Information about all networks that the container is connected to.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + } + }, + "Address": { + "description": "Address represents an IPv4 or IPv6 IP address.", + "type": "object", + "properties": { + "Addr": { + "description": "IP address.", + "type": "string" + }, + "PrefixLen": { + "description": "Mask length of the IP address.", + "type": "integer" + } + } + }, + "PortMap": { + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "type": "object", + "additionalProperties": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/PortBinding" + } + }, + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ], + "2377/tcp": null + } + }, + "PortBinding": { + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n", + "type": "object", + "properties": { + "HostIp": { + "description": "Host IP address that the container's port is mapped to.", + "type": "string", + "example": "127.0.0.1", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "HostPort": { + "description": "Host port number that the container's port is mapped to.", + "type": "string", + "example": "4443" + } + } + }, + "DriverData": { + "description": "Information about the storage driver used to store the container's and\nimage's filesystem.\n", + "type": "object", + "required": [ + "Name", + "Data" + ], + "properties": { + "Name": { + "description": "Name of the storage driver.", + "type": "string", + "example": "overlay2" + }, + "Data": { + "description": "Low-level storage metadata, provided as key/value pairs.\n\nThis information is driver-specific, and depends on the storage-driver\nin use, and should be used for informational purposes only.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + } + } + } + }, + "Storage": { + "description": "Information about the storage used by the container.\n", + "type": "object", + "properties": { + "RootFS": { + "allOf": [ + { + "$ref": "#/components/schemas/RootFSStorage" + }, + { + "anyOf": [ + { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object" + }, + { + "type": "null" + } + ] + } + ] + } + } + }, + "RootFSStorage": { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorage", + "properties": { + "Snapshot": { + "allOf": [ + { + "$ref": "#/components/schemas/RootFSStorageSnapshot" + }, + { + "anyOf": [ + { + "description": "Information about the snapshot used for the container's root filesystem.\n", + "type": "object" + }, + { + "type": "null" + } + ] + } + ] + } + } + }, + "RootFSStorageSnapshot": { + "description": "Information about a snapshot backend of the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorageSnapshot", + "properties": { + "Name": { + "description": "Name of the snapshotter.", + "type": "string" + } + } + }, + "FilesystemChange": { + "description": "Change in the container's filesystem.\n", + "type": "object", + "required": [ + "Path", + "Kind" + ], + "properties": { + "Path": { + "description": "Path to file or directory that has changed.\n", + "type": "string" + }, + "Kind": { + "$ref": "#/components/schemas/ChangeType" + } + } + }, + "ChangeType": { + "description": "Kind of change\n\nCan be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "type": "integer", + "format": "uint8", + "enum": [ + 0, + 1, + 2 + ] + }, + "ImageInspect": { + "description": "Information about an image in the local image cache.\n", + "type": "object", + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "Descriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n" + }, + { + "type": "null" + } + ] + } + ] + }, + "Manifests": { + "description": "Manifests is a list of image manifests available in this image. It\nprovides a more detailed view of the platform-specific image manifests or\nother image-attached data like build attestations.\n\nOnly available if the daemon provides a multi-platform image store\nand the `manifests` option is set in the inspect request.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ImageManifestSummary" + } + }, + "Identity": { + "allOf": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "anyOf": [ + { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name." + }, + { + "type": "null" + } + ] + } + ] + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ] + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + }, + "Comment": { + "description": "Optional message that was set when committing or importing the image.\n", + "type": [ + "string", + "null" + ], + "example": "" + }, + "Created": { + "description": "Date and time at which the image was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if present in the image,\nand omitted otherwise.\n", + "type": [ + "string", + "null" + ], + "format": "dateTime", + "example": "2022-02-04T21:20:12.497794809Z" + }, + "Author": { + "description": "Name of the author that was specified when committing the image, or as\nspecified through MAINTAINER (deprecated) in the Dockerfile.\n", + "type": [ + "string", + "null" + ], + "example": "" + }, + "Config": { + "$ref": "#/components/schemas/ImageConfig" + }, + "Architecture": { + "description": "Hardware CPU architecture that the image runs on.\n", + "type": "string", + "example": "arm" + }, + "Variant": { + "description": "CPU architecture variant (presently ARM-only).\n", + "type": [ + "string", + "null" + ], + "example": "v7" + }, + "Os": { + "description": "Operating System the image is built to run on.\n", + "type": "string", + "example": "linux" + }, + "OsVersion": { + "description": "Operating System version the image is built to run on (especially\nfor Windows).\n", + "type": [ + "string", + "null" + ], + "example": "" + }, + "Size": { + "description": "Total size of the image including all layers it is composed of.\n", + "type": "integer", + "format": "int64", + "example": 1239828 + }, + "GraphDriver": { + "allOf": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ] + }, + "RootFS": { + "description": "Information about the image's RootFS, including the layer IDs.\n", + "type": "object", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "example": "layers" + }, + "Layers": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ] + } + } + }, + "Metadata": { + "description": "Additional metadata of the image in the local cache. This information\nis local to the daemon, and not part of the image itself.\n", + "type": "object", + "properties": { + "LastTagTime": { + "description": "Date and time at which the image was last tagged in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if the image was tagged locally,\nand omitted otherwise.\n", + "type": [ + "string", + "null" + ], + "format": "dateTime", + "example": "2022-02-28T14:40:02.623929178Z" + } + } + } + } + }, + "Identity": { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "type": "object", + "properties": { + "Signature": { + "description": "Signature contains the properties of verified signatures for the image.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SignatureIdentity" + } + }, + "Pull": { + "description": "Pull contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.\nAfter successful push this images also contains the pushed repository location.", + "type": "array", + "items": { + "$ref": "#/components/schemas/PullIdentity" + } + }, + "Build": { + "description": "Build contains build reference information if image was created via build.", + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildIdentity" + } + } + } + }, + "BuildIdentity": { + "description": "BuildIdentity contains build reference information if image was created via build.", + "type": "object", + "properties": { + "Ref": { + "description": "Ref is the identifier for the build request. This reference can be used to\nlook up the build details in BuildKit history API.", + "type": "string" + }, + "CreatedAt": { + "description": "CreatedAt is the time when the build ran.", + "type": "string", + "format": "date-time" + } + } + }, + "PullIdentity": { + "description": "PullIdentity contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.", + "type": "object", + "properties": { + "Repository": { + "description": "Repository is the remote repository location the image was pulled from.", + "type": "string" + } + } + }, + "SignatureIdentity": { + "description": "SignatureIdentity contains the properties of verified signatures for the image.", + "type": "object", + "properties": { + "Name": { + "description": "Name is a textual description summarizing the type of signature.", + "type": "string" + }, + "Timestamps": { + "description": "Timestamps contains a list of verified signed timestamps for the signature.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SignatureTimestamp" + } + }, + "KnownSigner": { + "allOf": [ + { + "$ref": "#/components/schemas/KnownSignerIdentity" + }, + { + "description": "KnownSigner is an identifier for a special signer identity that is known to the implementation." + } + ] + }, + "DockerReference": { + "description": "DockerReference is the Docker image reference associated with the signature.\nThis is an optional field only present in older hashedrecord signatures.", + "type": "string" + }, + "Signer": { + "allOf": [ + { + "$ref": "#/components/schemas/SignerIdentity" + }, + { + "description": "Signer contains information about the signer certificate used to sign the image." + } + ] + }, + "SignatureType": { + "allOf": [ + { + "$ref": "#/components/schemas/SignatureType" + }, + { + "description": "SignatureType is the type of signature format. E.g. \"bundle-v0.3\" or \"hashedrecord\"." + } + ] + }, + "Error": { + "description": "Error contains error information if signature verification failed.\nOther fields will be empty in this case.", + "type": "string" + }, + "Warnings": { + "description": "Warnings contains any warnings that occurred during signature verification.\nFor example, if there was no internet connectivity and cached trust roots were used.\nWarning does not indicate a failed verification but may point to configuration issues.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SignatureTimestamp": { + "description": "SignatureTimestamp contains information about a verified signed timestamp for an image signature.", + "type": "object", + "properties": { + "Type": { + "$ref": "#/components/schemas/SignatureTimestampType" + }, + "URI": { + "type": "string" + }, + "Timestamp": { + "type": "string", + "format": "date-time" + } + } + }, + "SignatureTimestampType": { + "description": "SignatureTimestampType is the type of timestamp used in the signature.", + "type": "string", + "enum": [ + "Tlog", + "TimestampAuthority" + ] + }, + "SignatureType": { + "description": "SignatureType is the type of signature format.", + "type": "string", + "enum": [ + "bundle-v0.3", + "simplesigning-v1" + ] + }, + "KnownSignerIdentity": { + "description": "KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation.", + "type": "string", + "enum": [ + "DHI" + ] + }, + "SignerIdentity": { + "description": "SignerIdentity contains information about the signer certificate used to sign the image.", + "type": "object", + "properties": { + "CertificateIssuer": { + "type": "string", + "description": "CertificateIssuer is the certificate issuer." + }, + "SubjectAlternativeName": { + "type": "string", + "description": "SubjectAlternativeName is the certificate subject alternative name." + }, + "Issuer": { + "type": "string", + "description": "The OIDC issuer. Should match `iss` claim of ID token or, in the case of\na federated login like Dex it should match the issuer URL of the\nupstream issuer. The issuer is not set the extensions are invalid and\nwill fail to render." + }, + "BuildSignerURI": { + "type": "string", + "description": "Reference to specific build instructions that are responsible for signing." + }, + "BuildSignerDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the build instructions that is responsible for signing." + }, + "RunnerEnvironment": { + "type": "string", + "description": "Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure." + }, + "SourceRepositoryURI": { + "type": "string", + "description": "Source repository URL that the build was based on." + }, + "SourceRepositoryDigest": { + "type": "string", + "description": "Immutable reference to a specific version of the source code that the build was based upon." + }, + "SourceRepositoryRef": { + "type": "string", + "description": "Source Repository Ref that the build run was based upon." + }, + "SourceRepositoryIdentifier": { + "type": "string", + "description": "Immutable identifier for the source repository the workflow was based upon." + }, + "SourceRepositoryOwnerURI": { + "type": "string", + "description": "Source repository owner URL of the owner of the source repository that the build was based on." + }, + "SourceRepositoryOwnerIdentifier": { + "type": "string", + "description": "Immutable identifier for the owner of the source repository that the workflow was based upon." + }, + "BuildConfigURI": { + "type": "string", + "description": "Build Config URL to the top-level/initiating build instructions." + }, + "BuildConfigDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the top-level/initiating build instructions." + }, + "BuildTrigger": { + "type": "string", + "description": "Event or action that initiated the build." + }, + "RunInvocationURI": { + "type": "string", + "description": "Run Invocation URL to uniquely identify the build execution." + }, + "SourceRepositoryVisibilityAtSigning": { + "type": "string", + "description": "Source repository visibility at the time of signing the certificate." + } + } + }, + "ImageSummary": { + "type": "object", + "x-go-name": "Summary", + "required": [ + "Id", + "ParentId", + "RepoTags", + "RepoDigests", + "Created", + "Size", + "SharedSize", + "Labels", + "Containers" + ], + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "ParentId": { + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "type": "string", + "example": "" + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ] + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + }, + "Created": { + "description": "Date and time at which the image was created as a Unix timestamp\n(number of seconds since EPOCH).\n", + "type": "integer", + "example": "1644009612" + }, + "Size": { + "description": "Total size of the image including all layers it is composed of.\n", + "type": "integer", + "format": "int64", + "example": 172064416 + }, + "SharedSize": { + "description": "Total size of image layers that are shared between this image and other\nimages.\n\nThis size is not calculated by default. `-1` indicates that the value\nhas not been set / calculated.\n", + "type": "integer", + "format": "int64", + "example": 1239828 + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Containers": { + "description": "Number of containers using this image. Includes both stopped and running\ncontainers.\n\n`-1` indicates that the value has not been set / calculated.\n", + "type": "integer", + "example": 2 + }, + "Manifests": { + "description": "Manifests is a list of manifests available in this image.\nIt provides a more detailed view of the platform-specific image manifests\nor other image-attached data like build attestations.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": "array", + "x-omitempty": true, + "items": { + "$ref": "#/components/schemas/ImageManifestSummary" + } + }, + "Descriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n" + }, + { + "type": "null" + } + ] + } + ] + } + } + }, + "ImagesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/image", + "description": "represents system data usage for image resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active images.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all images.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing unused images.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by images.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of image summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "AuthResponse": { + "description": "An identity token was generated successfully.\n", + "type": "object", + "required": [ + "Status" + ], + "properties": { + "Status": { + "description": "The status of the authentication", + "type": "string", + "example": "Login Succeeded" + }, + "IdentityToken": { + "description": "An opaque token used to authenticate a user after a successful login", + "type": "string", + "example": "9cbaf023786cd7..." + } + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "type": "object", + "required": [ + "Name", + "Driver", + "Mountpoint", + "Labels", + "Scope", + "Options" + ], + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "example": "custom" + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "example": "/var/lib/docker/volumes/tardis" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "description": "Date/Time the volume was created.", + "example": "2016-06-07T20:31:11.853781916Z" + }, + "Status": { + "type": "object", + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n", + "additionalProperties": { + "type": "object" + }, + "example": { + "hello": "world" + } + }, + "Labels": { + "type": "object", + "description": "User-defined key/value metadata.", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide,\nor `local` for machine level.\n", + "default": "local", + "enum": [ + "local", + "global" + ], + "example": "local" + }, + "ClusterVolume": { + "$ref": "#/components/schemas/ClusterVolume" + }, + "Options": { + "type": "object", + "description": "The driver specific options used when creating the volume.\n", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "UsageData": { + "type": [ + "object", + "null" + ], + "x-go-name": "UsageData", + "required": [ + "Size", + "RefCount" + ], + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "properties": { + "Size": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n" + }, + "RefCount": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n" + } + } + } + } + }, + "VolumesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/volume", + "description": "represents system data usage for volume resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active volumes.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all volumes.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive volumes.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by volumes.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of volumes.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Volume" + } + } + } + } + }, + "VolumeCreateRequest": { + "description": "Volume configuration", + "type": "object", + "title": "VolumeConfig", + "x-go-name": "CreateRequest", + "properties": { + "Name": { + "description": "The new volume's name. If not specified, Docker generates a name.\n", + "type": "string", + "example": "tardis" + }, + "Driver": { + "description": "Name of the volume driver to use.", + "type": "string", + "default": "local", + "example": "custom" + }, + "DriverOpts": { + "description": "A mapping of driver options and values. These options are\npassed directly to the driver and are driver specific.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "ClusterVolumeSpec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + } + }, + "VolumeListResponse": { + "type": "object", + "title": "VolumeListResponse", + "x-go-name": "ListResponse", + "description": "Volume list response", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes.\n", + "items": { + "type": "string" + }, + "example": [] + } + } + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "description": "Name of the network.\n", + "type": "string", + "example": "my_network", + "x-omitempty": false + }, + "Id": { + "description": "ID that uniquely identifies a network on a single machine.\n", + "type": "string", + "x-go-name": "ID", + "x-omitempty": false, + "example": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99" + }, + "Created": { + "description": "Date and time at which the network was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "x-omitempty": false, + "x-go-type": { + "type": "Time", + "import": { + "package": "time" + }, + "hints": { + "nullable": false + } + }, + "example": "2016-10-19T04:33:30.360899459Z" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level)\n", + "type": "string", + "x-omitempty": false, + "example": "local" + }, + "Driver": { + "description": "The name of the driver used to create the network (e.g. `bridge`,\n`overlay`).\n", + "type": "string", + "x-omitempty": false, + "example": "overlay" + }, + "EnableIPv4": { + "description": "Whether the network was created with IPv4 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": true + }, + "EnableIPv6": { + "description": "Whether the network was created with IPv6 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": false + }, + "IPAM": { + "allOf": [ + { + "$ref": "#/components/schemas/IPAM" + }, + { + "description": "The network's IP Address Management.\n", + "x-nullable": false, + "x-omitempty": false + } + ] + }, + "Internal": { + "description": "Whether the network is created to only allow internal networking\nconnectivity.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false + }, + "Attachable": { + "description": "Whether a global / swarm scope network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false + }, + "Ingress": { + "description": "Whether the network is providing the routing-mesh for the swarm cluster.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false + }, + "ConfigFrom": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigReference" + }, + { + "x-nullable": false, + "x-omitempty": false + } + ] + }, + "ConfigOnly": { + "description": "Whether the network is a config-only network. Config-only networks are\nplaceholder networks for network configurations to be used by other\nnetworks. Config-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "x-omitempty": false, + "default": false + }, + "Options": { + "description": "Network-specific options uses when creating the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "Metadata specific to the network being created.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Peers": { + "description": "List of peer nodes for an overlay network. This field is only present\nfor overlay networks, and omitted for other network types.\n", + "type": "array", + "x-omitempty": true, + "items": { + "$ref": "#/components/schemas/PeerInfo" + } + } + } + }, + "NetworkSummary": { + "description": "Network list response item", + "x-go-name": "Summary", + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Network" + } + ] + }, + "NetworkInspect": { + "description": "The body of the \"get network\" http response message.", + "x-go-name": "Inspect", + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Network" + } + ], + "properties": { + "Containers": { + "description": "Contains endpoints attached to the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "$ref": "#/components/schemas/EndpointResource" + }, + "example": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + } + }, + "Services": { + "description": "List of services using the network. This field is only present for\nswarm scope networks, and omitted for local scope networks.\n", + "type": "object", + "x-omitempty": true, + "additionalProperties": { + "x-go-type": { + "type": "ServiceInfo", + "hints": { + "nullable": false + } + } + } + }, + "Status": { + "allOf": [ + { + "$ref": "#/components/schemas/NetworkStatus" + }, + { + "description": "provides runtime information about the network such as the number of allocated IPs.\n" + } + ] + } + } + }, + "NetworkStatus": { + "description": "provides runtime information about the network such as the number of allocated IPs.\n", + "type": "object", + "x-go-name": "Status", + "properties": { + "IPAM": { + "$ref": "#/components/schemas/IPAMStatus" + } + } + }, + "ServiceInfo": { + "x-omitempty": false, + "description": "represents service parameters with the list of service's tasks\n", + "type": "object", + "properties": { + "VIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Ports": { + "type": "array", + "x-omitempty": false, + "items": { + "type": "string" + } + }, + "LocalLBIndex": { + "type": "integer", + "format": "int", + "x-omitempty": false, + "x-go-type": { + "type": "int" + } + }, + "Tasks": { + "type": "array", + "x-omitempty": false, + "items": { + "$ref": "#/components/schemas/NetworkTaskInfo" + } + } + } + }, + "NetworkTaskInfo": { + "x-omitempty": false, + "x-go-name": "Task", + "description": "carries the information about one backend task\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false + }, + "EndpointID": { + "type": "string", + "x-omitempty": false + }, + "EndpointIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Info": { + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + } + } + } + }, + "ConfigReference": { + "x-omitempty": false, + "description": "The config-only network source to provide the configuration for\nthis network.\n", + "type": "object", + "properties": { + "Network": { + "description": "The name of the config-only network that provides the network's\nconfiguration. The specified network must be an existing config-only\nnetwork. Only network names are allowed, not network IDs.\n", + "type": "string", + "x-omitempty": false, + "example": "config_only_network_01" + } + } + }, + "IPAM": { + "type": "object", + "x-omitempty": false, + "properties": { + "Driver": { + "description": "Name of the IPAM driver to use.", + "type": "string", + "default": "default", + "example": "default" + }, + "Config": { + "description": "List of IPAM configuration options, specified as a map:\n\n```\n{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/IPAMConfig" + } + }, + "Options": { + "description": "Driver-specific options, specified as a map.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + } + } + }, + "IPAMConfig": { + "type": "object", + "properties": { + "Subnet": { + "type": "string", + "example": "172.20.0.0/16" + }, + "IPRange": { + "type": "string", + "example": "172.20.10.0/24" + }, + "Gateway": { + "type": "string", + "example": "172.20.10.11" + }, + "AuxiliaryAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "IPAMStatus": { + "type": "object", + "x-omitempty": false, + "properties": { + "Subnets": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SubnetStatus" + }, + "example": { + "172.16.0.0/16": { + "IPsInUse": 3, + "DynamicIPsAvailable": 65533 + }, + "2001:db8:abcd:0012::0/96": { + "IPsInUse": 5, + "DynamicIPsAvailable": 4294967291 + } + }, + "x-go-type": { + "type": "SubnetStatuses", + "kind": "map" + } + } + } + }, + "SubnetStatus": { + "type": "object", + "x-omitempty": false, + "properties": { + "IPsInUse": { + "description": "Number of IP addresses in the subnet that are in use or reserved and are therefore unavailable for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + }, + "DynamicIPsAvailable": { + "description": "Number of IP addresses within the network's IPRange for the subnet that are available for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + } + } + }, + "EndpointResource": { + "type": "object", + "description": "contains network resources allocated and used for a container in a network.\n", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false, + "example": "container_1" + }, + "EndpointID": { + "type": "string", + "x-omitempty": false, + "example": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" + }, + "MacAddress": { + "type": "string", + "x-omitempty": false, + "example": "02:42:ac:13:00:02", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "IPv4Address": { + "type": "string", + "x-omitempty": false, + "example": "172.19.0.2/16", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "x-omitempty": false, + "example": "", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + } + } + }, + "PeerInfo": { + "description": "represents one peer of an overlay network.\n", + "type": "object", + "properties": { + "Name": { + "description": "ID of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "6869d7c1732b" + }, + "IP": { + "description": "IP-address of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "10.133.77.91", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + } + }, + "NetworkCreateResponse": { + "description": "OK response to NetworkCreate operation", + "type": "object", + "title": "NetworkCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warning" + ], + "properties": { + "Id": { + "description": "The ID of the created network.", + "type": "string", + "example": "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d" + }, + "Warning": { + "description": "Warnings encountered when creating the container", + "type": "string", + "example": "" + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + }, + "aux": { + "$ref": "#/components/schemas/ImageID" + } + } + }, + "BuildCache": { + "type": "object", + "description": "BuildCache contains information about a build cache record.\n", + "properties": { + "ID": { + "type": "string", + "description": "Unique ID of the build cache record.\n", + "example": "ndlpt0hhvkqcdfkputsk4cq9c" + }, + "Parents": { + "description": "List of parent build cache record IDs.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "hw53o5aio51xtltp5xjp8v7fx" + ] + }, + "Type": { + "type": "string", + "description": "Cache record type.\n", + "example": "regular", + "enum": [ + "internal", + "frontend", + "source.local", + "source.git.checkout", + "exec.cachemount", + "regular" + ] + }, + "Description": { + "type": "string", + "description": "Description of the build-step that produced the build cache.\n", + "example": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + }, + "InUse": { + "type": "boolean", + "description": "Indicates if the build cache is in use.\n", + "example": false + }, + "Shared": { + "type": "boolean", + "description": "Indicates if the build cache is shared.\n", + "example": true + }, + "Size": { + "description": "Amount of disk space used by the build cache (in bytes).\n", + "type": "integer", + "example": 51 + }, + "CreatedAt": { + "description": "Date and time at which the build cache was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "LastUsedAt": { + "description": "Date and time at which the build cache was last used in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": [ + "string", + "null" + ], + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "UsageCount": { + "type": "integer", + "example": 26 + } + } + }, + "BuildCacheDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/build", + "description": "represents system data usage for build cache resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active build cache records.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all build cache records.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive build cache records.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by build cache records.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of build cache records.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "CacheRecord" + } + } + } + } + }, + "ImageID": { + "type": "object", + "description": "Image ID or Digest", + "properties": { + "ID": { + "type": "string" + } + }, + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "DeviceInfo": { + "type": "object", + "description": "DeviceInfo represents a device that can be used by a container.\n", + "properties": { + "Source": { + "type": "string", + "example": "cdi", + "description": "The origin device driver.\n" + }, + "ID": { + "type": "string", + "example": "vendor.com/gpu=0", + "description": "The unique identifier for the device within its source driver.\nFor CDI devices, this would be an FQDN like \"vendor.com/gpu=0\".\n" + } + } + }, + "NRIInfo": { + "description": "Information about the Node Resource Interface (NRI).\n\nThis field is only present if NRI is enabled.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Info": { + "description": "Information about NRI, provided as \"label\" / \"value\" pairs.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "plugin-path", + "/opt/docker/nri/plugins" + ] + ] + } + } + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "description": "Represents an error.", + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "description": "The error message.", + "type": "string" + } + }, + "example": { + "message": "Something went wrong." + } + }, + "IDResponse": { + "description": "Response to an API call that returns just an Id", + "type": "object", + "x-go-name": "IDResponse", + "required": [ + "Id" + ], + "properties": { + "Id": { + "description": "The id of the newly created object.", + "type": "string" + } + } + }, + "NetworkConnectRequest": { + "description": "NetworkConnectRequest represents the data to be used to connect a container to a network.\n", + "type": "object", + "x-go-name": "ConnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network.", + "example": "3613f73ba0e4" + }, + "EndpointConfig": { + "allOf": [ + { + "$ref": "#/components/schemas/EndpointSettings" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ] + } + } + }, + "NetworkDisconnectRequest": { + "description": "NetworkDisconnectRequest represents the data to be used to disconnect a container from a network.\n", + "type": "object", + "x-go-name": "DisconnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network.", + "example": "3613f73ba0e4" + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network.", + "default": false, + "x-omitempty": false, + "example": false + } + } + }, + "EndpointSettings": { + "description": "Configuration for a network endpoint.", + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/components/schemas/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "container_1", + "container_2" + ] + }, + "MacAddress": { + "description": "MAC address for the endpoint on this network. The network driver might ignore this parameter.\n", + "type": "string", + "example": "02:42:ac:11:00:04", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "server_x", + "server_y" + ] + }, + "DriverOpts": { + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "GwPriority": { + "description": "This property determines which endpoint will provide the default\ngateway for a container. The endpoint with the highest priority will\nbe used. If multiple endpoints have the same priority, endpoints are\nlexicographically sorted based on their network name, and the one\nthat sorts first is picked.\n", + "type": "integer", + "format": "int64", + "example": [ + 10 + ] + }, + "NetworkID": { + "description": "Unique ID of the network.\n", + "type": "string", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "type": "string", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "description": "Gateway address for this network.\n", + "type": "string", + "example": "172.17.0.1" + }, + "IPAddress": { + "description": "IPv4 address.\n", + "type": "string", + "example": "172.17.0.4", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPPrefixLen": { + "description": "Mask length of the IPv4 address.\n", + "type": "integer", + "example": 16 + }, + "IPv6Gateway": { + "description": "IPv6 gateway address.\n", + "type": "string", + "example": "2001:db8:2::100", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6Address": { + "description": "Global IPv6 address.\n", + "type": "string", + "example": "2001:db8::5689", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6PrefixLen": { + "description": "Mask length of the global IPv6 address.\n", + "type": "integer", + "format": "int64", + "example": 64 + }, + "DNSNames": { + "description": "List of all DNS names an endpoint has on a specific network. This\nlist is based on the container name, network aliases, container short\nID, and hostname.\n\nThese DNS names are non-fully qualified but can contain several dots.\nYou can get fully qualified DNS names by appending `.`.\nFor instance, if container name is `my.ctr` and the network is named\n`testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be\n`my.ctr.testnet`.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "foobar", + "server_x", + "server_y", + "my.ctr" + ] + } + } + }, + "EndpointIPAMConfig": { + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "type": [ + "object", + "null" + ], + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "LinkLocalIPs": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "example": [ + "169.254.34.68", + "fe80::3468" + ] + } + } + }, + "PluginMount": { + "type": "object", + "x-go-name": "Mount", + "required": [ + "Name", + "Description", + "Settable", + "Source", + "Destination", + "Type", + "Options" + ], + "properties": { + "Name": { + "type": "string", + "example": "some-mount" + }, + "Description": { + "type": "string", + "example": "This is a mount that's used by the plugin." + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "example": "/mnt/state" + }, + "Type": { + "type": "string", + "example": "bind" + }, + "Options": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "rbind", + "rw" + ] + } + } + }, + "PluginDevice": { + "type": "object", + "x-go-name": "Device", + "required": [ + "Name", + "Description", + "Settable", + "Path" + ], + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + } + }, + "PluginEnv": { + "type": "object", + "x-go-name": "Env", + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + } + }, + "PluginPrivilege": { + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n", + "type": "object", + "x-go-name": "Privilege", + "properties": { + "Name": { + "type": "string", + "example": "network" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "host" + ] + } + } + }, + "Plugin": { + "description": "A plugin for the Engine API", + "type": "object", + "x-go-name": "Plugin", + "required": [ + "Settings", + "Enabled", + "Config", + "Name" + ], + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "example": "tiborvass/sample-volume-plugin" + }, + "Enabled": { + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "type": "boolean", + "example": true + }, + "Settings": { + "description": "user-configurable settings for the plugin.", + "type": "object", + "x-go-name": "Settings", + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=0" + ] + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + } + }, + "PluginReference": { + "description": "plugin remote reference used to push/pull the plugin", + "type": "string", + "x-go-name": "PluginReference", + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest" + }, + "Config": { + "description": "The config of a plugin.", + "type": "object", + "x-go-name": "Config", + "required": [ + "Description", + "Documentation", + "Interface", + "Entrypoint", + "WorkDir", + "Network", + "Linux", + "PidHost", + "PropagatedMount", + "IpcHost", + "Mounts", + "Env", + "Args" + ], + "properties": { + "Description": { + "type": "string", + "example": "A sample volume plugin for Docker" + }, + "Documentation": { + "type": "string", + "example": "https://docs.docker.com/engine/extend/plugins/" + }, + "Interface": { + "description": "The interface between Docker and the plugin", + "type": "object", + "x-go-name": "Interface", + "required": [ + "Types", + "Socket" + ], + "properties": { + "Types": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "CapabilityID" + } + }, + "example": [ + "docker.volumedriver/1.0" + ] + }, + "Socket": { + "type": "string", + "example": "plugins.sock" + }, + "ProtocolScheme": { + "type": "string", + "example": "some.protocol/v1.0", + "description": "Protocol to use for clients connecting to the plugin.", + "enum": [ + "", + "moby.plugins.http/v1" + ] + } + } + }, + "Entrypoint": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ] + }, + "WorkDir": { + "type": "string", + "example": "/bin/" + }, + "User": { + "type": "object", + "x-go-name": "User", + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + } + }, + "Network": { + "type": "object", + "x-go-name": "NetworkConfig", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "example": "host" + } + } + }, + "Linux": { + "type": "object", + "x-go-name": "LinuxConfig", + "required": [ + "Capabilities", + "AllowAllDevices", + "Devices" + ], + "properties": { + "Capabilities": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ] + }, + "AllowAllDevices": { + "type": "boolean", + "example": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + } + }, + "PropagatedMount": { + "type": "string", + "example": "/mnt/volumes" + }, + "IpcHost": { + "type": "boolean", + "example": false + }, + "PidHost": { + "type": "boolean", + "example": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginEnv" + }, + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Settable": null, + "Value": "0" + } + ] + }, + "Args": { + "type": "object", + "x-go-name": "Args", + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "type": "string", + "example": "args" + }, + "Description": { + "type": "string", + "example": "command line arguments" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "rootfs": { + "type": "object", + "x-go-name": "RootFS", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ] + } + } + } + } + } + } + }, + "ObjectVersion": { + "description": "The version number of the object such as node, service, etc. This is needed\nto avoid conflicting writes. The client must send the version number along\nwith the modified specification when updating these objects.\n\nThis approach ensures safe concurrency and determinism in that the change\non the object may not be applied if the version number has changed from the\nlast read. In other words, if two update requests specify the same base\nversion, only one of the requests can succeed. As a result, two separate\nupdate requests that happen at the same time will not unintentionally\noverwrite each other.\n", + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + } + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "description": "Name for the node.", + "type": "string", + "example": "my-node" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Role": { + "description": "Role of the node.", + "type": "string", + "enum": [ + "worker", + "manager" + ], + "example": "manager" + }, + "Availability": { + "description": "Availability of the node.", + "type": "string", + "enum": [ + "active", + "pause", + "drain" + ], + "example": "active" + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/NodeSpec" + }, + "Description": { + "$ref": "#/components/schemas/NodeDescription" + }, + "Status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/components/schemas/ManagerStatus" + } + } + }, + "NodeDescription": { + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n", + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/components/schemas/Platform" + }, + "Resources": { + "$ref": "#/components/schemas/ResourceObject" + }, + "Engine": { + "$ref": "#/components/schemas/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + } + } + }, + "Platform": { + "description": "Platform represents the platform (Arch/OS).\n", + "type": "object", + "properties": { + "Architecture": { + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "type": "string", + "example": "x86_64" + }, + "OS": { + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "type": "string", + "example": "linux" + } + } + }, + "EngineDescription": { + "description": "EngineDescription provides information about an engine.", + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ] + } + } + }, + "TLSInfo": { + "description": "Information about the issuer of leaf TLS certificates and the trusted root\nCA certificate.\n", + "type": "object", + "properties": { + "TrustRoot": { + "description": "The root CA certificate(s) that are used to validate leaf TLS\ncertificates.\n", + "type": "string" + }, + "CertIssuerSubject": { + "description": "The base64-url-safe-encoded raw subject bytes of the issuer.", + "type": "string" + }, + "CertIssuerPublicKey": { + "description": "The base64-url-safe-encoded raw public key bytes of the issuer.\n", + "type": "string" + } + }, + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n", + "type": "object", + "properties": { + "State": { + "$ref": "#/components/schemas/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "description": "IP address of the node.", + "type": "string", + "example": "172.17.0.2" + } + } + }, + "NodeState": { + "description": "NodeState represents the state of a node.", + "type": "string", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ], + "example": "ready" + }, + "ManagerStatus": { + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Leader": { + "type": "boolean", + "default": false, + "example": true + }, + "Reachability": { + "$ref": "#/components/schemas/Reachability" + }, + "Addr": { + "description": "The IP address and port at which the manager is reachable.\n", + "type": "string", + "example": "10.0.0.46:2377" + } + } + }, + "Reachability": { + "description": "Reachability represents the reachability of a node.", + "type": "string", + "enum": [ + "unknown", + "unreachable", + "reachable" + ], + "example": "reachable" + }, + "SwarmSpec": { + "description": "User modifiable swarm configuration.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the swarm.", + "type": "string", + "example": "default" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "description": "Orchestration configuration.", + "type": [ + "object", + "null" + ], + "properties": { + "TaskHistoryRetentionLimit": { + "description": "The number of historic tasks to keep per instance or node. If\nnegative, never remove completed or failed tasks.\n", + "type": "integer", + "format": "int64", + "example": 10 + } + } + }, + "Raft": { + "description": "Raft configuration.", + "type": "object", + "properties": { + "SnapshotInterval": { + "description": "The number of log entries between snapshots.", + "type": "integer", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "description": "The number of snapshots to keep beyond the current snapshot.\n", + "type": "integer", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "description": "The number of log entries to keep around to sync up slow followers\nafter a snapshot is created.\n", + "type": "integer", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "description": "The number of ticks that a follower will wait for a message from\nthe leader before becoming a candidate and starting an election.\n`ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 3 + }, + "HeartbeatTick": { + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks,\nthe leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 1 + } + } + }, + "Dispatcher": { + "description": "Dispatcher configuration.", + "type": [ + "object", + "null" + ], + "properties": { + "HeartbeatPeriod": { + "description": "The delay for an agent to send a heartbeat to the dispatcher.\n", + "type": "integer", + "format": "int64", + "example": 5000000000 + } + } + }, + "CAConfig": { + "description": "CA configuration.", + "type": [ + "object", + "null" + ], + "properties": { + "NodeCertExpiry": { + "description": "The duration node certificates are issued for.", + "type": "integer", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "description": "Configuration for forwarding signing requests to an external\ncertificate authority.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "description": "Protocol for communication with the external CA (currently\nonly `cfssl` is supported).\n", + "type": "string", + "enum": [ + "cfssl" + ], + "default": "cfssl" + }, + "URL": { + "description": "URL where certificate signing requests should be sent.\n", + "type": "string" + }, + "Options": { + "description": "An object with key/value pairs that are interpreted as\nprotocol-specific options for the external CA driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CACert": { + "description": "The root CA certificate (in PEM format) this external CA uses\nto issue TLS certificates (assumed to be to the current swarm\nroot CA certificate if not provided).\n", + "type": "string" + } + } + } + }, + "SigningCACert": { + "description": "The desired signing CA certificate for all swarm node TLS leaf\ncertificates, in PEM format.\n", + "type": "string" + }, + "SigningCAKey": { + "description": "The desired signing CA key for all swarm node TLS leaf certificates,\nin PEM format.\n", + "type": "string" + }, + "ForceRotate": { + "description": "An integer whose purpose is to force swarm to generate a new\nsigning CA certificate and key, if none have been specified in\n`SigningCACert` and `SigningCAKey`\n", + "format": "uint64", + "type": "integer" + } + } + }, + "EncryptionConfig": { + "description": "Parameters related to encryption-at-rest.", + "type": "object", + "properties": { + "AutoLockManagers": { + "description": "If set, generate a key and use it to lock data stored on the\nmanagers.\n", + "type": "boolean", + "example": false + } + } + }, + "TaskDefaults": { + "description": "Defaults for creating tasks in this cluster.", + "type": "object", + "properties": { + "LogDriver": { + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n", + "type": "object", + "properties": { + "Name": { + "description": "The log driver to use as a default for new tasks.\n", + "type": "string", + "example": "json-file" + }, + "Options": { + "description": "Driver-specific options for the selected log driver, specified\nas key/value pairs.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "10", + "max-size": "100m" + } + } + } + } + } + } + } + }, + "ClusterInfo": { + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "type": [ + "object", + "null" + ], + "properties": { + "ID": { + "description": "The ID of the swarm.", + "type": "string", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + }, + "RootRotationInProgress": { + "description": "Whether there is currently a root CA rotation in progress for the swarm\n", + "type": "boolean", + "example": false + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nIf no port is set or is set to 0, the default port (4789) is used.\n", + "type": "integer", + "format": "uint32", + "default": 4789, + "example": 4789 + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global scope\nnetworks.\n", + "type": "array", + "items": { + "type": "string", + "format": "CIDR", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created from the\ndefault subnet pool.\n", + "type": "integer", + "format": "uint32", + "maximum": 29, + "default": 24, + "example": 24 + } + } + }, + "JoinTokens": { + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n", + "type": "object", + "properties": { + "Worker": { + "description": "The token workers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "description": "The token managers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "Swarm": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/components/schemas/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "description": "User modifiable task configuration.", + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Name": { + "description": "The name or 'alias' to use for the plugin.", + "type": "string" + }, + "Remote": { + "description": "The plugin image reference to use.", + "type": "string" + }, + "Disabled": { + "description": "Disable the plugin once scheduled.", + "type": "boolean" + }, + "PluginPrivilege": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "ContainerSpec": { + "type": "object", + "description": "Container spec for the service.\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Image": { + "description": "The image name to use for the container", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value data.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Command": { + "description": "The command to be run in the image.", + "type": "array", + "items": { + "type": "string" + } + }, + "Args": { + "description": "Arguments to the command.", + "type": "array", + "items": { + "type": "string" + } + }, + "Hostname": { + "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n", + "type": "string" + }, + "Env": { + "description": "A list of environment variables in the form `VAR=value`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Dir": { + "description": "The working directory for commands to run in.", + "type": "string" + }, + "User": { + "description": "The user inside the container.", + "type": "string" + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "description": "Security options for the container", + "properties": { + "CredentialSpec": { + "type": "object", + "description": "CredentialSpec for managed service account (Windows only)", + "properties": { + "Config": { + "type": "string", + "example": "0bt9dmxjvjiqermk6xrop3ekq", + "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "File": { + "type": "string", + "example": "spec.json", + "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + } + } + }, + "SELinuxContext": { + "type": "object", + "description": "SELinux labels of the container", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + } + }, + "Seccomp": { + "type": "object", + "description": "Options for configuring seccomp on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "unconfined", + "custom" + ] + }, + "Profile": { + "description": "The custom seccomp profile as a json object", + "type": "string" + } + } + }, + "AppArmor": { + "type": "object", + "description": "Options for configuring AppArmor on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "disabled" + ] + } + } + }, + "NoNewPrivileges": { + "type": "boolean", + "description": "Configuration of the no_new_privs bit in the container" + } + } + }, + "TTY": { + "description": "Whether a pseudo-TTY should be allocated.", + "type": "boolean" + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean" + }, + "ReadOnly": { + "description": "Mount the container's root filesystem as read only.", + "type": "boolean" + }, + "Mounts": { + "description": "Specification for mounts to be added to containers created as part\nof the service.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "StopSignal": { + "description": "Signal to stop the container.", + "type": "string" + }, + "StopGracePeriod": { + "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n", + "type": "integer", + "format": "int64" + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n", + "type": "object", + "properties": { + "Nameservers": { + "description": "The IP addresses of the name servers.", + "type": "array", + "items": { + "type": "string" + } + }, + "Search": { + "description": "A search list for host-name lookup.", + "type": "array", + "items": { + "type": "string" + } + }, + "Options": { + "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Secrets": { + "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "SecretID": { + "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n", + "type": "string" + }, + "SecretName": { + "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "OomScoreAdj": { + "type": "integer", + "format": "int64", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 0 + }, + "Configs": { + "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n\n\n\n\n\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "Runtime": { + "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n\n\n\n\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n", + "type": "object" + }, + "ConfigID": { + "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n", + "type": "string" + }, + "ConfigName": { + "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service.\n(Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": [ + "boolean", + "null" + ] + }, + "Sysctls": { + "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CapabilityAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW", + "CAP_SYS_ADMIN", + "CAP_SYS_CHROOT", + "CAP_SYSLOG" + ] + }, + "CapabilityDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW" + ] + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + } + } + }, + "NetworkAttachmentSpec": { + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "type": "object", + "properties": { + "ContainerID": { + "description": "ID of the container represented by this task", + "type": "string" + } + } + }, + "Resources": { + "description": "Resource requirements which apply to each individual container created\nas part of the service.\n", + "type": "object", + "properties": { + "Limits": { + "allOf": [ + { + "$ref": "#/components/schemas/Limit" + }, + { + "description": "Define resources limits." + } + ] + }, + "Reservations": { + "allOf": [ + { + "$ref": "#/components/schemas/ResourceObject" + }, + { + "description": "Define resources reservation." + } + ] + }, + "SwapBytes": { + "description": "Amount of swap in bytes - can only be used together with a memory limit.\nIf not specified, the default behaviour is to grant a swap space twice\nas big as the memory limit.\nSet to -1 to enable unlimited swap.\n", + "type": [ + "integer", + "null" + ], + "format": "int64", + "minimum": -1, + "x-omitempty": true + }, + "MemorySwappiness": { + "description": "Tune the service's containers' memory swappiness (0 to 100).\nIf not specified, defaults to the containers' OS' default, generally 60,\nor whatever value was predefined in the image.\nSet to -1 to unset a previously set value.\n", + "type": [ + "integer", + "null" + ], + "format": "int64", + "minimum": -1, + "maximum": 100, + "x-omitempty": true + } + } + }, + "RestartPolicy": { + "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n", + "type": "object", + "properties": { + "Condition": { + "description": "Condition for restart.", + "type": "string", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "description": "Delay between restart attempts.", + "type": "integer", + "format": "int64" + }, + "MaxAttempts": { + "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Window": { + "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n", + "type": "integer", + "format": "int64", + "default": 0 + } + } + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production", + "node.platform.os==linux", + "node.platform.arch==x86_64" + ] + }, + "Preferences": { + "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "description": "label descriptor, such as `engine.labels.az`.\n", + "type": "string" + } + } + } + } + }, + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ] + }, + "MaxReplicas": { + "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Platforms": { + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Platform" + } + } + } + }, + "ForceUpdate": { + "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n", + "type": "integer", + "format": "uint64" + }, + "Runtime": { + "description": "Runtime is the type of runtime specified for the task executor.\n", + "type": "string" + }, + "Networks": { + "description": "Specifies which networks the service should attach to.", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "LogDriver": { + "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "ContainerStatus": { + "type": "object", + "description": "represents the status of a container.", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + } + }, + "PortStatus": { + "type": "object", + "description": "represents the port status of a task's host ports whose service has published host ports", + "properties": { + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + } + }, + "TaskStatus": { + "type": "object", + "description": "represents the status of a task.", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/components/schemas/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "$ref": "#/components/schemas/ContainerStatus" + }, + "PortStatus": { + "$ref": "#/components/schemas/PortStatus" + } + } + }, + "NetworkAttachment": { + "description": "Specifies how a task is attached to a network, and the addresses the\ntask was assigned on that network.\n", + "type": "object", + "properties": { + "Network": { + "$ref": "#/components/schemas/Network" + }, + "Addresses": { + "description": "The IP addresses (in CIDR notation) assigned to the task on this\nnetwork. To maintain backward compatibility this field accepts CIDR\nnotation, but only the IP address is used.\n", + "type": "array", + "items": { + "type": "string", + "format": "cidr" + } + } + }, + "example": { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1" + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "description": "The ID of the task.", + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "description": "Name of the task.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Spec": { + "$ref": "#/components/schemas/TaskSpec" + }, + "ServiceID": { + "description": "The ID of the service this task is part of.", + "type": "string" + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "description": "The ID of the node that this task is on.", + "type": "string" + }, + "AssignedGenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "Status": { + "$ref": "#/components/schemas/TaskStatus" + }, + "DesiredState": { + "$ref": "#/components/schemas/TaskState" + }, + "JobIteration": { + "allOf": [ + { + "$ref": "#/components/schemas/ObjectVersion" + }, + { + "description": "If the Service this Task belongs to is a job-mode service, contains\nthe JobIteration of the Service this Task was created for. Absent if\nthe Task was created for a Replicated or Global Service.\n" + } + ] + }, + "NetworksAttachments": { + "description": "The networks that this task is attached to, and the addresses the\ntask was assigned on each of them.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachment" + } + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "description": "User modifiable configuration for a service.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the service.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "TaskTemplate": { + "$ref": "#/components/schemas/TaskSpec" + }, + "Mode": { + "description": "Scheduling mode for the service.", + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object" + }, + "ReplicatedJob": { + "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n", + "type": "object", + "properties": { + "MaxConcurrent": { + "description": "The maximum number of replicas to run simultaneously.\n", + "type": "integer", + "format": "int64", + "default": 1 + }, + "TotalCompletions": { + "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n", + "type": "integer", + "format": "int64" + } + } + }, + "GlobalJob": { + "description": "The mode used for services which run a task to the completed state\non each valid node.\n", + "type": "object" + } + } + }, + "UpdateConfig": { + "description": "Specification for the update strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between updates, in nanoseconds.", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n", + "type": "string", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "RollbackConfig": { + "description": "Specification for the rollback strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between rollback iterations, in nanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n", + "type": "string", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "Networks": { + "description": "Specifies which networks the service should attach to.\n\nDeprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "EndpointSpec": { + "$ref": "#/components/schemas/EndpointSpec" + } + } + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "TargetPort": { + "description": "The port inside the container.", + "type": "integer" + }, + "PublishedPort": { + "description": "The port on the swarm hosts.", + "type": "integer" + }, + "PublishMode": { + "description": "The mode in which port is published.\n\n\n\n\n\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "type": "string", + "enum": [ + "ingress", + "host" + ], + "default": "ingress", + "example": "ingress" + } + } + }, + "EndpointSpec": { + "description": "Properties that can be configured to access and load balance a service.", + "type": "object", + "properties": { + "Mode": { + "description": "The mode of resolution to use for internal load balancing between tasks.\n", + "type": "string", + "enum": [ + "vip", + "dnsrr" + ], + "default": "vip" + }, + "Ports": { + "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + } + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "description": "The status of a service update.", + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + } + }, + "ServiceStatus": { + "description": "The status of the service's tasks. Provided only when requested as\npart of a ServiceList operation.\n", + "type": "object", + "properties": { + "RunningTasks": { + "description": "The number of tasks for the service currently in the Running state.\n", + "type": "integer", + "format": "uint64", + "example": 7 + }, + "DesiredTasks": { + "description": "The number of tasks for the service desired to be running.\nFor replicated services, this is the replica count from the\nservice spec. For global services, this is computed by taking\ncount of all tasks for the service with a Desired State other\nthan Shutdown.\n", + "type": "integer", + "format": "uint64", + "example": 10 + }, + "CompletedTasks": { + "description": "The number of tasks for a job that are in the Completed state.\nThis field must be cross-referenced with the service type, as the\nvalue of 0 may mean the service is not in a job mode, or it may\nmean the job-mode service has no tasks yet Completed.\n", + "type": "integer", + "format": "uint64" + } + } + }, + "JobStatus": { + "description": "The status of the service when it is in one of ReplicatedJob or\nGlobalJob modes. Absent on Replicated and Global mode services. The\nJobIteration is an ObjectVersion, but unlike the Service's version,\ndoes not need to be sent with an update request.\n", + "type": "object", + "properties": { + "JobIteration": { + "allOf": [ + { + "$ref": "#/components/schemas/ObjectVersion" + }, + { + "description": "JobIteration is a value increased each time a Job is executed,\nsuccessfully or otherwise. \"Executed\", in this case, means the\njob as a whole has been started, not that an individual Task has\nbeen launched. A job is \"Executed\" when its ServiceSpec is\nupdated. JobIteration can be used to disambiguate Tasks belonging\nto different executions of a job. Though JobIteration will\nincrease with each subsequent execution, it may not necessarily\nincrease by 1, and so JobIteration should not be used to\n" + } + ] + }, + "LastExecution": { + "description": "The last time, as observed by the server, that this job was\nstarted.\n", + "type": "string", + "format": "dateTime" + } + } + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "x-go-name": "DeleteResponse", + "properties": { + "Untagged": { + "description": "The image ID of an image that was untagged", + "type": "string" + }, + "Deleted": { + "description": "The image ID of an image that was deleted", + "type": "string" + } + } + }, + "ServiceCreateResponse": { + "type": "object", + "description": "contains the information returned to a client on the\ncreation of a new service.\n", + "properties": { + "ID": { + "description": "The ID of the created service.", + "type": "string", + "example": "ak7w3gjqoa3kuz8xcpnyy0pvl" + }, + "Warnings": { + "description": "Optional warning message.\n\nFIXME(thaJeztah): this should have \"omitempty\" in the generated type.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + } + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "description": "Optional warning messages", + "type": "array", + "items": { + "type": "string" + } + } + }, + "example": { + "Warnings": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + }, + "ContainerInspectResponse": { + "type": "object", + "title": "ContainerInspectResponse", + "x-go-name": "InspectResponse", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Created": { + "description": "Date and time at which the container was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.", + "type": [ + "string", + "null" + ], + "format": "dateTime", + "example": "2025-02-17T17:43:39.64001363Z" + }, + "Path": { + "description": "The path to the command being run", + "type": "string", + "example": "/bin/sh" + }, + "Args": { + "description": "The arguments to the command being run", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "-c", + "exit 9" + ] + }, + "State": { + "$ref": "#/components/schemas/ContainerState" + }, + "Image": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ResolvConfPath": { + "description": "Location of the `/etc/resolv.conf` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf" + }, + "HostnamePath": { + "description": "Location of the `/etc/hostname` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname" + }, + "HostsPath": { + "description": "Location of the `/etc/hosts` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts" + }, + "LogPath": { + "description": "Location of the file used to buffer the container's logs. Depending on\nthe logging-driver used for the container, this field may be omitted.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": [ + "string", + "null" + ], + "example": "/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log" + }, + "Name": { + "description": "The name associated with this container.\n\nFor historic reasons, the name may be prefixed with a forward-slash (`/`).", + "type": "string", + "example": "/funny_chatelet" + }, + "RestartCount": { + "description": "Number of times the container was restarted since it was created,\nor since daemon was started.", + "type": "integer", + "example": 0 + }, + "Driver": { + "description": "The storage-driver used for the container's filesystem (graph-driver\nor snapshotter).", + "type": "string", + "example": "overlayfs" + }, + "Platform": { + "description": "The platform (operating system) for which the container was created.\n\nThis field was introduced for the experimental \"LCOW\" (Linux Containers\nOn Windows) features, which has been removed. In most cases, this field\nis equal to the host's operating system (`linux` or `windows`).", + "type": "string", + "example": "linux" + }, + "ImageManifestDescriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store." + } + ] + }, + "MountLabel": { + "description": "SELinux mount label set for the container.", + "type": "string", + "example": "" + }, + "ProcessLabel": { + "description": "SELinux process label set for the container.", + "type": "string", + "example": "" + }, + "AppArmorProfile": { + "description": "The AppArmor profile set for the container.", + "type": "string", + "example": "" + }, + "ExecIDs": { + "description": "IDs of exec instances that are running in the container.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ] + }, + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "GraphDriver": { + "allOf": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ] + }, + "Storage": { + "allOf": [ + { + "$ref": "#/components/schemas/Storage" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ] + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": [ + "integer", + "null" + ], + "format": "int64", + "example": "122880" + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": [ + "integer", + "null" + ], + "format": "int64", + "example": "1653948416" + }, + "Mounts": { + "description": "List of mounts used by the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/components/schemas/NetworkSettings" + } + } + }, + "ContainerSummary": { + "type": "object", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Names": { + "description": "The names associated with this container. Most containers have a single\nname, but when using legacy \"links\", the container can have multiple\nnames.\n\nFor historic reasons, names are prefixed with a forward-slash (`/`).", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/funny_chatelet" + ] + }, + "Image": { + "description": "The name or ID of the image used to create the container.\n\nThis field shows the image reference as was specified when creating the container,\nwhich can be in its canonical form (e.g., `docker.io/library/ubuntu:latest`\nor `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`),\nshort form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`).\n\nThe content of this field can be updated at runtime if the image used to\ncreate the container is untagged, in which case the field is updated to\ncontain the the image ID (digest) it was resolved to in its canonical,\nnon-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`).", + "type": "string", + "example": "docker.io/library/ubuntu:latest" + }, + "ImageID": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ImageManifestDescriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store.\n\nThis field is not populated in the `GET /system/df` endpoint.\n" + }, + { + "type": "null" + } + ] + } + ] + }, + "Command": { + "description": "Command to run when starting the container", + "type": "string", + "example": "/bin/bash" + }, + "Created": { + "description": "Date and time at which the container was created as a Unix timestamp\n(number of seconds since EPOCH).", + "type": "integer", + "format": "int64", + "example": "1739811096" + }, + "Ports": { + "description": "Port-mappings for the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/PortSummary" + } + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": [ + "integer", + "null" + ], + "format": "int64", + "example": "122880" + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": [ + "integer", + "null" + ], + "format": "int64", + "example": "1653948416" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + } + }, + "State": { + "description": "The state of this container.\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "exited", + "removing", + "dead" + ], + "example": "running" + }, + "Status": { + "description": "Additional human-readable status of this container (e.g. `Exit 0`)", + "type": "string", + "example": "Up 4 days" + }, + "HostConfig": { + "type": "object", + "description": "Summary of host-specific runtime information of the container. This\nis a reduced set of information in the container's \"HostConfig\" as\navailable in the container \"inspect\" response.", + "properties": { + "NetworkMode": { + "description": "Networking mode (`host`, `none`, `container:`) or name of the\nprimary network the container is using.\n\nThis field is primarily for backward compatibility. The container\ncan be connected to multiple networks for which information can be\nfound in the `NetworkSettings.Networks` field, which enumerates\nsettings per network.", + "type": "string", + "example": "mynetwork" + }, + "Annotations": { + "description": "Arbitrary key-value metadata attached to the container.", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "string" + }, + "example": { + "io.kubernetes.docker.type": "container", + "io.kubernetes.sandbox.id": "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" + } + } + } + }, + "NetworkSettings": { + "description": "Summary of the container's network settings", + "type": "object", + "properties": { + "Networks": { + "type": "object", + "description": "Summary of network-settings for each network the container is\nattached to.", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + } + }, + "Mounts": { + "type": "array", + "description": "List of mounts used by the container.", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Health": { + "type": "object", + "description": "Summary of health status\n\nAdded in v1.52, before that version all container summary not include Health.\nAfter this attribute introduced, it includes containers with no health checks configured,\nor containers that are not running with none", + "properties": { + "Status": { + "type": "string", + "description": "the health status of the container", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + } + } + } + } + }, + "ContainersDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/container", + "description": "represents system data usage information for container resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active containers.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all containers.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive containers.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by containers.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of container summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "Driver": { + "description": "Driver represents a driver (network, logging, secrets).", + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "Name of the driver.", + "type": "string", + "example": "some-driver" + }, + "Options": { + "description": "Key/value map of driver-specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + } + } + } + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the secret.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "description": "Data is the data to store as a secret, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nIt must be empty if the Driver field is set, in which case the data is\nloaded from an external secret store. The maximum allowed size is 500KB,\nas defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize).\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "type": "string", + "example": "" + }, + "Driver": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Name of the secrets driver used to fetch the secret's value from an\nexternal secret store.\n" + } + ] + }, + "Templating": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n" + } + ] + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the config.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Data": { + "description": "Data is the data to store as a config, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nThe maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize).\n", + "type": "string" + }, + "Templating": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n" + } + ] + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "ContainerState": { + "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Status": { + "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ], + "example": "running" + }, + "Running": { + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "type": "boolean", + "example": true + }, + "Paused": { + "description": "Whether this container is paused.", + "type": "boolean", + "example": false + }, + "Restarting": { + "description": "Whether this container is restarting.", + "type": "boolean", + "example": false + }, + "OOMKilled": { + "description": "Whether a process within this container has been killed because it ran\nout of memory since the container was last started.\n", + "type": "boolean", + "example": false + }, + "Dead": { + "type": "boolean", + "example": false + }, + "Pid": { + "description": "The process ID of this container", + "type": "integer", + "example": 1234 + }, + "ExitCode": { + "description": "The last exit code of this container", + "type": "integer", + "example": 0 + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "description": "The time when this container was last started.", + "type": "string", + "example": "2020-01-06T09:06:59.461876391Z" + }, + "FinishedAt": { + "description": "The time when this container last exited.", + "type": "string", + "example": "2020-01-06T09:07:59.461876391Z" + }, + "Health": { + "$ref": "#/components/schemas/Health" + } + } + }, + "ContainerCreateResponse": { + "description": "OK response to ContainerCreate operation", + "type": "object", + "title": "ContainerCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warnings" + ], + "properties": { + "Id": { + "description": "The ID of the created container", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Warnings": { + "description": "Warnings encountered when creating the container", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + } + } + }, + "ContainerUpdateResponse": { + "type": "object", + "title": "ContainerUpdateResponse", + "x-go-name": "UpdateResponse", + "description": "Response for a successful container-update.", + "properties": { + "Warnings": { + "type": "array", + "description": "Warnings encountered when updating the container.", + "items": { + "type": "string" + }, + "example": [ + "Published ports are discarded when using host network mode" + ] + } + } + }, + "ContainerStatsResponse": { + "description": "Statistics sample for a container.\n", + "type": "object", + "x-go-name": "StatsResponse", + "title": "ContainerStatsResponse", + "properties": { + "id": { + "description": "ID of the container for which the stats were collected.\n", + "type": [ + "string", + "null" + ], + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "name": { + "description": "Name of the container for which the stats were collected.\n", + "type": [ + "string", + "null" + ], + "example": "boring_wozniak" + }, + "os_type": { + "description": "OSType is the OS of the container (\"linux\" or \"windows\") to allow\nplatform-specific handling of stats.\n", + "type": [ + "string", + "null" + ], + "example": "linux" + }, + "read": { + "description": "Date and time at which this sample was collected.\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:22.165243637Z" + }, + "cpu_stats": { + "$ref": "#/components/schemas/ContainerCPUStats" + }, + "memory_stats": { + "$ref": "#/components/schemas/ContainerMemoryStats" + }, + "networks": { + "description": "Network statistics for the container per interface.\n\nThis field is omitted if the container has no networking enabled.\n", + "additionalProperties": { + "$ref": "#/components/schemas/ContainerNetworkStats" + }, + "example": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + } + }, + "pids_stats": { + "$ref": "#/components/schemas/ContainerPidsStats" + }, + "blkio_stats": { + "$ref": "#/components/schemas/ContainerBlkioStats" + }, + "num_procs": { + "description": "The number of processors on the system.\n\nThis field is Windows-specific and always zero for Linux containers.\n", + "type": "integer", + "format": "uint32", + "example": 16 + }, + "storage_stats": { + "$ref": "#/components/schemas/ContainerStorageStats" + }, + "preread": { + "description": "Date and time at which this first sample was collected. This field\nis not propagated if the \"one-shot\" option is set. If the \"one-shot\"\noption is set, this field may be omitted, empty, or set to a default\ndate (`0001-01-01T00:00:00Z`).\n\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:21.160452595Z" + }, + "precpu_stats": { + "$ref": "#/components/schemas/ContainerCPUStats" + } + } + }, + "ContainerBlkioStats": { + "description": "BlkioStats stores all IO service stats for data read and write.\n\nThis type is Linux-specific and holds many fields that are specific to cgroups v1.\nOn a cgroup v2 host, all fields other than `io_service_bytes_recursive`\nare omitted or `null`.\n\nThis type is only populated on Linux and omitted for Windows containers.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "BlkioStats", + "properties": { + "io_service_bytes_recursive": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_serviced_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_queue_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_service_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_wait_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_merged_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "sectors_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + } + }, + "example": { + "io_service_bytes_recursive": [ + { + "major": 254, + "minor": 0, + "op": "read", + "value": 7593984 + }, + { + "major": 254, + "minor": 0, + "op": "write", + "value": 100 + } + ], + "io_serviced_recursive": null, + "io_queue_recursive": null, + "io_service_time_recursive": null, + "io_wait_time_recursive": null, + "io_merged_recursive": null, + "io_time_recursive": null, + "sectors_recursive": null + } + }, + "ContainerBlkioStatEntry": { + "description": "Blkio stats entry.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "BlkioStatEntry", + "properties": { + "major": { + "type": "integer", + "format": "uint64", + "example": 254 + }, + "minor": { + "type": "integer", + "format": "uint64", + "example": 0 + }, + "op": { + "type": "string", + "example": "read" + }, + "value": { + "type": "integer", + "format": "uint64", + "example": 7593984 + } + } + }, + "ContainerCPUStats": { + "description": "CPU related info of the container\n", + "type": [ + "object", + "null" + ], + "x-go-name": "CPUStats", + "properties": { + "cpu_usage": { + "$ref": "#/components/schemas/ContainerCPUUsage" + }, + "system_cpu_usage": { + "description": "System Usage.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 5 + }, + "online_cpus": { + "description": "Number of online CPUs.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint32", + "example": 5 + }, + "throttling_data": { + "$ref": "#/components/schemas/ContainerThrottlingData" + } + } + }, + "ContainerCPUUsage": { + "description": "All CPU stats aggregated since container inception.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "CPUUsage", + "properties": { + "total_usage": { + "description": "Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows).\n", + "type": "integer", + "format": "uint64", + "example": 29912000 + }, + "percpu_usage": { + "description": "Total CPU time (in nanoseconds) consumed per core (Linux).\n\nThis field is Linux-specific when using cgroups v1. It is omitted\nwhen using cgroups v2 and Windows containers.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "integer", + "format": "uint64", + "example": 29912000 + } + }, + "usage_in_kernelmode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 21994000 + }, + "usage_in_usermode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 7918000 + } + } + }, + "ContainerPidsStats": { + "description": "PidsStats contains Linux-specific stats of a container's process-IDs (PIDs).\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "PidsStats", + "properties": { + "current": { + "description": "Current is the number of PIDs in the cgroup.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 5 + }, + "limit": { + "description": "Limit is the hard limit on the number of pids in the cgroup.\nA \"Limit\" of 0 means that there is no limit.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": "18446744073709551615" + } + } + }, + "ContainerThrottlingData": { + "description": "CPU throttling stats of the container.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "ThrottlingData", + "properties": { + "periods": { + "description": "Number of periods with throttling active.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_periods": { + "description": "Number of periods when the container hit its throttling limit.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_time": { + "description": "Aggregated time (in nanoseconds) the container was throttled for.\n", + "type": "integer", + "format": "uint64", + "example": 0 + } + } + }, + "ContainerMemoryStats": { + "description": "Aggregates all memory stats since container inception on Linux.\nWindows returns stats for commit and private working set only.\n", + "type": "object", + "x-go-name": "MemoryStats", + "properties": { + "usage": { + "description": "Current `res_counter` usage for memory.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + }, + "max_usage": { + "description": "Maximum usage ever recorded.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + }, + "stats": { + "description": "All the stats exported via memory.stat.\n\nThe fields in this object differ between cgroups v1 and v2.\nOn cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available.\nOn cgroups v2, fields such as `file`, `anon`, `inactive_file` are available.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "additionalProperties": { + "type": [ + "integer", + "null" + ], + "format": "uint64" + }, + "example": { + "active_anon": 1572864, + "active_file": 5115904, + "anon": 1572864, + "anon_thp": 0, + "file": 7626752, + "file_dirty": 0, + "file_mapped": 2723840, + "file_writeback": 0, + "inactive_anon": 0, + "inactive_file": 2510848, + "kernel_stack": 16384, + "pgactivate": 0, + "pgdeactivate": 0, + "pgfault": 2042, + "pglazyfree": 0, + "pglazyfreed": 0, + "pgmajfault": 45, + "pgrefill": 0, + "pgscan": 0, + "pgsteal": 0, + "shmem": 0, + "slab": 1180928, + "slab_reclaimable": 725576, + "slab_unreclaimable": 455352, + "sock": 0, + "thp_collapse_alloc": 0, + "thp_fault_alloc": 1, + "unevictable": 0, + "workingset_activate": 0, + "workingset_nodereclaim": 0, + "workingset_refault": 0 + } + }, + "failcnt": { + "description": "Number of times memory usage hits limits.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + }, + "limit": { + "description": "This field is Linux-specific and omitted for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 8217579520 + }, + "commitbytes": { + "description": "Committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + }, + "commitpeakbytes": { + "description": "Peak committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + }, + "privateworkingset": { + "description": "Private working set.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + } + } + }, + "ContainerNetworkStats": { + "description": "Aggregates the network stats of one container\n", + "type": [ + "object", + "null" + ], + "x-go-name": "NetworkStats", + "properties": { + "rx_bytes": { + "description": "Bytes received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 5338 + }, + "rx_packets": { + "description": "Packets received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 36 + }, + "rx_errors": { + "description": "Received errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "rx_dropped": { + "description": "Incoming packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_bytes": { + "description": "Bytes sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 1200 + }, + "tx_packets": { + "description": "Packets sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 12 + }, + "tx_errors": { + "description": "Sent errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_dropped": { + "description": "Outgoing packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "endpoint_id": { + "description": "Endpoint ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": [ + "string", + "null" + ] + }, + "instance_id": { + "description": "Instance ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": [ + "string", + "null" + ] + } + } + }, + "ContainerStorageStats": { + "description": "StorageStats is the disk I/O stats for read/write on Windows.\n\nThis type is Windows-specific and omitted for Linux containers.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "StorageStats", + "properties": { + "read_count_normalized": { + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 7593984 + }, + "read_size_bytes": { + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 7593984 + }, + "write_count_normalized": { + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 7593984 + }, + "write_size_bytes": { + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 7593984 + } + } + }, + "ContainerTopResponse": { + "type": "object", + "x-go-name": "TopResponse", + "title": "ContainerTopResponse", + "description": "Container \"top\" response.", + "properties": { + "Titles": { + "description": "The ps column titles", + "type": "array", + "items": { + "type": "string" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ] + } + }, + "Processes": { + "description": "Each process running in the container, where each process\nis an array of values corresponding to the titles.", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": { + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + } + } + }, + "ContainerWaitResponse": { + "description": "OK response to ContainerWait operation", + "type": "object", + "x-go-name": "WaitResponse", + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "properties": { + "StatusCode": { + "description": "Exit code of the container", + "type": "integer", + "format": "int64" + }, + "Error": { + "$ref": "#/components/schemas/ContainerWaitExitError" + } + } + }, + "ContainerWaitExitError": { + "description": "container waiting error, if any", + "type": "object", + "x-go-name": "WaitExitError", + "properties": { + "Message": { + "description": "Details of an error", + "type": "string" + } + } + }, + "SystemVersion": { + "type": "object", + "description": "Response of Engine API: GET \"/version\"\n", + "properties": { + "Platform": { + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "description": "Information about system components\n", + "items": { + "type": "object", + "x-go-name": "ComponentVersion", + "required": [ + "Name", + "Version" + ], + "properties": { + "Name": { + "description": "Name of the component\n", + "type": "string", + "example": "Engine" + }, + "Version": { + "description": "Version of the component\n", + "type": "string", + "example": "27.0.1" + }, + "Details": { + "description": "Key/value pairs of strings with additional information about the\ncomponent. These values are intended for informational purposes\nonly, and their content is not defined, and not part of the API\nspecification.\n\nThese messages can be printed by the client as information to the user.\n", + "type": [ + "object", + "null" + ] + } + } + } + }, + "Version": { + "description": "The version of the daemon", + "type": "string", + "example": "27.0.1" + }, + "ApiVersion": { + "description": "The default (and highest) API version that is supported by the daemon\n", + "type": "string", + "example": "1.47" + }, + "MinAPIVersion": { + "description": "The minimum API version that is supported by the daemon\n", + "type": "string", + "example": "1.24" + }, + "GitCommit": { + "description": "The Git commit of the source code that was used to build the daemon\n", + "type": "string", + "example": "48a66213fe" + }, + "GoVersion": { + "description": "The version Go used to compile the daemon, and the version of the Go\nruntime in use.\n", + "type": "string", + "example": "go1.22.7" + }, + "Os": { + "description": "The operating system that the daemon is running on (\"linux\" or \"windows\")\n", + "type": "string", + "example": "linux" + }, + "Arch": { + "description": "Architecture of the daemon, as returned by the Go runtime (`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "amd64" + }, + "KernelVersion": { + "description": "The kernel version (`uname -r`) that the daemon is running on.\n\nThis field is omitted when empty.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "Experimental": { + "description": "Indicates if the daemon is started with experimental features enabled.\n\nThis field is omitted when empty / false.\n", + "type": "boolean", + "example": true + }, + "BuildTime": { + "description": "The date and time that the daemon was compiled.\n", + "type": "string", + "example": "2020-06-22T15:49:27.000000000+00:00" + } + } + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "description": "Unique identifier of the daemon.\n\n\n\n\n\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "type": "string", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "description": "Total number of containers on the host.", + "type": "integer", + "example": 14 + }, + "ContainersRunning": { + "description": "Number of containers with status `\"running\"`.\n", + "type": "integer", + "example": 3 + }, + "ContainersPaused": { + "description": "Number of containers with status `\"paused\"`.\n", + "type": "integer", + "example": 1 + }, + "ContainersStopped": { + "description": "Number of containers with status `\"stopped\"`.\n", + "type": "integer", + "example": 10 + }, + "Images": { + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "type": "integer", + "example": 508 + }, + "Driver": { + "description": "Name of the storage driver in use.", + "type": "string", + "example": "overlay2" + }, + "DriverStatus": { + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ] + }, + "DockerRootDir": { + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "type": "string", + "example": "/var/lib/docker" + }, + "Plugins": { + "$ref": "#/components/schemas/PluginsInfo" + }, + "MemoryLimit": { + "description": "Indicates if the host has memory limit support enabled.", + "type": "boolean", + "example": true + }, + "SwapLimit": { + "description": "Indicates if the host has memory swap limit support enabled.", + "type": "boolean", + "example": true + }, + "CpuCfsPeriod": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CpuCfsQuota": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CPUShares": { + "description": "Indicates if CPU Shares limiting is supported by the host.\n", + "type": "boolean", + "example": true + }, + "CPUSet": { + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "type": "boolean", + "example": true + }, + "PidsLimit": { + "description": "Indicates if the host kernel has PID limit support enabled.", + "type": "boolean", + "example": true + }, + "OomKillDisable": { + "description": "Indicates if OOM killer disable is supported on the host.", + "type": "boolean" + }, + "IPv4Forwarding": { + "description": "Indicates IPv4 forwarding is enabled.", + "type": "boolean", + "example": true + }, + "Debug": { + "description": "Indicates if the daemon is running in debug-mode / with debug-level\nlogging enabled.\n", + "type": "boolean", + "example": true + }, + "NFd": { + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 64 + }, + "NGoroutines": { + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 174 + }, + "SystemTime": { + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "type": "string", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "description": "The logging driver to use as a default for new containers.\n", + "type": "string" + }, + "CgroupDriver": { + "description": "The driver to use for managing cgroups.\n", + "type": "string", + "enum": [ + "cgroupfs", + "systemd", + "none" + ], + "default": "cgroupfs", + "example": "cgroupfs" + }, + "CgroupVersion": { + "description": "The version of the cgroup.\n", + "type": "string", + "enum": [ + "1", + "2" + ], + "default": "1", + "example": "1" + }, + "NEventsListener": { + "description": "Number of event listeners subscribed.", + "type": "integer", + "example": 30 + }, + "KernelVersion": { + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "OperatingSystem": { + "description": "Name of the host's operating system, for example: \"Ubuntu 24.04 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "type": "string", + "example": "Ubuntu 24.04 LTS" + }, + "OSVersion": { + "description": "Version of the host's operating system\n\n\n\n\n\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "type": "string", + "example": "24.04" + }, + "OSType": { + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "linux" + }, + "Architecture": { + "description": "Hardware architecture of the host, as returned by the operating system.\nThis is equivalent to the output of `uname -m` on Linux.\n\nUnlike `Arch` (from `/version`), this reports the machine's native\narchitecture, which can differ from the Go runtime architecture when\nrunning a binary compiled for a different architecture (for example,\na 32-bit binary running on 64-bit hardware).\n", + "type": "string", + "example": "x86_64" + }, + "NCPU": { + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "type": "integer", + "example": 4 + }, + "MemTotal": { + "description": "Total amount of physical memory available on the host, in bytes.\n", + "type": "integer", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "default": "https://index.docker.io/v1/", + "type": "string", + "example": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/components/schemas/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "HttpProxy": { + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + }, + "NoProxy": { + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "*.local, 169.254/16" + }, + "Name": { + "description": "Hostname of the host.", + "type": "string", + "example": "node5.corp.example.com" + }, + "Labels": { + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n\n\n\n\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "storage=ssd", + "production" + ] + }, + "ExperimentalBuild": { + "description": "Indicates if experimental features are enabled on the daemon.\n", + "type": "boolean", + "example": true + }, + "ServerVersion": { + "description": "Version string of the daemon.\n", + "type": "string", + "example": "27.0.1" + }, + "Runtimes": { + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Runtime" + }, + "default": { + "runc": { + "path": "runc" + } + }, + "example": { + "runc": { + "path": "runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "type": "string", + "default": "runc", + "example": "runc" + }, + "Swarm": { + "$ref": "#/components/schemas/SwarmInfo" + }, + "LiveRestoreEnabled": { + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "type": "boolean", + "default": false, + "example": false + }, + "Isolation": { + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "type": "string", + "enum": [ + "default", + "hyperv", + "process", + "" + ] + }, + "InitBinary": { + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/components/schemas/Commit" + }, + "RuncCommit": { + "$ref": "#/components/schemas/Commit" + }, + "InitCommit": { + "$ref": "#/components/schemas/Commit" + }, + "SecurityOptions": { + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, user-namespaces (userns), rootless and\nno-new-privileges.\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns", + "name=rootless" + ] + }, + "ProductLicense": { + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "type": "string", + "example": "Community Engine" + }, + "DefaultAddressPools": { + "description": "List of custom default address pools for local networks, which can be\nspecified in the daemon.json file or dockerd option.\n\nExample: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n10.10.[0-255].0/24 address pools.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Base": { + "description": "The network address in CIDR format", + "type": "string", + "example": "10.10.0.0/16" + }, + "Size": { + "description": "The network pool size", + "type": "integer", + "example": "24" + } + } + } + }, + "FirewallBackend": { + "$ref": "#/components/schemas/FirewallInfo" + }, + "DiscoveredDevices": { + "description": "List of devices discovered by device drivers.\n\nEach device includes information about its source driver, kind, name,\nand additional driver-specific attributes.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceInfo" + } + }, + "NRI": { + "$ref": "#/components/schemas/NRIInfo" + }, + "Warnings": { + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "WARNING: No memory limit support" + ] + }, + "CDISpecDirs": { + "description": "List of directories where (Container Device Interface) CDI\nspecifications are located.\n\nThese specifications define vendor-specific modifications to an OCI\nruntime specification for a container being created.\n\nAn empty list indicates that CDI device injection is disabled.\n\nNote that since using CDI device injection requires the daemon to have\nexperimental enabled. For non-experimental daemons an empty list will\nalways be returned.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/etc/cdi", + "/var/run/cdi" + ] + }, + "Containerd": { + "$ref": "#/components/schemas/ContainerdInfo" + } + } + }, + "ContainerdInfo": { + "description": "Information for connecting to the containerd instance that is used by the daemon.\nThis is included for debugging purposes only.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Address": { + "description": "The address of the containerd socket.", + "type": "string", + "example": "/run/containerd/containerd.sock" + }, + "Namespaces": { + "description": "The namespaces that the daemon uses for running containers and\nplugins in containerd. These namespaces can be configured in the\ndaemon configuration, and are considered to be used exclusively\nby the daemon, Tampering with the containerd instance may cause\nunexpected behavior.\n\nAs these namespaces are considered to be exclusively accessed\nby the daemon, it is not recommended to change these values,\nor to change them to a value that is used by other systems,\nsuch as cri-containerd.\n", + "type": "object", + "properties": { + "Containers": { + "description": "The default containerd namespace used for containers managed\nby the daemon.\n\nThe default namespace for containers is \"moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "moby", + "example": "moby" + }, + "Plugins": { + "description": "The default containerd namespace used for plugins managed by\nthe daemon.\n\nThe default namespace for plugins is \"plugins.moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "plugins.moby", + "example": "plugins.moby" + } + } + } + } + }, + "FirewallInfo": { + "description": "Information about the daemon's firewalling configuration.\n\nThis field is currently only used on Linux, and omitted on other platforms.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Driver": { + "description": "The name of the firewall backend driver.\n", + "type": "string", + "example": "nftables" + }, + "Info": { + "description": "Information about the firewall backend, provided as\n\"label\" / \"value\" pairs.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "ReloadedAt", + "2025-01-01T00:00:00Z" + ] + ] + } + } + }, + "PluginsInfo": { + "description": "Available plugins per type.\n\n\n\n\n\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n", + "type": "object", + "properties": { + "Volume": { + "description": "Names of available volume-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "local" + ] + }, + "Network": { + "description": "Names of available network-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ] + }, + "Authorization": { + "description": "Names of available authorization plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "img-authz-plugin", + "hbm" + ] + }, + "Log": { + "description": "Names of available logging-drivers, and logging-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "splunk", + "syslog" + ] + } + } + }, + "RegistryServiceConfig": { + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "type": [ + "object", + "null" + ], + "properties": { + "InsecureRegistryCIDRs": { + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`::1/128` and `127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "::1/128", + "127.0.0.0/8" + ] + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ] + } + } + }, + "IndexInfo": { + "description": "IndexInfo contains information about a registry.", + "type": [ + "object", + "null" + ], + "properties": { + "Name": { + "description": "Name of the registry, such as \"docker.io\".\n", + "type": "string", + "example": "docker.io" + }, + "Mirrors": { + "description": "List of mirrors, expressed as URIs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ] + }, + "Secure": { + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "type": "boolean", + "example": true + }, + "Official": { + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "type": "boolean", + "example": true + } + } + }, + "Runtime": { + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n", + "type": "object", + "properties": { + "path": { + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "--debug", + "--systemd-cgroup=false" + ] + }, + "status": { + "description": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "string" + }, + "example": { + "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" + } + } + } + }, + "Commit": { + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n", + "type": "object", + "properties": { + "ID": { + "description": "Actual commit ID of external tool.", + "type": "string", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + } + } + }, + "SwarmInfo": { + "description": "Represents generic information about swarm.\n", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string", + "default": "", + "example": "k67qz4598weg5unwwffg6z1m1" + }, + "NodeAddr": { + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "type": "string", + "default": "", + "example": "10.0.0.46" + }, + "LocalNodeState": { + "$ref": "#/components/schemas/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "default": false, + "example": true + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "description": "List of ID's and addresses of other managers in the swarm.\n", + "type": [ + "array", + "null" + ], + "default": null, + "items": { + "$ref": "#/components/schemas/PeerNode" + }, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ] + }, + "Nodes": { + "description": "Total number of nodes in the swarm.", + "type": [ + "integer", + "null" + ], + "example": 4 + }, + "Managers": { + "description": "Total number of managers in the swarm.", + "type": [ + "integer", + "null" + ], + "example": 3 + }, + "Cluster": { + "$ref": "#/components/schemas/ClusterInfo" + } + } + }, + "LocalNodeState": { + "description": "Current local status of this node.", + "type": "string", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ], + "example": "active" + }, + "PeerNode": { + "description": "Represents a peer-node in the swarm", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string" + }, + "Addr": { + "description": "IP address and ports at which this node can be reached.\n", + "type": "string" + } + } + }, + "NetworkAttachmentConfig": { + "description": "Specifies how a service should be attached to a particular network.\n", + "type": "object", + "properties": { + "Target": { + "description": "The target network for attachment. Must be a network name or ID.\n", + "type": "string" + }, + "Aliases": { + "description": "Discoverable alternate names for the service on this network.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "description": "Driver attachment options for the network target.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "EventActor": { + "description": "Actor describes something that generates events, like a container, network,\nor a volume.\n", + "type": "object", + "properties": { + "ID": { + "description": "The ID of the object emitting the event", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Attributes": { + "description": "Various key/value attributes of the object, depending on its type.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-label-value", + "image": "alpine:latest", + "name": "my-container" + } + } + } + }, + "EventMessage": { + "description": "EventMessage represents the information an event contains.\n", + "type": "object", + "title": "SystemEventsResponse", + "properties": { + "Type": { + "description": "The type of object emitting the event", + "type": "string", + "enum": [ + "builder", + "config", + "container", + "daemon", + "image", + "network", + "node", + "plugin", + "secret", + "service", + "volume" + ], + "example": "container" + }, + "Action": { + "description": "The type of event", + "type": "string", + "example": "create" + }, + "Actor": { + "$ref": "#/components/schemas/EventActor" + }, + "scope": { + "description": "Scope of the event. Engine events are `local` scope. Cluster (Swarm)\nevents are `swarm` scope.\n", + "type": "string", + "enum": [ + "local", + "swarm" + ] + }, + "time": { + "description": "Timestamp of event", + "type": "integer", + "format": "int64", + "example": 1629574695 + }, + "timeNano": { + "description": "Timestamp of event, with nanosecond accuracy", + "type": "integer", + "format": "int64", + "example": 1629574695515050000 + } + } + }, + "OCIDescriptor": { + "type": "object", + "x-go-name": "Descriptor", + "description": "A descriptor struct containing digest, media type, and size, as defined in\nthe [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).\n", + "properties": { + "mediaType": { + "description": "The media type of the object this schema refers to.\n", + "type": "string", + "example": "application/vnd.oci.image.manifest.v1+json" + }, + "digest": { + "description": "The digest of the targeted content.\n", + "type": "string", + "example": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + }, + "size": { + "description": "The size in bytes of the blob.\n", + "type": "integer", + "format": "int64", + "example": 424 + }, + "urls": { + "description": "List of URLs from which this object MAY be downloaded.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "format": "uri" + } + }, + "annotations": { + "description": "Arbitrary metadata relating to the targeted content.", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.base.digest": "sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8", + "org.opencontainers.image.base.name": "scratch", + "org.opencontainers.image.created": "2025-01-27T00:00:00Z", + "org.opencontainers.image.revision": "9fabb4bad5138435b01857e2fe9363e2dc5f6a79", + "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base", + "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu", + "org.opencontainers.image.version": "24.04" + } + }, + "data": { + "type": [ + "string", + "null" + ], + "description": "Data is an embedding of the targeted content. This is encoded as a base64\nstring when marshalled to JSON (automatically, by encoding/json). If\npresent, Data can be used directly to avoid fetching the targeted content.", + "example": null + }, + "platform": { + "$ref": "#/components/schemas/OCIPlatform" + }, + "artifactType": { + "description": "ArtifactType is the IANA media type of this artifact.", + "type": [ + "string", + "null" + ], + "example": null + } + } + }, + "OCIPlatform": { + "type": [ + "object", + "null" + ], + "x-go-name": "Platform", + "description": "Describes the platform which the image in the manifest runs on, as defined\nin the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).\n", + "properties": { + "architecture": { + "description": "The CPU architecture, for example `amd64` or `ppc64`.\n", + "type": "string", + "example": "arm" + }, + "os": { + "description": "The operating system, for example `linux` or `windows`.\n", + "type": "string", + "example": "windows" + }, + "os.version": { + "description": "Optional field specifying the operating system version, for example on\nWindows `10.0.19041.1165`.\n", + "type": "string", + "example": "10.0.19041.1165" + }, + "os.features": { + "description": "Optional field specifying an array of strings, each listing a required\nOS feature (for example on Windows `win32k`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "win32k" + ] + }, + "variant": { + "description": "Optional field specifying a variant of the CPU, for example `v7` to\nspecify ARMv7 when architecture is `arm`.\n", + "type": "string", + "example": "v7" + } + } + }, + "DistributionInspect": { + "type": "object", + "x-go-name": "DistributionInspect", + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "description": "Describes the result obtained from contacting the registry to retrieve\nimage metadata.\n", + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image.\n", + "items": { + "$ref": "#/components/schemas/OCIPlatform" + } + } + } + }, + "ClusterVolume": { + "type": "object", + "description": "Options and information specific to, and only present on, Swarm CSI\ncluster volumes.\n", + "properties": { + "ID": { + "type": "string", + "description": "The Swarm ID of this volume. Because cluster volumes are Swarm\nobjects, they have an ID, unlike non-cluster volumes. This ID can\nbe used to refer to the Volume instead of the name.\n" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + }, + "Info": { + "type": "object", + "description": "Information about the global status of the volume.\n", + "properties": { + "CapacityBytes": { + "type": "integer", + "format": "int64", + "description": "The capacity of the volume in bytes. A value of 0 indicates that\nthe capacity is unknown.\n" + }, + "VolumeContext": { + "type": "object", + "description": "A map of strings to strings returned from the storage plugin when\nthe volume is created.\n", + "additionalProperties": { + "type": "string" + } + }, + "VolumeID": { + "type": "string", + "description": "The ID of the volume as returned by the CSI storage plugin. This\nis distinct from the volume's ID as provided by Docker. This ID\nis never used by the user when communicating with Docker to refer\nto this volume. If the ID is blank, then the Volume has not been\nsuccessfully created in the plugin yet.\n" + }, + "AccessibleTopology": { + "type": "array", + "description": "The topology this volume is actually accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + } + }, + "PublishStatus": { + "type": "array", + "description": "The status of the volume as it pertains to its publishing and use on\nspecific nodes\n", + "items": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "The ID of the Swarm node the volume is published on.\n" + }, + "State": { + "type": "string", + "description": "The published state of the volume.\n* `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.\n* `published` The volume is published successfully to the node.\n* `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.\n* `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.\n", + "enum": [ + "pending-publish", + "published", + "pending-node-unpublish", + "pending-controller-unpublish" + ] + }, + "PublishContext": { + "type": "object", + "description": "A map of strings to strings returned by the CSI controller\nplugin when a volume is published.\n", + "additionalProperties": { + "type": "string" + } + } + } + } + } + } + }, + "ClusterVolumeSpec": { + "type": "object", + "description": "Cluster-specific options used to create the volume.\n", + "properties": { + "Group": { + "type": "string", + "description": "Group defines the volume group of this volume. Volumes belonging to\nthe same group can be referred to by group name when creating\nServices. Referring to a volume by group instructs Swarm to treat\nvolumes in that group interchangeably for the purpose of scheduling.\nVolumes with an empty string for a group technically all belong to\nthe same, emptystring group.\n" + }, + "AccessMode": { + "type": "object", + "description": "Defines how the volume is used by tasks.\n", + "properties": { + "Scope": { + "type": "string", + "description": "The set of nodes this volume can be used on at one time.\n- `single` The volume may only be scheduled to one node at a time.\n- `multi` the volume may be scheduled to any supported number of nodes at a time.\n", + "default": "single", + "enum": [ + "single", + "multi" + ] + }, + "Sharing": { + "type": "string", + "description": "The number and way that different tasks can use this volume\nat one time.\n- `none` The volume may only be used by one task at a time.\n- `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly\n- `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.\n- `all` The volume may have any number of readers and writers.\n", + "default": "none", + "enum": [ + "none", + "readonly", + "onewriter", + "all" + ] + }, + "MountVolume": { + "type": "object", + "description": "Options for using this volume as a Mount-type volume.\n\n Either MountVolume or BlockVolume, but not both, must be\n present.\n properties:\n FsType:\n type: \"string\"\n description: |\n Specifies the filesystem type for the mount volume.\n Optional.\n MountFlags:\n type: \"array\"\n description: |\n Flags to pass when mounting the volume. Optional.\n items:\n type: \"string\"\nBlockVolume:\n type: \"object\"\n description: |\n Options for using this volume as a Block-type volume.\n Intentionally empty.\n" + }, + "Secrets": { + "type": "array", + "description": "Swarm Secrets that are passed to the CSI storage plugin when\noperating on this volume.\n", + "items": { + "type": "object", + "description": "One cluster volume secret entry. Defines a key-value pair that\nis passed to the plugin.\n", + "properties": { + "Key": { + "type": "string", + "description": "Key is the name of the key of the key-value pair passed to\nthe plugin.\n" + }, + "Secret": { + "type": "string", + "description": "Secret is the swarm Secret object from which to read data.\nThis can be a Secret name or ID. The Secret data is\nretrieved by swarm and used as the value of the key-value\npair passed to the plugin.\n" + } + } + } + }, + "AccessibilityRequirements": { + "type": "object", + "description": "Requirements for the accessible topology of the volume. These\nfields are optional. For an in-depth description of what these\nfields mean, see the CSI specification.\n", + "properties": { + "Requisite": { + "type": "array", + "description": "A list of required topologies, at least one of which the\nvolume must be accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + }, + "Preferred": { + "type": "array", + "description": "A list of topologies that the volume should attempt to be\nprovisioned in.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + } + }, + "CapacityRange": { + "type": "object", + "description": "The desired capacity that the volume should be created with. If\nempty, the plugin will decide the capacity.\n", + "properties": { + "RequiredBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must be at least this big. The value of 0\nindicates an unspecified minimum\n" + }, + "LimitBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must not be bigger than this. The value of 0\nindicates an unspecified maximum.\n" + } + } + }, + "Availability": { + "type": "string", + "description": "The availability of the volume for use in tasks.\n- `active` The volume is fully available for scheduling on the cluster\n- `pause` No new workloads should use the volume, but existing workloads are not stopped.\n- `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.\n", + "default": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + } + } + } + }, + "Topology": { + "description": "A map of topological domains to topological segments. For in depth\ndetails, see documentation for the Topology object in the CSI\nspecification.\n", + "type": "object", + "properties": { + "Segments": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "AttestationStatement": { + "x-go-name": "AttestationStatement", + "description": "AttestationStatement is a single in-toto statement attached to an image.\n", + "type": "object", + "required": [ + "Descriptor", + "PredicateType" + ], + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "PredicateType": { + "description": "The in-toto predicate type URI of this statement.", + "type": "string", + "example": "https://slsa.dev/provenance/v0.2" + }, + "Statement": { + "description": "The verbatim in-toto statement JSON. Only included when the caller\nopts in via the `statement=true` query parameter; otherwise absent.\n", + "type": [ + "object", + "null" + ] + } + } + }, + "ImageManifestSummary": { + "x-go-name": "ManifestSummary", + "description": "ImageManifestSummary represents a summary of an image manifest.\n", + "type": "object", + "required": [ + "ID", + "Descriptor", + "Available", + "Size", + "Kind" + ], + "properties": { + "ID": { + "description": "ID is the content-addressable ID of an image and is the same as the\ndigest of the image manifest.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + }, + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Available": { + "description": "Indicates whether all the child content (image config, layers) is fully available locally.", + "type": "boolean", + "example": true + }, + "Size": { + "type": "object", + "required": [ + "Content", + "Total" + ], + "properties": { + "Total": { + "type": "integer", + "format": "int64", + "example": 8213251, + "description": "Total is the total size (in bytes) of all the locally present\ndata (both distributable and non-distributable) that's related to\nthis manifest and its children.\nThis equal to the sum of [Content] size AND all the sizes in the\n[Size] struct present in the Kind-specific data struct.\nFor example, for an image kind (Kind == \"image\")\nthis would include the size of the image content and unpacked\nimage snapshots ([Size.Content] + [ImageData.Size.Unpacked]).\n" + }, + "Content": { + "description": "Content is the size (in bytes) of all the locally present\ncontent in the content store (e.g. image config, layers)\nreferenced by this manifest and its children.\nThis only includes blobs in the content store.\n", + "type": "integer", + "format": "int64", + "example": 3987495 + } + } + }, + "Kind": { + "type": "string", + "example": "image", + "enum": [ + "image", + "attestation", + "unknown" + ], + "description": "The kind of the manifest.\n\nkind | description\n-------------|-----------------------------------------------------------\nimage | Image manifest that can be used to start a container.\nattestation | Attestation manifest produced by the Buildkit builder for a specific image manifest.\n" + }, + "ImageData": { + "description": "The image data for the image manifest.\nThis field is only populated when Kind is \"image\".\n", + "type": [ + "object", + "null" + ], + "x-omitempty": true, + "required": [ + "Platform", + "Containers", + "Size", + "UnpackedSize" + ], + "properties": { + "Platform": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIPlatform" + }, + { + "description": "OCI platform of the image. This will be the platform specified in the\nmanifest descriptor from the index/manifest list.\nIf it's not available, it will be obtained from the image config.\n" + } + ] + }, + "Identity": { + "allOf": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "anyOf": [ + { + "description": "Identity holds information about the identity and origin of this image.\nFor image list responses, this can duplicate Build/Pull fields across\nimage manifests, because those parts are image-level metadata.\n" + }, + { + "type": "null" + } + ] + } + ] + }, + "Containers": { + "description": "The IDs of the containers that are using this image.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430", + "abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e" + ] + }, + "Size": { + "type": "object", + "required": [ + "Unpacked" + ], + "properties": { + "Unpacked": { + "type": "integer", + "format": "int64", + "example": 3987495, + "description": "Unpacked is the size (in bytes) of the locally unpacked\n(uncompressed) image content that's directly usable by the containers\nrunning this image.\nIt's independent of the distributable content - e.g.\nthe image might still have an unpacked data that's still used by\nsome container even when the distributable/compressed content is\nalready gone.\n" + } + } + } + } + }, + "AttestationData": { + "description": "The image data for the attestation manifest.\nThis field is only populated when Kind is \"attestation\".\n", + "type": [ + "object", + "null" + ], + "x-omitempty": true, + "required": [ + "For" + ], + "properties": { + "For": { + "description": "The digest of the image manifest that this attestation is for.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + } + } + } + } + } + } + }, + "id": "engine-1.55-fd4cfee0e177", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/components" + }, + { + "pointer": "/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json", + "text/plain" + ], + "id": "engine-1.55-38ce21e76793", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/consumes", + "destinationPointer": null + }, + { + "pointer": "/definitions", + "beforePresent": true, + "afterPresent": false, + "before": { + "ImageHistoryResponseItem": { + "type": "object", + "x-go-name": "HistoryResponseItem", + "title": "HistoryResponseItem", + "description": "individual image layer information in response to ImageHistory operation", + "required": [ + "Id", + "Created", + "CreatedBy", + "Tags", + "Size", + "Comment" + ], + "properties": { + "Id": { + "type": "string", + "x-nullable": false + }, + "Created": { + "type": "integer", + "format": "int64", + "x-nullable": false + }, + "CreatedBy": { + "type": "string", + "x-nullable": false + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64", + "x-nullable": false + }, + "Comment": { + "type": "string", + "x-nullable": false + } + } + }, + "PortSummary": { + "type": "object", + "description": "Describes a port-mapping between the container and the host.\n", + "required": [ + "PrivatePort", + "Type" + ], + "properties": { + "IP": { + "type": "string", + "format": "ip-address", + "description": "Host IP address that the container's port is mapped to", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "PrivatePort": { + "type": "integer", + "format": "uint16", + "x-nullable": false, + "description": "Port on the container" + }, + "PublicPort": { + "type": "integer", + "format": "uint16", + "description": "Port exposed on the host" + }, + "Type": { + "type": "string", + "x-nullable": false, + "enum": [ + "tcp", + "udp", + "sctp" + ] + } + }, + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountType": { + "description": "The mount type. Available types:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.", + "type": "string", + "enum": [ + "bind", + "cluster", + "image", + "npipe", + "tmpfs", + "volume" + ], + "example": "volume" + }, + "MountPoint": { + "type": "object", + "description": "MountPoint represents a mount point configuration inside the container.\nThis is used for reporting the mountpoints in use by a container.\n", + "properties": { + "Type": { + "description": "The mount type:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.\n", + "allOf": [ + { + "$ref": "#/definitions/MountType" + } + ], + "example": "volume" + }, + "Name": { + "description": "Name is the name reference to the underlying data defined by `Source`\ne.g., the volume name.\n", + "type": "string", + "example": "myvolume" + }, + "Source": { + "description": "Source location of the mount.\n\nFor volumes, this contains the storage location of the volume (within\n`/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\nthe source (host) part of the bind-mount. For `tmpfs` mount points, this\nfield is empty.\n", + "type": "string", + "example": "/var/lib/docker/volumes/myvolume/_data" + }, + "Destination": { + "description": "Destination is the path relative to the container root (`/`) where\nthe `Source` is mounted inside the container.\n", + "type": "string", + "example": "/usr/share/nginx/html/" + }, + "Driver": { + "description": "Driver is the volume driver used to create the volume (if it is a volume).\n", + "type": "string", + "example": "local" + }, + "Mode": { + "description": "Mode is a comma separated list of options supplied by the user when\ncreating the bind/volume mount.\n\nThe default is platform-specific (`\"z\"` on Linux, empty on Windows).\n", + "type": "string", + "example": "z" + }, + "RW": { + "description": "Whether the mount is mounted writable (read-write).\n", + "type": "boolean", + "example": true + }, + "Propagation": { + "description": "Propagation describes how mounts are propagated from the host into the\nmount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)\nfor details. This field is not used on Windows.\n", + "type": "string", + "example": "" + } + } + }, + "DeviceMapping": { + "type": "object", + "description": "A device mapping between the host and container", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "DeviceRequest": { + "type": "object", + "description": "A request for devices to be sent to device drivers", + "properties": { + "Driver": { + "description": "The name of the device driver to use for this request.\n\nNote that if this is specified the capabilities are ignored when\nselecting a device driver.\n", + "type": "string", + "example": "nvidia" + }, + "Count": { + "type": "integer", + "example": -1 + }, + "DeviceIDs": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ] + }, + "Capabilities": { + "description": "A list of capabilities; an OR list of AND lists of capabilities.\n\nNote that if a driver is specified the capabilities have no effect on\nselecting a driver as the driver name is used directly.\n\nNote that if no driver is specified the capabilities are used to\nselect a driver with the required capabilities.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "gpu", + "nvidia", + "compute" + ] + ] + }, + "Options": { + "description": "Driver-specific options, specified as a key/value pairs. These options\nare passed directly to the driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "description": "Device path", + "type": "string" + }, + "Rate": { + "description": "Rate", + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "description": "Container path.", + "type": "string" + }, + "Source": { + "description": "Mount source (e.g. a volume name, a host path). The source cannot be\nspecified when using `Type=tmpfs`. For `Type=bind`, the source path\nmust either exist, or the `CreateMountpoint` must be set to `true` to\ncreate the source path on the host if missing.\n\nFor `Type=npipe`, the pipe must exist prior to creating the container.", + "type": "string" + }, + "Type": { + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container.\n- `cluster` a Swarm cluster volume\n- `image` Mounts an image.\n- `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container.\n- `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n", + "allOf": [ + { + "$ref": "#/definitions/MountType" + } + ] + }, + "ReadOnly": { + "description": "Whether the mount should be read-only.", + "type": "boolean" + }, + "Consistency": { + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`.", + "type": "string" + }, + "BindOptions": { + "description": "Optional configuration for the `bind` type.", + "type": "object", + "properties": { + "Propagation": { + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "type": "string", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + }, + "NonRecursive": { + "description": "Disable recursive bind mount.", + "type": "boolean", + "default": false + }, + "CreateMountpoint": { + "description": "Create mount point on host if missing", + "type": "boolean", + "default": false + }, + "ReadOnlyNonRecursive": { + "description": "Make the mount non-recursively read-only, but still leave the mount recursive\n(unless NonRecursive is set to `true` in conjunction).\n\nAdded in v1.44, before that version all read-only mounts were\nnon-recursive by default. To match the previous behaviour this\nwill default to `true` for clients on versions prior to v1.44.\n", + "type": "boolean", + "default": false + }, + "ReadOnlyForceRecursive": { + "description": "Raise an error if the mount cannot be made recursively read-only.", + "type": "boolean", + "default": false + } + } + }, + "VolumeOptions": { + "description": "Optional configuration for the `volume` type.", + "type": "object", + "properties": { + "NoCopy": { + "description": "Populate volume with data from the target.", + "type": "boolean", + "default": false + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "DriverConfig": { + "description": "Map of driver specific options", + "type": "object", + "properties": { + "Name": { + "description": "Name of the driver to use to create the volume.", + "type": "string" + }, + "Options": { + "description": "key/value map of driver specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "Subpath": { + "description": "Source path inside the volume. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-volume/subdirectory" + } + } + }, + "ImageOptions": { + "description": "Optional configuration for the `image` type.", + "type": "object", + "properties": { + "Subpath": { + "description": "Source path inside the image. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-image/subdirectory" + } + } + }, + "TmpfsOptions": { + "description": "Optional configuration for the `tmpfs` type.", + "type": "object", + "properties": { + "SizeBytes": { + "description": "The size for the tmpfs mount in bytes.", + "type": "integer", + "format": "int64" + }, + "Mode": { + "description": "The permission mode for the tmpfs mount in an integer.\nThe value must not be in octal format (e.g. 755) but rather\nthe decimal representation of the octal value (e.g. 493).\n", + "type": "integer" + }, + "Options": { + "description": "The options to be passed to the tmpfs mount. An array of arrays.\nFlag options should be provided as 1-length arrays. Other types\nshould be provided as as 2-length arrays, where the first item is\nthe key and the second the value.\n", + "type": "array", + "items": { + "type": "array", + "minItems": 1, + "maxItems": 2, + "items": { + "type": "string" + } + }, + "example": [ + [ + "noexec" + ] + ] + } + } + } + } + }, + "RestartPolicy": { + "description": "The behavior to apply when the container exits. The default is not to\nrestart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is\nadded before each restart to prevent flooding the server.\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `no` Do not automatically restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "no", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up.\n" + } + } + }, + "Resources": { + "description": "A container's resources (cgroups config, ulimits, etc)", + "type": "object", + "properties": { + "CpuShares": { + "description": "An integer value representing this container's relative CPU weight\nversus other containers.\n", + "type": "integer" + }, + "Memory": { + "description": "Memory limit in bytes.", + "type": "integer", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "description": "Path to `cgroups` under which the container's `cgroup` is created. If\nthe path is not absolute, the path is considered to be relative to the\n`cgroups` path of the init process. Cgroups are created if they do not\nalready exist.\n", + "type": "string" + }, + "BlkioWeight": { + "description": "Block IO weight (relative weight).", + "type": "integer", + "minimum": 0, + "maximum": 1000 + }, + "BlkioWeightDevice": { + "description": "Block IO weight (relative device weight) in the form:\n\n```\n[{\"Path\": \"device_path\", \"Weight\": weight}]\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "type": "integer", + "minimum": 0 + } + } + } + }, + "BlkioDeviceReadBps": { + "description": "Limit read rate (bytes per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "description": "Limit write rate (bytes per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "description": "Limit read rate (IO per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "description": "Limit write rate (IO per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "CpuPeriod": { + "description": "The length of a CPU period in microseconds.", + "type": "integer", + "format": "int64" + }, + "CpuQuota": { + "description": "Microseconds of CPU time that the container can get in a CPU period.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimePeriod": { + "description": "The length of a CPU real-time period in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpusetCpus": { + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n", + "type": "string", + "example": "0-3" + }, + "CpusetMems": { + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\neffective on NUMA systems.\n", + "type": "string" + }, + "Devices": { + "description": "A list of devices to add to the container.", + "type": "array", + "items": { + "$ref": "#/definitions/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "description": "a list of cgroup rules to apply to the container", + "type": "array", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DeviceRequests": { + "description": "A list of requests for devices to be sent to device drivers.\n", + "type": "array", + "items": { + "$ref": "#/definitions/DeviceRequest" + } + }, + "MemoryReservation": { + "description": "Memory soft limit in bytes.", + "type": "integer", + "format": "int64" + }, + "MemorySwap": { + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited\nswap.\n", + "type": "integer", + "format": "int64" + }, + "MemorySwappiness": { + "description": "Tune a container's memory swappiness behavior. Accepts an integer\nbetween 0 and 100.\n", + "type": "integer", + "format": "int64", + "minimum": 0, + "maximum": 100 + }, + "NanoCpus": { + "description": "CPU quota in units of 10-9 CPUs.", + "type": "integer", + "format": "int64" + }, + "OomKillDisable": { + "description": "Disable OOM Killer for the container.", + "type": "boolean" + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": "boolean", + "x-nullable": true + }, + "PidsLimit": { + "description": "Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\nto not change.\n", + "type": "integer", + "format": "int64", + "x-nullable": true + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example:\n\n```\n{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + }, + "CpuCount": { + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "CpuPercent": { + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "IOMaximumIOps": { + "description": "Maximum IOps for the container system drive (Windows only)", + "type": "integer", + "format": "int64" + }, + "IOMaximumBandwidth": { + "description": "Maximum IO in bytes per second for the container system drive\n(Windows only).\n", + "type": "integer", + "format": "int64" + } + } + }, + "Limit": { + "description": "An object describing a limit on resources which can be requested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "Pids": { + "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n", + "type": "integer", + "format": "int64", + "default": 0, + "example": 100 + } + } + }, + "ResourceObject": { + "description": "An object describing the resources which can be advertised by a node and\nrequested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/definitions/GenericResources" + } + } + }, + "GenericResources": { + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`).\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + }, + "HealthConfig": { + "description": "A test to perform to check that the container is healthy.\nHealthcheck commands should be side-effect free.\n", + "type": "object", + "properties": { + "Test": { + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n\nA non-zero exit code indicates a failed healthcheck:\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (treated as unhealthy)\n- other values: error running probe\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "Timeout": { + "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n\nIf the health check command does not complete within this timeout,\nthe check is considered failed and the health check process is\nforcibly terminated without a graceful shutdown.\n", + "type": "integer", + "format": "int64" + }, + "Retries": { + "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n", + "type": "integer" + }, + "StartPeriod": { + "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "StartInterval": { + "description": "The time to wait between checks in nanoseconds during the start period.\nIt should be 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + } + } + }, + "Health": { + "description": "Health stores information about the container's healthcheck results.\n", + "type": "object", + "x-nullable": true, + "properties": { + "Status": { + "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n", + "type": "string", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + }, + "Log": { + "type": "array", + "description": "Log contains the last few results (oldest first)\n", + "items": { + "$ref": "#/definitions/HealthcheckResult" + } + } + } + }, + "HealthcheckResult": { + "description": "HealthcheckResult stores information about a single run of a healthcheck probe\n", + "type": "object", + "x-nullable": true, + "properties": { + "Start": { + "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2020-01-04T10:44:24.496525531Z" + }, + "End": { + "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2020-01-04T10:45:21.364524523Z" + }, + "ExitCode": { + "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n", + "type": "integer", + "example": 0 + }, + "Output": { + "description": "Output from last check", + "type": "string" + } + } + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/definitions/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written", + "example": "" + }, + "LogConfig": { + "type": "object", + "description": "The logging configuration for this container", + "properties": { + "Type": { + "description": "Name of the logging driver used for the container or \"none\"\nif logging is disabled.", + "type": "string", + "enum": [ + "local", + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "description": "Driver-specific configuration options for the logging driver.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "5", + "max-size": "10m" + } + } + } + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/definitions/PortMap" + }, + "RestartPolicy": { + "$ref": "#/definitions/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to the container.\n", + "type": "array", + "items": { + "$ref": "#/definitions/Mount" + } + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.\n", + "x-nullable": true, + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + }, + "Annotations": { + "type": "object", + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n", + "additionalProperties": { + "type": "string" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "enum": [ + "private", + "host" + ], + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n" + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string", + "format": "ip-address", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n", + "additionalProperties": { + "type": "string" + } + }, + "Tmpfs": { + "type": "object", + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n", + "additionalProperties": { + "type": "string" + } + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "type": "integer", + "format": "int64", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "minimum": 0 + }, + "Sysctls": { + "type": "object", + "x-nullable": true, + "description": "A list of kernel parameters (sysctls) to set in the container.\n\nThis field is omitted if not set.", + "additionalProperties": { + "type": "string" + }, + "example": { + "net.ipv4.ip_forward": "1" + } + }, + "Runtime": { + "type": "string", + "x-nullable": true, + "description": "Runtime to use with this container." + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/asound", + "/proc/acpi", + "/proc/kcore", + "/proc/keys", + "/proc/latency_stats", + "/proc/timer_list", + "/proc/timer_stats", + "/proc/sched_debug", + "/proc/scsi", + "/sys/firmware", + "/sys/devices/virtual/powercap" + ] + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/bus", + "/proc/fs", + "/proc/irq", + "/proc/sys", + "/proc/sysrq-trigger" + ] + } + } + } + ] + }, + "ContainerConfig": { + "description": "Configuration for a container that is portable between hosts.\n", + "type": "object", + "properties": { + "Hostname": { + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.\n", + "type": "string", + "example": "439f4e91bd1d" + }, + "Domainname": { + "description": "The domain name to use for the container.\n", + "type": "string" + }, + "User": { + "description": "Commands run as this user inside the container. If omitted, commands\nrun as the user specified in the image the container was started from.\n\nCan be either user-name or UID, and optional group-name or GID,\nseparated by a colon (`[<:group-name|GID>]`).", + "type": "string", + "example": "123:456" + }, + "AttachStdin": { + "description": "Whether to attach to `stdin`.", + "type": "boolean", + "default": false + }, + "AttachStdout": { + "description": "Whether to attach to `stdout`.", + "type": "boolean", + "default": true + }, + "AttachStderr": { + "description": "Whether to attach to `stderr`.", + "type": "boolean", + "default": true + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Tty": { + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.\n", + "type": "boolean", + "default": false + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean", + "default": false + }, + "StdinOnce": { + "description": "Close `stdin` after one attached client disconnects", + "type": "boolean", + "default": false + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/definitions/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": "boolean", + "default": false, + "example": false, + "x-nullable": true + }, + "Image": { + "description": "The name (or reference) of the image to use when creating the container,\nor which was used when the container was created.\n", + "type": "string", + "example": "example-image:1.0" + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "NetworkDisabled": { + "description": "Disable networking for the container.", + "type": "boolean", + "x-nullable": true + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [] + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": "string", + "example": "SIGTERM", + "x-nullable": true + }, + "StopTimeout": { + "description": "Timeout to stop a container in seconds. If omitted, the daemon-wide\ndefault (`default-stop-timeout`) is used.\n", + "type": "integer", + "x-nullable": true + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ] + } + } + }, + "ImageConfig": { + "description": "Configuration of the image. These fields are used as defaults\nwhen starting a container from the image.\n", + "type": "object", + "properties": { + "User": { + "description": "The user that commands are run as inside the container.", + "type": "string", + "example": "web:web" + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/definitions/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": "boolean", + "default": false, + "example": false, + "x-nullable": true + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "/app/data": {}, + "/app/config": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [] + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": "string", + "example": "SIGTERM", + "x-nullable": true + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ] + } + } + }, + "NetworkingConfig": { + "description": "NetworkingConfig represents the container's networking configuration for\neach of its interfaces.\nIt is used for the networking configs specified in the `docker create`\nand `docker network connect` commands.\n", + "type": "object", + "properties": { + "EndpointsConfig": { + "description": "A mapping of network name to endpoint configuration for that network.\nThe endpoint configuration can be left empty to connect to that\nnetwork with no particular endpoint configuration.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EndpointSettings" + } + } + }, + "example": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "MacAddress": "02:42:ac:12:05:02", + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + }, + "NetworkSettings": { + "description": "NetworkSettings exposes the network settings in the API", + "type": "object", + "properties": { + "SandboxID": { + "description": "SandboxID uniquely represents a container's network stack.", + "type": "string", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "SandboxKey": { + "description": "SandboxKey is the full path of the netns handle", + "type": "string", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "Ports": { + "$ref": "#/definitions/PortMap" + }, + "Networks": { + "description": "Information about all networks that the container is connected to.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EndpointSettings" + } + } + } + }, + "Address": { + "description": "Address represents an IPv4 or IPv6 IP address.", + "type": "object", + "properties": { + "Addr": { + "description": "IP address.", + "type": "string" + }, + "PrefixLen": { + "description": "Mask length of the IP address.", + "type": "integer" + } + } + }, + "PortMap": { + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "type": "object", + "additionalProperties": { + "type": "array", + "x-nullable": true, + "items": { + "$ref": "#/definitions/PortBinding" + } + }, + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ], + "2377/tcp": null + } + }, + "PortBinding": { + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n", + "type": "object", + "properties": { + "HostIp": { + "description": "Host IP address that the container's port is mapped to.", + "type": "string", + "example": "127.0.0.1", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "HostPort": { + "description": "Host port number that the container's port is mapped to.", + "type": "string", + "example": "4443" + } + } + }, + "DriverData": { + "description": "Information about the storage driver used to store the container's and\nimage's filesystem.\n", + "type": "object", + "required": [ + "Name", + "Data" + ], + "properties": { + "Name": { + "description": "Name of the storage driver.", + "type": "string", + "x-nullable": false, + "example": "overlay2" + }, + "Data": { + "description": "Low-level storage metadata, provided as key/value pairs.\n\nThis information is driver-specific, and depends on the storage-driver\nin use, and should be used for informational purposes only.\n", + "type": "object", + "x-nullable": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + } + } + } + }, + "Storage": { + "description": "Information about the storage used by the container.\n", + "type": "object", + "properties": { + "RootFS": { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true, + "$ref": "#/definitions/RootFSStorage" + } + } + }, + "RootFSStorage": { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorage", + "properties": { + "Snapshot": { + "description": "Information about the snapshot used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true, + "$ref": "#/definitions/RootFSStorageSnapshot" + } + } + }, + "RootFSStorageSnapshot": { + "description": "Information about a snapshot backend of the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorageSnapshot", + "properties": { + "Name": { + "description": "Name of the snapshotter.", + "type": "string", + "x-nullable": false + } + } + }, + "FilesystemChange": { + "description": "Change in the container's filesystem.\n", + "type": "object", + "required": [ + "Path", + "Kind" + ], + "properties": { + "Path": { + "description": "Path to file or directory that has changed.\n", + "type": "string", + "x-nullable": false + }, + "Kind": { + "$ref": "#/definitions/ChangeType" + } + } + }, + "ChangeType": { + "description": "Kind of change\n\nCan be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "type": "integer", + "format": "uint8", + "enum": [ + 0, + 1, + 2 + ], + "x-nullable": false + }, + "ImageInspect": { + "description": "Information about an image in the local image cache.\n", + "type": "object", + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "x-nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "Descriptor": { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true, + "$ref": "#/definitions/OCIDescriptor" + }, + "Manifests": { + "description": "Manifests is a list of image manifests available in this image. It\nprovides a more detailed view of the platform-specific image manifests or\nother image-attached data like build attestations.\n\nOnly available if the daemon provides a multi-platform image store\nand the `manifests` option is set in the inspect request.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": "array", + "x-nullable": true, + "items": { + "$ref": "#/definitions/ImageManifestSummary" + } + }, + "Identity": { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "x-nullable": true, + "$ref": "#/definitions/Identity" + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ] + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + }, + "Comment": { + "description": "Optional message that was set when committing or importing the image.\n", + "type": "string", + "x-nullable": true, + "example": "" + }, + "Created": { + "description": "Date and time at which the image was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if present in the image,\nand omitted otherwise.\n", + "type": "string", + "format": "dateTime", + "x-nullable": true, + "example": "2022-02-04T21:20:12.497794809Z" + }, + "Author": { + "description": "Name of the author that was specified when committing the image, or as\nspecified through MAINTAINER (deprecated) in the Dockerfile.\n", + "type": "string", + "x-nullable": true, + "example": "" + }, + "Config": { + "$ref": "#/definitions/ImageConfig" + }, + "Architecture": { + "description": "Hardware CPU architecture that the image runs on.\n", + "type": "string", + "x-nullable": false, + "example": "arm" + }, + "Variant": { + "description": "CPU architecture variant (presently ARM-only).\n", + "type": "string", + "x-nullable": true, + "example": "v7" + }, + "Os": { + "description": "Operating System the image is built to run on.\n", + "type": "string", + "x-nullable": false, + "example": "linux" + }, + "OsVersion": { + "description": "Operating System version the image is built to run on (especially\nfor Windows).\n", + "type": "string", + "example": "", + "x-nullable": true + }, + "Size": { + "description": "Total size of the image including all layers it is composed of.\n", + "type": "integer", + "format": "int64", + "x-nullable": false, + "example": 1239828 + }, + "GraphDriver": { + "x-nullable": true, + "$ref": "#/definitions/DriverData" + }, + "RootFS": { + "description": "Information about the image's RootFS, including the layer IDs.\n", + "type": "object", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "x-nullable": false, + "example": "layers" + }, + "Layers": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ] + } + } + }, + "Metadata": { + "description": "Additional metadata of the image in the local cache. This information\nis local to the daemon, and not part of the image itself.\n", + "type": "object", + "properties": { + "LastTagTime": { + "description": "Date and time at which the image was last tagged in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if the image was tagged locally,\nand omitted otherwise.\n", + "type": "string", + "format": "dateTime", + "example": "2022-02-28T14:40:02.623929178Z", + "x-nullable": true + } + } + } + } + }, + "Identity": { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "type": "object", + "properties": { + "Signature": { + "description": "Signature contains the properties of verified signatures for the image.", + "type": "array", + "items": { + "$ref": "#/definitions/SignatureIdentity" + } + }, + "Pull": { + "description": "Pull contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.\nAfter successful push this images also contains the pushed repository location.", + "type": "array", + "items": { + "$ref": "#/definitions/PullIdentity" + } + }, + "Build": { + "description": "Build contains build reference information if image was created via build.", + "type": "array", + "items": { + "$ref": "#/definitions/BuildIdentity" + } + } + } + }, + "BuildIdentity": { + "description": "BuildIdentity contains build reference information if image was created via build.", + "type": "object", + "properties": { + "Ref": { + "description": "Ref is the identifier for the build request. This reference can be used to\nlook up the build details in BuildKit history API.", + "type": "string" + }, + "CreatedAt": { + "description": "CreatedAt is the time when the build ran.", + "type": "string", + "format": "date-time" + } + } + }, + "PullIdentity": { + "description": "PullIdentity contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.", + "type": "object", + "properties": { + "Repository": { + "description": "Repository is the remote repository location the image was pulled from.", + "type": "string" + } + } + }, + "SignatureIdentity": { + "description": "SignatureIdentity contains the properties of verified signatures for the image.", + "type": "object", + "properties": { + "Name": { + "description": "Name is a textual description summarizing the type of signature.", + "type": "string" + }, + "Timestamps": { + "description": "Timestamps contains a list of verified signed timestamps for the signature.", + "type": "array", + "items": { + "$ref": "#/definitions/SignatureTimestamp" + } + }, + "KnownSigner": { + "description": "KnownSigner is an identifier for a special signer identity that is known to the implementation.", + "$ref": "#/definitions/KnownSignerIdentity" + }, + "DockerReference": { + "description": "DockerReference is the Docker image reference associated with the signature.\nThis is an optional field only present in older hashedrecord signatures.", + "type": "string" + }, + "Signer": { + "description": "Signer contains information about the signer certificate used to sign the image.", + "$ref": "#/definitions/SignerIdentity" + }, + "SignatureType": { + "description": "SignatureType is the type of signature format. E.g. \"bundle-v0.3\" or \"hashedrecord\".", + "$ref": "#/definitions/SignatureType" + }, + "Error": { + "description": "Error contains error information if signature verification failed.\nOther fields will be empty in this case.", + "type": "string" + }, + "Warnings": { + "description": "Warnings contains any warnings that occurred during signature verification.\nFor example, if there was no internet connectivity and cached trust roots were used.\nWarning does not indicate a failed verification but may point to configuration issues.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SignatureTimestamp": { + "description": "SignatureTimestamp contains information about a verified signed timestamp for an image signature.", + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/SignatureTimestampType" + }, + "URI": { + "type": "string" + }, + "Timestamp": { + "type": "string", + "format": "date-time" + } + } + }, + "SignatureTimestampType": { + "description": "SignatureTimestampType is the type of timestamp used in the signature.", + "type": "string", + "enum": [ + "Tlog", + "TimestampAuthority" + ] + }, + "SignatureType": { + "description": "SignatureType is the type of signature format.", + "type": "string", + "enum": [ + "bundle-v0.3", + "simplesigning-v1" + ] + }, + "KnownSignerIdentity": { + "description": "KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation.", + "type": "string", + "enum": [ + "DHI" + ] + }, + "SignerIdentity": { + "description": "SignerIdentity contains information about the signer certificate used to sign the image.", + "type": "object", + "properties": { + "CertificateIssuer": { + "type": "string", + "description": "CertificateIssuer is the certificate issuer." + }, + "SubjectAlternativeName": { + "type": "string", + "description": "SubjectAlternativeName is the certificate subject alternative name." + }, + "Issuer": { + "type": "string", + "description": "The OIDC issuer. Should match `iss` claim of ID token or, in the case of\na federated login like Dex it should match the issuer URL of the\nupstream issuer. The issuer is not set the extensions are invalid and\nwill fail to render." + }, + "BuildSignerURI": { + "type": "string", + "description": "Reference to specific build instructions that are responsible for signing." + }, + "BuildSignerDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the build instructions that is responsible for signing." + }, + "RunnerEnvironment": { + "type": "string", + "description": "Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure." + }, + "SourceRepositoryURI": { + "type": "string", + "description": "Source repository URL that the build was based on." + }, + "SourceRepositoryDigest": { + "type": "string", + "description": "Immutable reference to a specific version of the source code that the build was based upon." + }, + "SourceRepositoryRef": { + "type": "string", + "description": "Source Repository Ref that the build run was based upon." + }, + "SourceRepositoryIdentifier": { + "type": "string", + "description": "Immutable identifier for the source repository the workflow was based upon." + }, + "SourceRepositoryOwnerURI": { + "type": "string", + "description": "Source repository owner URL of the owner of the source repository that the build was based on." + }, + "SourceRepositoryOwnerIdentifier": { + "type": "string", + "description": "Immutable identifier for the owner of the source repository that the workflow was based upon." + }, + "BuildConfigURI": { + "type": "string", + "description": "Build Config URL to the top-level/initiating build instructions." + }, + "BuildConfigDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the top-level/initiating build instructions." + }, + "BuildTrigger": { + "type": "string", + "description": "Event or action that initiated the build." + }, + "RunInvocationURI": { + "type": "string", + "description": "Run Invocation URL to uniquely identify the build execution." + }, + "SourceRepositoryVisibilityAtSigning": { + "type": "string", + "description": "Source repository visibility at the time of signing the certificate." + } + } + }, + "ImageSummary": { + "type": "object", + "x-go-name": "Summary", + "required": [ + "Id", + "ParentId", + "RepoTags", + "RepoDigests", + "Created", + "Size", + "SharedSize", + "Labels", + "Containers" + ], + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "x-nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "ParentId": { + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "type": "string", + "x-nullable": false, + "example": "" + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "x-nullable": false, + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ] + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "x-nullable": false, + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + }, + "Created": { + "description": "Date and time at which the image was created as a Unix timestamp\n(number of seconds since EPOCH).\n", + "type": "integer", + "x-nullable": false, + "example": "1644009612" + }, + "Size": { + "description": "Total size of the image including all layers it is composed of.\n", + "type": "integer", + "format": "int64", + "x-nullable": false, + "example": 172064416 + }, + "SharedSize": { + "description": "Total size of image layers that are shared between this image and other\nimages.\n\nThis size is not calculated by default. `-1` indicates that the value\nhas not been set / calculated.\n", + "type": "integer", + "format": "int64", + "x-nullable": false, + "example": 1239828 + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "x-nullable": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Containers": { + "description": "Number of containers using this image. Includes both stopped and running\ncontainers.\n\n`-1` indicates that the value has not been set / calculated.\n", + "x-nullable": false, + "type": "integer", + "example": 2 + }, + "Manifests": { + "description": "Manifests is a list of manifests available in this image.\nIt provides a more detailed view of the platform-specific image manifests\nor other image-attached data like build attestations.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": "array", + "x-nullable": false, + "x-omitempty": true, + "items": { + "$ref": "#/definitions/ImageManifestSummary" + } + }, + "Descriptor": { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true, + "$ref": "#/definitions/OCIDescriptor" + } + } + }, + "ImagesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/image", + "description": "represents system data usage for image resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active images.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all images.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing unused images.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by images.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of image summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "AuthResponse": { + "description": "An identity token was generated successfully.\n", + "type": "object", + "required": [ + "Status" + ], + "properties": { + "Status": { + "description": "The status of the authentication", + "type": "string", + "example": "Login Succeeded", + "x-nullable": false + }, + "IdentityToken": { + "description": "An opaque token used to authenticate a user after a successful login", + "type": "string", + "example": "9cbaf023786cd7...", + "x-nullable": false + } + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "type": "object", + "required": [ + "Name", + "Driver", + "Mountpoint", + "Labels", + "Scope", + "Options" + ], + "x-nullable": false, + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "x-nullable": false, + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "x-nullable": false, + "example": "custom" + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "x-nullable": false, + "example": "/var/lib/docker/volumes/tardis" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "description": "Date/Time the volume was created.", + "example": "2016-06-07T20:31:11.853781916Z" + }, + "Status": { + "type": "object", + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n", + "additionalProperties": { + "type": "object" + }, + "example": { + "hello": "world" + } + }, + "Labels": { + "type": "object", + "description": "User-defined key/value metadata.", + "x-nullable": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide,\nor `local` for machine level.\n", + "default": "local", + "x-nullable": false, + "enum": [ + "local", + "global" + ], + "example": "local" + }, + "ClusterVolume": { + "$ref": "#/definitions/ClusterVolume" + }, + "Options": { + "type": "object", + "description": "The driver specific options used when creating the volume.\n", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "UsageData": { + "type": "object", + "x-nullable": true, + "x-go-name": "UsageData", + "required": [ + "Size", + "RefCount" + ], + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "properties": { + "Size": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n", + "x-nullable": false + }, + "RefCount": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n", + "x-nullable": false + } + } + } + } + }, + "VolumesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/volume", + "description": "represents system data usage for volume resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active volumes.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all volumes.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive volumes.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by volumes.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of volumes.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Volume" + } + } + } + } + }, + "VolumeCreateRequest": { + "description": "Volume configuration", + "type": "object", + "title": "VolumeConfig", + "x-go-name": "CreateRequest", + "properties": { + "Name": { + "description": "The new volume's name. If not specified, Docker generates a name.\n", + "type": "string", + "x-nullable": false, + "example": "tardis" + }, + "Driver": { + "description": "Name of the volume driver to use.", + "type": "string", + "default": "local", + "x-nullable": false, + "example": "custom" + }, + "DriverOpts": { + "description": "A mapping of driver options and values. These options are\npassed directly to the driver and are driver specific.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "ClusterVolumeSpec": { + "$ref": "#/definitions/ClusterVolumeSpec" + } + } + }, + "VolumeListResponse": { + "type": "object", + "title": "VolumeListResponse", + "x-go-name": "ListResponse", + "description": "Volume list response", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "items": { + "$ref": "#/definitions/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes.\n", + "items": { + "type": "string" + }, + "example": [] + } + } + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "description": "Name of the network.\n", + "type": "string", + "example": "my_network", + "x-omitempty": false + }, + "Id": { + "description": "ID that uniquely identifies a network on a single machine.\n", + "type": "string", + "x-go-name": "ID", + "x-omitempty": false, + "example": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99" + }, + "Created": { + "description": "Date and time at which the network was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "x-omitempty": false, + "x-go-type": { + "type": "Time", + "import": { + "package": "time" + }, + "hints": { + "nullable": false + } + }, + "example": "2016-10-19T04:33:30.360899459Z" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level)\n", + "type": "string", + "x-omitempty": false, + "example": "local" + }, + "Driver": { + "description": "The name of the driver used to create the network (e.g. `bridge`,\n`overlay`).\n", + "type": "string", + "x-omitempty": false, + "example": "overlay" + }, + "EnableIPv4": { + "description": "Whether the network was created with IPv4 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": true + }, + "EnableIPv6": { + "description": "Whether the network was created with IPv6 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": false + }, + "IPAM": { + "description": "The network's IP Address Management.\n", + "$ref": "#/definitions/IPAM", + "x-nullable": false, + "x-omitempty": false + }, + "Internal": { + "description": "Whether the network is created to only allow internal networking\nconnectivity.\n", + "type": "boolean", + "x-nullable": false, + "x-omitempty": false, + "default": false, + "example": false + }, + "Attachable": { + "description": "Whether a global / swarm scope network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "x-nullable": false, + "x-omitempty": false, + "default": false, + "example": false + }, + "Ingress": { + "description": "Whether the network is providing the routing-mesh for the swarm cluster.\n", + "type": "boolean", + "x-nullable": false, + "x-omitempty": false, + "default": false, + "example": false + }, + "ConfigFrom": { + "$ref": "#/definitions/ConfigReference", + "x-nullable": false, + "x-omitempty": false + }, + "ConfigOnly": { + "description": "Whether the network is a config-only network. Config-only networks are\nplaceholder networks for network configurations to be used by other\nnetworks. Config-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "x-omitempty": false, + "x-nullable": false, + "default": false + }, + "Options": { + "description": "Network-specific options uses when creating the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "Metadata specific to the network being created.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Peers": { + "description": "List of peer nodes for an overlay network. This field is only present\nfor overlay networks, and omitted for other network types.\n", + "type": "array", + "x-omitempty": true, + "items": { + "$ref": "#/definitions/PeerInfo" + } + } + } + }, + "NetworkSummary": { + "description": "Network list response item", + "x-go-name": "Summary", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/Network" + } + ] + }, + "NetworkInspect": { + "description": "The body of the \"get network\" http response message.", + "x-go-name": "Inspect", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/Network" + } + ], + "properties": { + "Containers": { + "description": "Contains endpoints attached to the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "$ref": "#/definitions/EndpointResource" + }, + "example": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + } + }, + "Services": { + "description": "List of services using the network. This field is only present for\nswarm scope networks, and omitted for local scope networks.\n", + "type": "object", + "x-omitempty": true, + "additionalProperties": { + "x-go-type": { + "type": "ServiceInfo", + "hints": { + "nullable": false + } + } + } + }, + "Status": { + "description": "provides runtime information about the network such as the number of allocated IPs.\n", + "$ref": "#/definitions/NetworkStatus" + } + } + }, + "NetworkStatus": { + "description": "provides runtime information about the network such as the number of allocated IPs.\n", + "type": "object", + "x-go-name": "Status", + "properties": { + "IPAM": { + "$ref": "#/definitions/IPAMStatus" + } + } + }, + "ServiceInfo": { + "x-nullable": false, + "x-omitempty": false, + "description": "represents service parameters with the list of service's tasks\n", + "type": "object", + "properties": { + "VIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Ports": { + "type": "array", + "x-omitempty": false, + "items": { + "type": "string" + } + }, + "LocalLBIndex": { + "type": "integer", + "format": "int", + "x-omitempty": false, + "x-go-type": { + "type": "int" + } + }, + "Tasks": { + "type": "array", + "x-omitempty": false, + "items": { + "$ref": "#/definitions/NetworkTaskInfo" + } + } + } + }, + "NetworkTaskInfo": { + "x-nullable": false, + "x-omitempty": false, + "x-go-name": "Task", + "description": "carries the information about one backend task\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false + }, + "EndpointID": { + "type": "string", + "x-omitempty": false + }, + "EndpointIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Info": { + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + } + } + } + }, + "ConfigReference": { + "x-nullable": false, + "x-omitempty": false, + "description": "The config-only network source to provide the configuration for\nthis network.\n", + "type": "object", + "properties": { + "Network": { + "description": "The name of the config-only network that provides the network's\nconfiguration. The specified network must be an existing config-only\nnetwork. Only network names are allowed, not network IDs.\n", + "type": "string", + "x-omitempty": false, + "example": "config_only_network_01" + } + } + }, + "IPAM": { + "type": "object", + "x-nullable": false, + "x-omitempty": false, + "properties": { + "Driver": { + "description": "Name of the IPAM driver to use.", + "type": "string", + "default": "default", + "example": "default" + }, + "Config": { + "description": "List of IPAM configuration options, specified as a map:\n\n```\n{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }\n```\n", + "type": "array", + "items": { + "$ref": "#/definitions/IPAMConfig" + } + }, + "Options": { + "description": "Driver-specific options, specified as a map.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + } + } + }, + "IPAMConfig": { + "type": "object", + "properties": { + "Subnet": { + "type": "string", + "example": "172.20.0.0/16" + }, + "IPRange": { + "type": "string", + "example": "172.20.10.0/24" + }, + "Gateway": { + "type": "string", + "example": "172.20.10.11" + }, + "AuxiliaryAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "IPAMStatus": { + "type": "object", + "x-nullable": false, + "x-omitempty": false, + "properties": { + "Subnets": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/SubnetStatus" + }, + "example": { + "172.16.0.0/16": { + "IPsInUse": 3, + "DynamicIPsAvailable": 65533 + }, + "2001:db8:abcd:0012::0/96": { + "IPsInUse": 5, + "DynamicIPsAvailable": 4294967291 + } + }, + "x-go-type": { + "type": "SubnetStatuses", + "kind": "map" + } + } + } + }, + "SubnetStatus": { + "type": "object", + "x-nullable": false, + "x-omitempty": false, + "properties": { + "IPsInUse": { + "description": "Number of IP addresses in the subnet that are in use or reserved and are therefore unavailable for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + }, + "DynamicIPsAvailable": { + "description": "Number of IP addresses within the network's IPRange for the subnet that are available for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + } + } + }, + "EndpointResource": { + "type": "object", + "description": "contains network resources allocated and used for a container in a network.\n", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false, + "example": "container_1" + }, + "EndpointID": { + "type": "string", + "x-omitempty": false, + "example": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" + }, + "MacAddress": { + "type": "string", + "x-omitempty": false, + "example": "02:42:ac:13:00:02", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "IPv4Address": { + "type": "string", + "x-omitempty": false, + "example": "172.19.0.2/16", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "x-omitempty": false, + "example": "", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + } + } + }, + "PeerInfo": { + "description": "represents one peer of an overlay network.\n", + "type": "object", + "x-nullable": false, + "properties": { + "Name": { + "description": "ID of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "6869d7c1732b" + }, + "IP": { + "description": "IP-address of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "10.133.77.91", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + } + }, + "NetworkCreateResponse": { + "description": "OK response to NetworkCreate operation", + "type": "object", + "title": "NetworkCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warning" + ], + "properties": { + "Id": { + "description": "The ID of the created network.", + "type": "string", + "x-nullable": false, + "example": "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d" + }, + "Warning": { + "description": "Warnings encountered when creating the container", + "type": "string", + "x-nullable": false, + "example": "" + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/definitions/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/definitions/ProgressDetail" + }, + "aux": { + "$ref": "#/definitions/ImageID" + } + } + }, + "BuildCache": { + "type": "object", + "description": "BuildCache contains information about a build cache record.\n", + "properties": { + "ID": { + "type": "string", + "description": "Unique ID of the build cache record.\n", + "example": "ndlpt0hhvkqcdfkputsk4cq9c" + }, + "Parents": { + "description": "List of parent build cache record IDs.\n", + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true, + "example": [ + "hw53o5aio51xtltp5xjp8v7fx" + ] + }, + "Type": { + "type": "string", + "description": "Cache record type.\n", + "example": "regular", + "enum": [ + "internal", + "frontend", + "source.local", + "source.git.checkout", + "exec.cachemount", + "regular" + ] + }, + "Description": { + "type": "string", + "description": "Description of the build-step that produced the build cache.\n", + "example": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + }, + "InUse": { + "type": "boolean", + "description": "Indicates if the build cache is in use.\n", + "example": false + }, + "Shared": { + "type": "boolean", + "description": "Indicates if the build cache is shared.\n", + "example": true + }, + "Size": { + "description": "Amount of disk space used by the build cache (in bytes).\n", + "type": "integer", + "example": 51 + }, + "CreatedAt": { + "description": "Date and time at which the build cache was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "LastUsedAt": { + "description": "Date and time at which the build cache was last used in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "x-nullable": true, + "example": "2017-08-09T07:09:37.632105588Z" + }, + "UsageCount": { + "type": "integer", + "example": 26 + } + } + }, + "BuildCacheDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/build", + "description": "represents system data usage for build cache resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active build cache records.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all build cache records.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive build cache records.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by build cache records.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of build cache records.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "CacheRecord" + } + } + } + } + }, + "ImageID": { + "type": "object", + "description": "Image ID or Digest", + "properties": { + "ID": { + "type": "string" + } + }, + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/definitions/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/definitions/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "errorDetail": { + "$ref": "#/definitions/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/definitions/ProgressDetail" + } + } + }, + "DeviceInfo": { + "type": "object", + "description": "DeviceInfo represents a device that can be used by a container.\n", + "properties": { + "Source": { + "type": "string", + "example": "cdi", + "description": "The origin device driver.\n" + }, + "ID": { + "type": "string", + "example": "vendor.com/gpu=0", + "description": "The unique identifier for the device within its source driver.\nFor CDI devices, this would be an FQDN like \"vendor.com/gpu=0\".\n" + } + } + }, + "NRIInfo": { + "description": "Information about the Node Resource Interface (NRI).\n\nThis field is only present if NRI is enabled.\n", + "type": "object", + "x-nullable": true, + "properties": { + "Info": { + "description": "Information about NRI, provided as \"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "plugin-path", + "/opt/docker/nri/plugins" + ] + ] + } + } + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "description": "Represents an error.", + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "description": "The error message.", + "type": "string", + "x-nullable": false + } + }, + "example": { + "message": "Something went wrong." + } + }, + "IDResponse": { + "description": "Response to an API call that returns just an Id", + "type": "object", + "x-go-name": "IDResponse", + "required": [ + "Id" + ], + "properties": { + "Id": { + "description": "The id of the newly created object.", + "type": "string", + "x-nullable": false + } + } + }, + "NetworkConnectRequest": { + "description": "NetworkConnectRequest represents the data to be used to connect a container to a network.\n", + "type": "object", + "x-go-name": "ConnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network.", + "x-nullable": false, + "example": "3613f73ba0e4" + }, + "EndpointConfig": { + "$ref": "#/definitions/EndpointSettings", + "x-nullable": true + } + } + }, + "NetworkDisconnectRequest": { + "description": "NetworkDisconnectRequest represents the data to be used to disconnect a container from a network.\n", + "type": "object", + "x-go-name": "DisconnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network.", + "x-nullable": false, + "example": "3613f73ba0e4" + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network.", + "default": false, + "x-nullable": false, + "x-omitempty": false, + "example": false + } + } + }, + "EndpointSettings": { + "description": "Configuration for a network endpoint.", + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/definitions/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "container_1", + "container_2" + ] + }, + "MacAddress": { + "description": "MAC address for the endpoint on this network. The network driver might ignore this parameter.\n", + "type": "string", + "example": "02:42:ac:11:00:04", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "server_x", + "server_y" + ] + }, + "DriverOpts": { + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "GwPriority": { + "description": "This property determines which endpoint will provide the default\ngateway for a container. The endpoint with the highest priority will\nbe used. If multiple endpoints have the same priority, endpoints are\nlexicographically sorted based on their network name, and the one\nthat sorts first is picked.\n", + "type": "integer", + "format": "int64", + "example": [ + 10 + ] + }, + "NetworkID": { + "description": "Unique ID of the network.\n", + "type": "string", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "type": "string", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "description": "Gateway address for this network.\n", + "type": "string", + "example": "172.17.0.1" + }, + "IPAddress": { + "description": "IPv4 address.\n", + "type": "string", + "example": "172.17.0.4", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPPrefixLen": { + "description": "Mask length of the IPv4 address.\n", + "type": "integer", + "example": 16 + }, + "IPv6Gateway": { + "description": "IPv6 gateway address.\n", + "type": "string", + "example": "2001:db8:2::100", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6Address": { + "description": "Global IPv6 address.\n", + "type": "string", + "example": "2001:db8::5689", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6PrefixLen": { + "description": "Mask length of the global IPv6 address.\n", + "type": "integer", + "format": "int64", + "example": 64 + }, + "DNSNames": { + "description": "List of all DNS names an endpoint has on a specific network. This\nlist is based on the container name, network aliases, container short\nID, and hostname.\n\nThese DNS names are non-fully qualified but can contain several dots.\nYou can get fully qualified DNS names by appending `.`.\nFor instance, if container name is `my.ctr` and the network is named\n`testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be\n`my.ctr.testnet`.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "foobar", + "server_x", + "server_y", + "my.ctr" + ] + } + } + }, + "EndpointIPAMConfig": { + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "type": "object", + "x-nullable": true, + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "LinkLocalIPs": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "example": [ + "169.254.34.68", + "fe80::3468" + ] + } + } + }, + "PluginMount": { + "type": "object", + "x-go-name": "Mount", + "x-nullable": false, + "required": [ + "Name", + "Description", + "Settable", + "Source", + "Destination", + "Type", + "Options" + ], + "properties": { + "Name": { + "type": "string", + "x-nullable": false, + "example": "some-mount" + }, + "Description": { + "type": "string", + "x-nullable": false, + "example": "This is a mount that's used by the plugin." + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "x-nullable": false, + "example": "/mnt/state" + }, + "Type": { + "type": "string", + "x-nullable": false, + "example": "bind" + }, + "Options": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "rbind", + "rw" + ] + } + } + }, + "PluginDevice": { + "type": "object", + "x-go-name": "Device", + "required": [ + "Name", + "Description", + "Settable", + "Path" + ], + "x-nullable": false, + "properties": { + "Name": { + "type": "string", + "x-nullable": false + }, + "Description": { + "type": "string", + "x-nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + } + }, + "PluginEnv": { + "type": "object", + "x-go-name": "Env", + "x-nullable": false, + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "x-nullable": false, + "type": "string" + }, + "Description": { + "x-nullable": false, + "type": "string" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + } + }, + "PluginPrivilege": { + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n", + "type": "object", + "x-go-name": "Privilege", + "properties": { + "Name": { + "type": "string", + "example": "network" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "host" + ] + } + } + }, + "Plugin": { + "description": "A plugin for the Engine API", + "type": "object", + "x-go-name": "Plugin", + "required": [ + "Settings", + "Enabled", + "Config", + "Name" + ], + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "x-nullable": false, + "example": "tiborvass/sample-volume-plugin" + }, + "Enabled": { + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "type": "boolean", + "x-nullable": false, + "example": true + }, + "Settings": { + "description": "user-configurable settings for the plugin.", + "type": "object", + "x-go-name": "Settings", + "x-nullable": false, + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=0" + ] + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginDevice" + } + } + } + }, + "PluginReference": { + "description": "plugin remote reference used to push/pull the plugin", + "type": "string", + "x-go-name": "PluginReference", + "x-nullable": false, + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest" + }, + "Config": { + "description": "The config of a plugin.", + "type": "object", + "x-go-name": "Config", + "x-nullable": false, + "required": [ + "Description", + "Documentation", + "Interface", + "Entrypoint", + "WorkDir", + "Network", + "Linux", + "PidHost", + "PropagatedMount", + "IpcHost", + "Mounts", + "Env", + "Args" + ], + "properties": { + "Description": { + "type": "string", + "x-nullable": false, + "example": "A sample volume plugin for Docker" + }, + "Documentation": { + "type": "string", + "x-nullable": false, + "example": "https://docs.docker.com/engine/extend/plugins/" + }, + "Interface": { + "description": "The interface between Docker and the plugin", + "x-nullable": false, + "type": "object", + "x-go-name": "Interface", + "required": [ + "Types", + "Socket" + ], + "properties": { + "Types": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "CapabilityID" + } + }, + "example": [ + "docker.volumedriver/1.0" + ] + }, + "Socket": { + "type": "string", + "x-nullable": false, + "example": "plugins.sock" + }, + "ProtocolScheme": { + "type": "string", + "example": "some.protocol/v1.0", + "description": "Protocol to use for clients connecting to the plugin.", + "enum": [ + "", + "moby.plugins.http/v1" + ] + } + } + }, + "Entrypoint": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ] + }, + "WorkDir": { + "type": "string", + "x-nullable": false, + "example": "/bin/" + }, + "User": { + "type": "object", + "x-go-name": "User", + "x-nullable": false, + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + } + }, + "Network": { + "type": "object", + "x-go-name": "NetworkConfig", + "x-nullable": false, + "required": [ + "Type" + ], + "properties": { + "Type": { + "x-nullable": false, + "type": "string", + "example": "host" + } + } + }, + "Linux": { + "type": "object", + "x-go-name": "LinuxConfig", + "x-nullable": false, + "required": [ + "Capabilities", + "AllowAllDevices", + "Devices" + ], + "properties": { + "Capabilities": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ] + }, + "AllowAllDevices": { + "type": "boolean", + "x-nullable": false, + "example": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginDevice" + } + } + } + }, + "PropagatedMount": { + "type": "string", + "x-nullable": false, + "example": "/mnt/volumes" + }, + "IpcHost": { + "type": "boolean", + "x-nullable": false, + "example": false + }, + "PidHost": { + "type": "boolean", + "x-nullable": false, + "example": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginEnv" + }, + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Settable": null, + "Value": "0" + } + ] + }, + "Args": { + "type": "object", + "x-go-name": "Args", + "x-nullable": false, + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "x-nullable": false, + "type": "string", + "example": "args" + }, + "Description": { + "x-nullable": false, + "type": "string", + "example": "command line arguments" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "rootfs": { + "type": "object", + "x-go-name": "RootFS", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ] + } + } + } + } + } + } + }, + "ObjectVersion": { + "description": "The version number of the object such as node, service, etc. This is needed\nto avoid conflicting writes. The client must send the version number along\nwith the modified specification when updating these objects.\n\nThis approach ensures safe concurrency and determinism in that the change\non the object may not be applied if the version number has changed from the\nlast read. In other words, if two update requests specify the same base\nversion, only one of the requests can succeed. As a result, two separate\nupdate requests that happen at the same time will not unintentionally\noverwrite each other.\n", + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + } + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "description": "Name for the node.", + "type": "string", + "example": "my-node" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Role": { + "description": "Role of the node.", + "type": "string", + "enum": [ + "worker", + "manager" + ], + "example": "manager" + }, + "Availability": { + "description": "Availability of the node.", + "type": "string", + "enum": [ + "active", + "pause", + "drain" + ], + "example": "active" + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/definitions/NodeSpec" + }, + "Description": { + "$ref": "#/definitions/NodeDescription" + }, + "Status": { + "$ref": "#/definitions/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/definitions/ManagerStatus" + } + } + }, + "NodeDescription": { + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n", + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/definitions/Platform" + }, + "Resources": { + "$ref": "#/definitions/ResourceObject" + }, + "Engine": { + "$ref": "#/definitions/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/definitions/TLSInfo" + } + } + }, + "Platform": { + "description": "Platform represents the platform (Arch/OS).\n", + "type": "object", + "properties": { + "Architecture": { + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "type": "string", + "example": "x86_64" + }, + "OS": { + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "type": "string", + "example": "linux" + } + } + }, + "EngineDescription": { + "description": "EngineDescription provides information about an engine.", + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ] + } + } + }, + "TLSInfo": { + "description": "Information about the issuer of leaf TLS certificates and the trusted root\nCA certificate.\n", + "type": "object", + "properties": { + "TrustRoot": { + "description": "The root CA certificate(s) that are used to validate leaf TLS\ncertificates.\n", + "type": "string" + }, + "CertIssuerSubject": { + "description": "The base64-url-safe-encoded raw subject bytes of the issuer.", + "type": "string" + }, + "CertIssuerPublicKey": { + "description": "The base64-url-safe-encoded raw public key bytes of the issuer.\n", + "type": "string" + } + }, + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n", + "type": "object", + "properties": { + "State": { + "$ref": "#/definitions/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "description": "IP address of the node.", + "type": "string", + "example": "172.17.0.2" + } + } + }, + "NodeState": { + "description": "NodeState represents the state of a node.", + "type": "string", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ], + "example": "ready" + }, + "ManagerStatus": { + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "x-nullable": true, + "type": "object", + "properties": { + "Leader": { + "type": "boolean", + "default": false, + "example": true + }, + "Reachability": { + "$ref": "#/definitions/Reachability" + }, + "Addr": { + "description": "The IP address and port at which the manager is reachable.\n", + "type": "string", + "example": "10.0.0.46:2377" + } + } + }, + "Reachability": { + "description": "Reachability represents the reachability of a node.", + "type": "string", + "enum": [ + "unknown", + "unreachable", + "reachable" + ], + "example": "reachable" + }, + "SwarmSpec": { + "description": "User modifiable swarm configuration.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the swarm.", + "type": "string", + "example": "default" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "description": "Orchestration configuration.", + "type": "object", + "x-nullable": true, + "properties": { + "TaskHistoryRetentionLimit": { + "description": "The number of historic tasks to keep per instance or node. If\nnegative, never remove completed or failed tasks.\n", + "type": "integer", + "format": "int64", + "example": 10 + } + } + }, + "Raft": { + "description": "Raft configuration.", + "type": "object", + "properties": { + "SnapshotInterval": { + "description": "The number of log entries between snapshots.", + "type": "integer", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "description": "The number of snapshots to keep beyond the current snapshot.\n", + "type": "integer", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "description": "The number of log entries to keep around to sync up slow followers\nafter a snapshot is created.\n", + "type": "integer", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "description": "The number of ticks that a follower will wait for a message from\nthe leader before becoming a candidate and starting an election.\n`ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 3 + }, + "HeartbeatTick": { + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks,\nthe leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 1 + } + } + }, + "Dispatcher": { + "description": "Dispatcher configuration.", + "type": "object", + "x-nullable": true, + "properties": { + "HeartbeatPeriod": { + "description": "The delay for an agent to send a heartbeat to the dispatcher.\n", + "type": "integer", + "format": "int64", + "example": 5000000000 + } + } + }, + "CAConfig": { + "description": "CA configuration.", + "type": "object", + "x-nullable": true, + "properties": { + "NodeCertExpiry": { + "description": "The duration node certificates are issued for.", + "type": "integer", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "description": "Configuration for forwarding signing requests to an external\ncertificate authority.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "description": "Protocol for communication with the external CA (currently\nonly `cfssl` is supported).\n", + "type": "string", + "enum": [ + "cfssl" + ], + "default": "cfssl" + }, + "URL": { + "description": "URL where certificate signing requests should be sent.\n", + "type": "string" + }, + "Options": { + "description": "An object with key/value pairs that are interpreted as\nprotocol-specific options for the external CA driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CACert": { + "description": "The root CA certificate (in PEM format) this external CA uses\nto issue TLS certificates (assumed to be to the current swarm\nroot CA certificate if not provided).\n", + "type": "string" + } + } + } + }, + "SigningCACert": { + "description": "The desired signing CA certificate for all swarm node TLS leaf\ncertificates, in PEM format.\n", + "type": "string" + }, + "SigningCAKey": { + "description": "The desired signing CA key for all swarm node TLS leaf certificates,\nin PEM format.\n", + "type": "string" + }, + "ForceRotate": { + "description": "An integer whose purpose is to force swarm to generate a new\nsigning CA certificate and key, if none have been specified in\n`SigningCACert` and `SigningCAKey`\n", + "format": "uint64", + "type": "integer" + } + } + }, + "EncryptionConfig": { + "description": "Parameters related to encryption-at-rest.", + "type": "object", + "properties": { + "AutoLockManagers": { + "description": "If set, generate a key and use it to lock data stored on the\nmanagers.\n", + "type": "boolean", + "example": false + } + } + }, + "TaskDefaults": { + "description": "Defaults for creating tasks in this cluster.", + "type": "object", + "properties": { + "LogDriver": { + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n", + "type": "object", + "properties": { + "Name": { + "description": "The log driver to use as a default for new tasks.\n", + "type": "string", + "example": "json-file" + }, + "Options": { + "description": "Driver-specific options for the selected log driver, specified\nas key/value pairs.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "10", + "max-size": "100m" + } + } + } + } + } + } + } + }, + "ClusterInfo": { + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "x-nullable": true, + "type": "object", + "properties": { + "ID": { + "description": "The ID of the swarm.", + "type": "string", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/definitions/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/definitions/TLSInfo" + }, + "RootRotationInProgress": { + "description": "Whether there is currently a root CA rotation in progress for the swarm\n", + "type": "boolean", + "example": false + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nIf no port is set or is set to 0, the default port (4789) is used.\n", + "type": "integer", + "format": "uint32", + "default": 4789, + "example": 4789 + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global scope\nnetworks.\n", + "type": "array", + "items": { + "type": "string", + "format": "CIDR", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created from the\ndefault subnet pool.\n", + "type": "integer", + "format": "uint32", + "maximum": 29, + "default": 24, + "example": 24 + } + } + }, + "JoinTokens": { + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n", + "type": "object", + "properties": { + "Worker": { + "description": "The token workers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "description": "The token managers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "Swarm": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/definitions/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "description": "User modifiable task configuration.", + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Name": { + "description": "The name or 'alias' to use for the plugin.", + "type": "string" + }, + "Remote": { + "description": "The plugin image reference to use.", + "type": "string" + }, + "Disabled": { + "description": "Disable the plugin once scheduled.", + "type": "boolean" + }, + "PluginPrivilege": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginPrivilege" + } + } + } + }, + "ContainerSpec": { + "type": "object", + "description": "Container spec for the service.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Image": { + "description": "The image name to use for the container", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value data.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Command": { + "description": "The command to be run in the image.", + "type": "array", + "items": { + "type": "string" + } + }, + "Args": { + "description": "Arguments to the command.", + "type": "array", + "items": { + "type": "string" + } + }, + "Hostname": { + "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n", + "type": "string" + }, + "Env": { + "description": "A list of environment variables in the form `VAR=value`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Dir": { + "description": "The working directory for commands to run in.", + "type": "string" + }, + "User": { + "description": "The user inside the container.", + "type": "string" + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "description": "Security options for the container", + "properties": { + "CredentialSpec": { + "type": "object", + "description": "CredentialSpec for managed service account (Windows only)", + "properties": { + "Config": { + "type": "string", + "example": "0bt9dmxjvjiqermk6xrop3ekq", + "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "File": { + "type": "string", + "example": "spec.json", + "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + } + } + }, + "SELinuxContext": { + "type": "object", + "description": "SELinux labels of the container", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + } + }, + "Seccomp": { + "type": "object", + "description": "Options for configuring seccomp on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "unconfined", + "custom" + ] + }, + "Profile": { + "description": "The custom seccomp profile as a json object", + "type": "string" + } + } + }, + "AppArmor": { + "type": "object", + "description": "Options for configuring AppArmor on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "disabled" + ] + } + } + }, + "NoNewPrivileges": { + "type": "boolean", + "description": "Configuration of the no_new_privs bit in the container" + } + } + }, + "TTY": { + "description": "Whether a pseudo-TTY should be allocated.", + "type": "boolean" + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean" + }, + "ReadOnly": { + "description": "Mount the container's root filesystem as read only.", + "type": "boolean" + }, + "Mounts": { + "description": "Specification for mounts to be added to containers created as part\nof the service.\n", + "type": "array", + "items": { + "$ref": "#/definitions/Mount" + } + }, + "StopSignal": { + "description": "Signal to stop the container.", + "type": "string" + }, + "StopGracePeriod": { + "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n", + "type": "integer", + "format": "int64" + }, + "Healthcheck": { + "$ref": "#/definitions/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n", + "type": "object", + "properties": { + "Nameservers": { + "description": "The IP addresses of the name servers.", + "type": "array", + "items": { + "type": "string" + } + }, + "Search": { + "description": "A search list for host-name lookup.", + "type": "array", + "items": { + "type": "string" + } + }, + "Options": { + "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Secrets": { + "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "SecretID": { + "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n", + "type": "string" + }, + "SecretName": { + "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "OomScoreAdj": { + "type": "integer", + "format": "int64", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 0 + }, + "Configs": { + "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "Runtime": { + "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n", + "type": "object" + }, + "ConfigID": { + "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n", + "type": "string" + }, + "ConfigName": { + "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service.\n(Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": "boolean", + "x-nullable": true + }, + "Sysctls": { + "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CapabilityAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW", + "CAP_SYS_ADMIN", + "CAP_SYS_CHROOT", + "CAP_SYSLOG" + ] + }, + "CapabilityDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW" + ] + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + } + } + }, + "NetworkAttachmentSpec": { + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "type": "object", + "properties": { + "ContainerID": { + "description": "ID of the container represented by this task", + "type": "string" + } + } + }, + "Resources": { + "description": "Resource requirements which apply to each individual container created\nas part of the service.\n", + "type": "object", + "properties": { + "Limits": { + "description": "Define resources limits.", + "$ref": "#/definitions/Limit" + }, + "Reservations": { + "description": "Define resources reservation.", + "$ref": "#/definitions/ResourceObject" + }, + "SwapBytes": { + "description": "Amount of swap in bytes - can only be used together with a memory limit.\nIf not specified, the default behaviour is to grant a swap space twice\nas big as the memory limit.\nSet to -1 to enable unlimited swap.\n", + "type": "integer", + "format": "int64", + "minimum": -1, + "x-nullable": true, + "x-omitempty": true + }, + "MemorySwappiness": { + "description": "Tune the service's containers' memory swappiness (0 to 100).\nIf not specified, defaults to the containers' OS' default, generally 60,\nor whatever value was predefined in the image.\nSet to -1 to unset a previously set value.\n", + "type": "integer", + "format": "int64", + "minimum": -1, + "maximum": 100, + "x-nullable": true, + "x-omitempty": true + } + } + }, + "RestartPolicy": { + "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n", + "type": "object", + "properties": { + "Condition": { + "description": "Condition for restart.", + "type": "string", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "description": "Delay between restart attempts.", + "type": "integer", + "format": "int64" + }, + "MaxAttempts": { + "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Window": { + "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n", + "type": "integer", + "format": "int64", + "default": 0 + } + } + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production", + "node.platform.os==linux", + "node.platform.arch==x86_64" + ] + }, + "Preferences": { + "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "description": "label descriptor, such as `engine.labels.az`.\n", + "type": "string" + } + } + } + } + }, + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ] + }, + "MaxReplicas": { + "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Platforms": { + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "type": "array", + "items": { + "$ref": "#/definitions/Platform" + } + } + } + }, + "ForceUpdate": { + "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n", + "type": "integer", + "format": "uint64" + }, + "Runtime": { + "description": "Runtime is the type of runtime specified for the task executor.\n", + "type": "string" + }, + "Networks": { + "description": "Specifies which networks the service should attach to.", + "type": "array", + "items": { + "$ref": "#/definitions/NetworkAttachmentConfig" + } + }, + "LogDriver": { + "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "ContainerStatus": { + "type": "object", + "description": "represents the status of a container.", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + } + }, + "PortStatus": { + "type": "object", + "description": "represents the port status of a task's host ports whose service has published host ports", + "properties": { + "Ports": { + "type": "array", + "items": { + "$ref": "#/definitions/EndpointPortConfig" + } + } + } + }, + "TaskStatus": { + "type": "object", + "description": "represents the status of a task.", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/definitions/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "$ref": "#/definitions/ContainerStatus" + }, + "PortStatus": { + "$ref": "#/definitions/PortStatus" + } + } + }, + "NetworkAttachment": { + "description": "Specifies how a task is attached to a network, and the addresses the\ntask was assigned on that network.\n", + "type": "object", + "properties": { + "Network": { + "$ref": "#/definitions/Network" + }, + "Addresses": { + "description": "The IP addresses (in CIDR notation) assigned to the task on this\nnetwork. To maintain backward compatibility this field accepts CIDR\nnotation, but only the IP address is used.\n", + "type": "array", + "items": { + "type": "string", + "format": "cidr" + } + } + }, + "example": { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1" + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "description": "The ID of the task.", + "type": "string" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "description": "Name of the task.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Spec": { + "$ref": "#/definitions/TaskSpec" + }, + "ServiceID": { + "description": "The ID of the service this task is part of.", + "type": "string" + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "description": "The ID of the node that this task is on.", + "type": "string" + }, + "AssignedGenericResources": { + "$ref": "#/definitions/GenericResources" + }, + "Status": { + "$ref": "#/definitions/TaskStatus" + }, + "DesiredState": { + "$ref": "#/definitions/TaskState" + }, + "JobIteration": { + "description": "If the Service this Task belongs to is a job-mode service, contains\nthe JobIteration of the Service this Task was created for. Absent if\nthe Task was created for a Replicated or Global Service.\n", + "$ref": "#/definitions/ObjectVersion" + }, + "NetworksAttachments": { + "description": "The networks that this task is attached to, and the addresses the\ntask was assigned on each of them.\n", + "type": "array", + "items": { + "$ref": "#/definitions/NetworkAttachment" + } + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "description": "User modifiable configuration for a service.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the service.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "TaskTemplate": { + "$ref": "#/definitions/TaskSpec" + }, + "Mode": { + "description": "Scheduling mode for the service.", + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object" + }, + "ReplicatedJob": { + "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n", + "type": "object", + "properties": { + "MaxConcurrent": { + "description": "The maximum number of replicas to run simultaneously.\n", + "type": "integer", + "format": "int64", + "default": 1 + }, + "TotalCompletions": { + "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n", + "type": "integer", + "format": "int64" + } + } + }, + "GlobalJob": { + "description": "The mode used for services which run a task to the completed state\non each valid node.\n", + "type": "object" + } + } + }, + "UpdateConfig": { + "description": "Specification for the update strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between updates, in nanoseconds.", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n", + "type": "string", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "RollbackConfig": { + "description": "Specification for the rollback strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between rollback iterations, in nanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n", + "type": "string", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "Networks": { + "description": "Specifies which networks the service should attach to.\n\nDeprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead.\n", + "type": "array", + "items": { + "$ref": "#/definitions/NetworkAttachmentConfig" + } + }, + "EndpointSpec": { + "$ref": "#/definitions/EndpointSpec" + } + } + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "TargetPort": { + "description": "The port inside the container.", + "type": "integer" + }, + "PublishedPort": { + "description": "The port on the swarm hosts.", + "type": "integer" + }, + "PublishMode": { + "description": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "type": "string", + "enum": [ + "ingress", + "host" + ], + "default": "ingress", + "example": "ingress" + } + } + }, + "EndpointSpec": { + "description": "Properties that can be configured to access and load balance a service.", + "type": "object", + "properties": { + "Mode": { + "description": "The mode of resolution to use for internal load balancing between tasks.\n", + "type": "string", + "enum": [ + "vip", + "dnsrr" + ], + "default": "vip" + }, + "Ports": { + "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n", + "type": "array", + "items": { + "$ref": "#/definitions/EndpointPortConfig" + } + } + } + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/definitions/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/definitions/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/definitions/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "description": "The status of a service update.", + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + } + }, + "ServiceStatus": { + "description": "The status of the service's tasks. Provided only when requested as\npart of a ServiceList operation.\n", + "type": "object", + "properties": { + "RunningTasks": { + "description": "The number of tasks for the service currently in the Running state.\n", + "type": "integer", + "format": "uint64", + "example": 7 + }, + "DesiredTasks": { + "description": "The number of tasks for the service desired to be running.\nFor replicated services, this is the replica count from the\nservice spec. For global services, this is computed by taking\ncount of all tasks for the service with a Desired State other\nthan Shutdown.\n", + "type": "integer", + "format": "uint64", + "example": 10 + }, + "CompletedTasks": { + "description": "The number of tasks for a job that are in the Completed state.\nThis field must be cross-referenced with the service type, as the\nvalue of 0 may mean the service is not in a job mode, or it may\nmean the job-mode service has no tasks yet Completed.\n", + "type": "integer", + "format": "uint64" + } + } + }, + "JobStatus": { + "description": "The status of the service when it is in one of ReplicatedJob or\nGlobalJob modes. Absent on Replicated and Global mode services. The\nJobIteration is an ObjectVersion, but unlike the Service's version,\ndoes not need to be sent with an update request.\n", + "type": "object", + "properties": { + "JobIteration": { + "description": "JobIteration is a value increased each time a Job is executed,\nsuccessfully or otherwise. \"Executed\", in this case, means the\njob as a whole has been started, not that an individual Task has\nbeen launched. A job is \"Executed\" when its ServiceSpec is\nupdated. JobIteration can be used to disambiguate Tasks belonging\nto different executions of a job. Though JobIteration will\nincrease with each subsequent execution, it may not necessarily\nincrease by 1, and so JobIteration should not be used to\n", + "$ref": "#/definitions/ObjectVersion" + }, + "LastExecution": { + "description": "The last time, as observed by the server, that this job was\nstarted.\n", + "type": "string", + "format": "dateTime" + } + } + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "x-go-name": "DeleteResponse", + "properties": { + "Untagged": { + "description": "The image ID of an image that was untagged", + "type": "string" + }, + "Deleted": { + "description": "The image ID of an image that was deleted", + "type": "string" + } + } + }, + "ServiceCreateResponse": { + "type": "object", + "description": "contains the information returned to a client on the\ncreation of a new service.\n", + "properties": { + "ID": { + "description": "The ID of the created service.", + "type": "string", + "x-nullable": false, + "example": "ak7w3gjqoa3kuz8xcpnyy0pvl" + }, + "Warnings": { + "description": "Optional warning message.\n\nFIXME(thaJeztah): this should have \"omitempty\" in the generated type.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + } + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "description": "Optional warning messages", + "type": "array", + "items": { + "type": "string" + } + } + }, + "example": { + "Warnings": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + }, + "ContainerInspectResponse": { + "type": "object", + "title": "ContainerInspectResponse", + "x-go-name": "InspectResponse", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Created": { + "description": "Date and time at which the container was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.", + "type": "string", + "format": "dateTime", + "x-nullable": true, + "example": "2025-02-17T17:43:39.64001363Z" + }, + "Path": { + "description": "The path to the command being run", + "type": "string", + "example": "/bin/sh" + }, + "Args": { + "description": "The arguments to the command being run", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "-c", + "exit 9" + ] + }, + "State": { + "$ref": "#/definitions/ContainerState" + }, + "Image": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ResolvConfPath": { + "description": "Location of the `/etc/resolv.conf` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf" + }, + "HostnamePath": { + "description": "Location of the `/etc/hostname` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname" + }, + "HostsPath": { + "description": "Location of the `/etc/hosts` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts" + }, + "LogPath": { + "description": "Location of the file used to buffer the container's logs. Depending on\nthe logging-driver used for the container, this field may be omitted.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "x-nullable": true, + "example": "/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log" + }, + "Name": { + "description": "The name associated with this container.\n\nFor historic reasons, the name may be prefixed with a forward-slash (`/`).", + "type": "string", + "example": "/funny_chatelet" + }, + "RestartCount": { + "description": "Number of times the container was restarted since it was created,\nor since daemon was started.", + "type": "integer", + "example": 0 + }, + "Driver": { + "description": "The storage-driver used for the container's filesystem (graph-driver\nor snapshotter).", + "type": "string", + "example": "overlayfs" + }, + "Platform": { + "description": "The platform (operating system) for which the container was created.\n\nThis field was introduced for the experimental \"LCOW\" (Linux Containers\nOn Windows) features, which has been removed. In most cases, this field\nis equal to the host's operating system (`linux` or `windows`).", + "type": "string", + "example": "linux" + }, + "ImageManifestDescriptor": { + "$ref": "#/definitions/OCIDescriptor", + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store." + }, + "MountLabel": { + "description": "SELinux mount label set for the container.", + "type": "string", + "example": "" + }, + "ProcessLabel": { + "description": "SELinux process label set for the container.", + "type": "string", + "example": "" + }, + "AppArmorProfile": { + "description": "The AppArmor profile set for the container.", + "type": "string", + "example": "" + }, + "ExecIDs": { + "description": "IDs of exec instances that are running in the container.", + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true, + "example": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ] + }, + "HostConfig": { + "$ref": "#/definitions/HostConfig" + }, + "GraphDriver": { + "$ref": "#/definitions/DriverData", + "x-nullable": true + }, + "Storage": { + "$ref": "#/definitions/Storage", + "x-nullable": true + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "x-nullable": true, + "example": "122880" + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "x-nullable": true, + "example": "1653948416" + }, + "Mounts": { + "description": "List of mounts used by the container.", + "type": "array", + "items": { + "$ref": "#/definitions/MountPoint" + } + }, + "Config": { + "$ref": "#/definitions/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/definitions/NetworkSettings" + } + } + }, + "ContainerSummary": { + "type": "object", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Names": { + "description": "The names associated with this container. Most containers have a single\nname, but when using legacy \"links\", the container can have multiple\nnames.\n\nFor historic reasons, names are prefixed with a forward-slash (`/`).", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/funny_chatelet" + ] + }, + "Image": { + "description": "The name or ID of the image used to create the container.\n\nThis field shows the image reference as was specified when creating the container,\nwhich can be in its canonical form (e.g., `docker.io/library/ubuntu:latest`\nor `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`),\nshort form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`).\n\nThe content of this field can be updated at runtime if the image used to\ncreate the container is untagged, in which case the field is updated to\ncontain the the image ID (digest) it was resolved to in its canonical,\nnon-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`).", + "type": "string", + "example": "docker.io/library/ubuntu:latest" + }, + "ImageID": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ImageManifestDescriptor": { + "$ref": "#/definitions/OCIDescriptor", + "x-nullable": true, + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store.\n\nThis field is not populated in the `GET /system/df` endpoint.\n" + }, + "Command": { + "description": "Command to run when starting the container", + "type": "string", + "example": "/bin/bash" + }, + "Created": { + "description": "Date and time at which the container was created as a Unix timestamp\n(number of seconds since EPOCH).", + "type": "integer", + "format": "int64", + "example": "1739811096" + }, + "Ports": { + "description": "Port-mappings for the container.", + "type": "array", + "items": { + "$ref": "#/definitions/PortSummary" + } + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "x-nullable": true, + "example": "122880" + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "x-nullable": true, + "example": "1653948416" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + } + }, + "State": { + "description": "The state of this container.\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "exited", + "removing", + "dead" + ], + "example": "running" + }, + "Status": { + "description": "Additional human-readable status of this container (e.g. `Exit 0`)", + "type": "string", + "example": "Up 4 days" + }, + "HostConfig": { + "type": "object", + "description": "Summary of host-specific runtime information of the container. This\nis a reduced set of information in the container's \"HostConfig\" as\navailable in the container \"inspect\" response.", + "properties": { + "NetworkMode": { + "description": "Networking mode (`host`, `none`, `container:`) or name of the\nprimary network the container is using.\n\nThis field is primarily for backward compatibility. The container\ncan be connected to multiple networks for which information can be\nfound in the `NetworkSettings.Networks` field, which enumerates\nsettings per network.", + "type": "string", + "example": "mynetwork" + }, + "Annotations": { + "description": "Arbitrary key-value metadata attached to the container.", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "string" + }, + "example": { + "io.kubernetes.docker.type": "container", + "io.kubernetes.sandbox.id": "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" + } + } + } + }, + "NetworkSettings": { + "description": "Summary of the container's network settings", + "type": "object", + "properties": { + "Networks": { + "type": "object", + "description": "Summary of network-settings for each network the container is\nattached to.", + "additionalProperties": { + "$ref": "#/definitions/EndpointSettings" + } + } + } + }, + "Mounts": { + "type": "array", + "description": "List of mounts used by the container.", + "items": { + "$ref": "#/definitions/MountPoint" + } + }, + "Health": { + "type": "object", + "description": "Summary of health status\n\nAdded in v1.52, before that version all container summary not include Health.\nAfter this attribute introduced, it includes containers with no health checks configured,\nor containers that are not running with none", + "properties": { + "Status": { + "type": "string", + "description": "the health status of the container", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + } + } + } + } + }, + "ContainersDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/container", + "description": "represents system data usage information for container resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active containers.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all containers.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive containers.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by containers.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of container summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "Driver": { + "description": "Driver represents a driver (network, logging, secrets).", + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "Name of the driver.", + "type": "string", + "x-nullable": false, + "example": "some-driver" + }, + "Options": { + "description": "Key/value map of driver-specific options.", + "type": "object", + "x-nullable": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + } + } + } + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the secret.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "description": "Data is the data to store as a secret, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nIt must be empty if the Driver field is set, in which case the data is\nloaded from an external secret store. The maximum allowed size is 500KB,\nas defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize).\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "type": "string", + "example": "" + }, + "Driver": { + "description": "Name of the secrets driver used to fetch the secret's value from an\nexternal secret store.\n", + "$ref": "#/definitions/Driver" + }, + "Templating": { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n", + "$ref": "#/definitions/Driver" + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/definitions/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the config.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Data": { + "description": "Data is the data to store as a config, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nThe maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize).\n", + "type": "string" + }, + "Templating": { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n", + "$ref": "#/definitions/Driver" + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/definitions/ConfigSpec" + } + } + }, + "ContainerState": { + "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command.\n", + "type": "object", + "x-nullable": true, + "properties": { + "Status": { + "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ], + "example": "running" + }, + "Running": { + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "type": "boolean", + "example": true + }, + "Paused": { + "description": "Whether this container is paused.", + "type": "boolean", + "example": false + }, + "Restarting": { + "description": "Whether this container is restarting.", + "type": "boolean", + "example": false + }, + "OOMKilled": { + "description": "Whether a process within this container has been killed because it ran\nout of memory since the container was last started.\n", + "type": "boolean", + "example": false + }, + "Dead": { + "type": "boolean", + "example": false + }, + "Pid": { + "description": "The process ID of this container", + "type": "integer", + "example": 1234 + }, + "ExitCode": { + "description": "The last exit code of this container", + "type": "integer", + "example": 0 + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "description": "The time when this container was last started.", + "type": "string", + "example": "2020-01-06T09:06:59.461876391Z" + }, + "FinishedAt": { + "description": "The time when this container last exited.", + "type": "string", + "example": "2020-01-06T09:07:59.461876391Z" + }, + "Health": { + "$ref": "#/definitions/Health" + } + } + }, + "ContainerCreateResponse": { + "description": "OK response to ContainerCreate operation", + "type": "object", + "title": "ContainerCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warnings" + ], + "properties": { + "Id": { + "description": "The ID of the created container", + "type": "string", + "x-nullable": false, + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Warnings": { + "description": "Warnings encountered when creating the container", + "type": "array", + "x-nullable": false, + "items": { + "type": "string" + }, + "example": [] + } + } + }, + "ContainerUpdateResponse": { + "type": "object", + "title": "ContainerUpdateResponse", + "x-go-name": "UpdateResponse", + "description": "Response for a successful container-update.", + "properties": { + "Warnings": { + "type": "array", + "description": "Warnings encountered when updating the container.", + "items": { + "type": "string" + }, + "example": [ + "Published ports are discarded when using host network mode" + ] + } + } + }, + "ContainerStatsResponse": { + "description": "Statistics sample for a container.\n", + "type": "object", + "x-go-name": "StatsResponse", + "title": "ContainerStatsResponse", + "properties": { + "id": { + "description": "ID of the container for which the stats were collected.\n", + "type": "string", + "x-nullable": true, + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "name": { + "description": "Name of the container for which the stats were collected.\n", + "type": "string", + "x-nullable": true, + "example": "boring_wozniak" + }, + "os_type": { + "description": "OSType is the OS of the container (\"linux\" or \"windows\") to allow\nplatform-specific handling of stats.\n", + "type": "string", + "x-nullable": true, + "example": "linux" + }, + "read": { + "description": "Date and time at which this sample was collected.\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:22.165243637Z" + }, + "cpu_stats": { + "$ref": "#/definitions/ContainerCPUStats" + }, + "memory_stats": { + "$ref": "#/definitions/ContainerMemoryStats" + }, + "networks": { + "description": "Network statistics for the container per interface.\n\nThis field is omitted if the container has no networking enabled.\n", + "x-nullable": true, + "additionalProperties": { + "$ref": "#/definitions/ContainerNetworkStats" + }, + "example": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + } + }, + "pids_stats": { + "$ref": "#/definitions/ContainerPidsStats" + }, + "blkio_stats": { + "$ref": "#/definitions/ContainerBlkioStats" + }, + "num_procs": { + "description": "The number of processors on the system.\n\nThis field is Windows-specific and always zero for Linux containers.\n", + "type": "integer", + "format": "uint32", + "example": 16 + }, + "storage_stats": { + "$ref": "#/definitions/ContainerStorageStats" + }, + "preread": { + "description": "Date and time at which this first sample was collected. This field\nis not propagated if the \"one-shot\" option is set. If the \"one-shot\"\noption is set, this field may be omitted, empty, or set to a default\ndate (`0001-01-01T00:00:00Z`).\n\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:21.160452595Z" + }, + "precpu_stats": { + "$ref": "#/definitions/ContainerCPUStats" + } + } + }, + "ContainerBlkioStats": { + "description": "BlkioStats stores all IO service stats for data read and write.\n\nThis type is Linux-specific and holds many fields that are specific to cgroups v1.\nOn a cgroup v2 host, all fields other than `io_service_bytes_recursive`\nare omitted or `null`.\n\nThis type is only populated on Linux and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "BlkioStats", + "x-nullable": true, + "properties": { + "io_service_bytes_recursive": { + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_serviced_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_queue_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_service_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_wait_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_merged_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "sectors_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + } + }, + "example": { + "io_service_bytes_recursive": [ + { + "major": 254, + "minor": 0, + "op": "read", + "value": 7593984 + }, + { + "major": 254, + "minor": 0, + "op": "write", + "value": 100 + } + ], + "io_serviced_recursive": null, + "io_queue_recursive": null, + "io_service_time_recursive": null, + "io_wait_time_recursive": null, + "io_merged_recursive": null, + "io_time_recursive": null, + "sectors_recursive": null + } + }, + "ContainerBlkioStatEntry": { + "description": "Blkio stats entry.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "BlkioStatEntry", + "x-nullable": true, + "properties": { + "major": { + "type": "integer", + "format": "uint64", + "example": 254 + }, + "minor": { + "type": "integer", + "format": "uint64", + "example": 0 + }, + "op": { + "type": "string", + "example": "read" + }, + "value": { + "type": "integer", + "format": "uint64", + "example": 7593984 + } + } + }, + "ContainerCPUStats": { + "description": "CPU related info of the container\n", + "type": "object", + "x-go-name": "CPUStats", + "x-nullable": true, + "properties": { + "cpu_usage": { + "$ref": "#/definitions/ContainerCPUUsage" + }, + "system_cpu_usage": { + "description": "System Usage.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 5 + }, + "online_cpus": { + "description": "Number of online CPUs.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint32", + "x-nullable": true, + "example": 5 + }, + "throttling_data": { + "$ref": "#/definitions/ContainerThrottlingData" + } + } + }, + "ContainerCPUUsage": { + "description": "All CPU stats aggregated since container inception.\n", + "type": "object", + "x-go-name": "CPUUsage", + "x-nullable": true, + "properties": { + "total_usage": { + "description": "Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows).\n", + "type": "integer", + "format": "uint64", + "example": 29912000 + }, + "percpu_usage": { + "description": "Total CPU time (in nanoseconds) consumed per core (Linux).\n\nThis field is Linux-specific when using cgroups v1. It is omitted\nwhen using cgroups v2 and Windows containers.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "integer", + "format": "uint64", + "example": 29912000 + } + }, + "usage_in_kernelmode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 21994000 + }, + "usage_in_usermode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 7918000 + } + } + }, + "ContainerPidsStats": { + "description": "PidsStats contains Linux-specific stats of a container's process-IDs (PIDs).\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "PidsStats", + "x-nullable": true, + "properties": { + "current": { + "description": "Current is the number of PIDs in the cgroup.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 5 + }, + "limit": { + "description": "Limit is the hard limit on the number of pids in the cgroup.\nA \"Limit\" of 0 means that there is no limit.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": "18446744073709551615" + } + } + }, + "ContainerThrottlingData": { + "description": "CPU throttling stats of the container.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "ThrottlingData", + "x-nullable": true, + "properties": { + "periods": { + "description": "Number of periods with throttling active.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_periods": { + "description": "Number of periods when the container hit its throttling limit.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_time": { + "description": "Aggregated time (in nanoseconds) the container was throttled for.\n", + "type": "integer", + "format": "uint64", + "example": 0 + } + } + }, + "ContainerMemoryStats": { + "description": "Aggregates all memory stats since container inception on Linux.\nWindows returns stats for commit and private working set only.\n", + "type": "object", + "x-go-name": "MemoryStats", + "properties": { + "usage": { + "description": "Current `res_counter` usage for memory.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + }, + "max_usage": { + "description": "Maximum usage ever recorded.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + }, + "stats": { + "description": "All the stats exported via memory.stat.\n\nThe fields in this object differ between cgroups v1 and v2.\nOn cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available.\nOn cgroups v2, fields such as `file`, `anon`, `inactive_file` are available.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "uint64", + "x-nullable": true + }, + "example": { + "active_anon": 1572864, + "active_file": 5115904, + "anon": 1572864, + "anon_thp": 0, + "file": 7626752, + "file_dirty": 0, + "file_mapped": 2723840, + "file_writeback": 0, + "inactive_anon": 0, + "inactive_file": 2510848, + "kernel_stack": 16384, + "pgactivate": 0, + "pgdeactivate": 0, + "pgfault": 2042, + "pglazyfree": 0, + "pglazyfreed": 0, + "pgmajfault": 45, + "pgrefill": 0, + "pgscan": 0, + "pgsteal": 0, + "shmem": 0, + "slab": 1180928, + "slab_reclaimable": 725576, + "slab_unreclaimable": 455352, + "sock": 0, + "thp_collapse_alloc": 0, + "thp_fault_alloc": 1, + "unevictable": 0, + "workingset_activate": 0, + "workingset_nodereclaim": 0, + "workingset_refault": 0 + } + }, + "failcnt": { + "description": "Number of times memory usage hits limits.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + }, + "limit": { + "description": "This field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 8217579520 + }, + "commitbytes": { + "description": "Committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + }, + "commitpeakbytes": { + "description": "Peak committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + }, + "privateworkingset": { + "description": "Private working set.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + } + } + }, + "ContainerNetworkStats": { + "description": "Aggregates the network stats of one container\n", + "type": "object", + "x-go-name": "NetworkStats", + "x-nullable": true, + "properties": { + "rx_bytes": { + "description": "Bytes received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 5338 + }, + "rx_packets": { + "description": "Packets received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 36 + }, + "rx_errors": { + "description": "Received errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "rx_dropped": { + "description": "Incoming packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_bytes": { + "description": "Bytes sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 1200 + }, + "tx_packets": { + "description": "Packets sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 12 + }, + "tx_errors": { + "description": "Sent errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_dropped": { + "description": "Outgoing packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "endpoint_id": { + "description": "Endpoint ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "string", + "x-nullable": true + }, + "instance_id": { + "description": "Instance ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "string", + "x-nullable": true + } + } + }, + "ContainerStorageStats": { + "description": "StorageStats is the disk I/O stats for read/write on Windows.\n\nThis type is Windows-specific and omitted for Linux containers.\n", + "type": "object", + "x-go-name": "StorageStats", + "x-nullable": true, + "properties": { + "read_count_normalized": { + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 7593984 + }, + "read_size_bytes": { + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 7593984 + }, + "write_count_normalized": { + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 7593984 + }, + "write_size_bytes": { + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 7593984 + } + } + }, + "ContainerTopResponse": { + "type": "object", + "x-go-name": "TopResponse", + "title": "ContainerTopResponse", + "description": "Container \"top\" response.", + "properties": { + "Titles": { + "description": "The ps column titles", + "type": "array", + "items": { + "type": "string" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ] + } + }, + "Processes": { + "description": "Each process running in the container, where each process\nis an array of values corresponding to the titles.", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": { + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + } + } + }, + "ContainerWaitResponse": { + "description": "OK response to ContainerWait operation", + "type": "object", + "x-go-name": "WaitResponse", + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "properties": { + "StatusCode": { + "description": "Exit code of the container", + "type": "integer", + "format": "int64", + "x-nullable": false + }, + "Error": { + "$ref": "#/definitions/ContainerWaitExitError" + } + } + }, + "ContainerWaitExitError": { + "description": "container waiting error, if any", + "type": "object", + "x-go-name": "WaitExitError", + "properties": { + "Message": { + "description": "Details of an error", + "type": "string" + } + } + }, + "SystemVersion": { + "type": "object", + "description": "Response of Engine API: GET \"/version\"\n", + "properties": { + "Platform": { + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "description": "Information about system components\n", + "items": { + "type": "object", + "x-go-name": "ComponentVersion", + "required": [ + "Name", + "Version" + ], + "properties": { + "Name": { + "description": "Name of the component\n", + "type": "string", + "example": "Engine" + }, + "Version": { + "description": "Version of the component\n", + "type": "string", + "x-nullable": false, + "example": "27.0.1" + }, + "Details": { + "description": "Key/value pairs of strings with additional information about the\ncomponent. These values are intended for informational purposes\nonly, and their content is not defined, and not part of the API\nspecification.\n\nThese messages can be printed by the client as information to the user.\n", + "type": "object", + "x-nullable": true + } + } + } + }, + "Version": { + "description": "The version of the daemon", + "type": "string", + "example": "27.0.1" + }, + "ApiVersion": { + "description": "The default (and highest) API version that is supported by the daemon\n", + "type": "string", + "example": "1.47" + }, + "MinAPIVersion": { + "description": "The minimum API version that is supported by the daemon\n", + "type": "string", + "example": "1.24" + }, + "GitCommit": { + "description": "The Git commit of the source code that was used to build the daemon\n", + "type": "string", + "example": "48a66213fe" + }, + "GoVersion": { + "description": "The version Go used to compile the daemon, and the version of the Go\nruntime in use.\n", + "type": "string", + "example": "go1.22.7" + }, + "Os": { + "description": "The operating system that the daemon is running on (\"linux\" or \"windows\")\n", + "type": "string", + "example": "linux" + }, + "Arch": { + "description": "Architecture of the daemon, as returned by the Go runtime (`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "amd64" + }, + "KernelVersion": { + "description": "The kernel version (`uname -r`) that the daemon is running on.\n\nThis field is omitted when empty.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "Experimental": { + "description": "Indicates if the daemon is started with experimental features enabled.\n\nThis field is omitted when empty / false.\n", + "type": "boolean", + "example": true + }, + "BuildTime": { + "description": "The date and time that the daemon was compiled.\n", + "type": "string", + "example": "2020-06-22T15:49:27.000000000+00:00" + } + } + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "description": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "type": "string", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "description": "Total number of containers on the host.", + "type": "integer", + "example": 14 + }, + "ContainersRunning": { + "description": "Number of containers with status `\"running\"`.\n", + "type": "integer", + "example": 3 + }, + "ContainersPaused": { + "description": "Number of containers with status `\"paused\"`.\n", + "type": "integer", + "example": 1 + }, + "ContainersStopped": { + "description": "Number of containers with status `\"stopped\"`.\n", + "type": "integer", + "example": 10 + }, + "Images": { + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "type": "integer", + "example": 508 + }, + "Driver": { + "description": "Name of the storage driver in use.", + "type": "string", + "example": "overlay2" + }, + "DriverStatus": { + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ] + }, + "DockerRootDir": { + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "type": "string", + "example": "/var/lib/docker" + }, + "Plugins": { + "$ref": "#/definitions/PluginsInfo" + }, + "MemoryLimit": { + "description": "Indicates if the host has memory limit support enabled.", + "type": "boolean", + "example": true + }, + "SwapLimit": { + "description": "Indicates if the host has memory swap limit support enabled.", + "type": "boolean", + "example": true + }, + "CpuCfsPeriod": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CpuCfsQuota": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CPUShares": { + "description": "Indicates if CPU Shares limiting is supported by the host.\n", + "type": "boolean", + "example": true + }, + "CPUSet": { + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "type": "boolean", + "example": true + }, + "PidsLimit": { + "description": "Indicates if the host kernel has PID limit support enabled.", + "type": "boolean", + "example": true + }, + "OomKillDisable": { + "description": "Indicates if OOM killer disable is supported on the host.", + "type": "boolean" + }, + "IPv4Forwarding": { + "description": "Indicates IPv4 forwarding is enabled.", + "type": "boolean", + "example": true + }, + "Debug": { + "description": "Indicates if the daemon is running in debug-mode / with debug-level\nlogging enabled.\n", + "type": "boolean", + "example": true + }, + "NFd": { + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 64 + }, + "NGoroutines": { + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 174 + }, + "SystemTime": { + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "type": "string", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "description": "The logging driver to use as a default for new containers.\n", + "type": "string" + }, + "CgroupDriver": { + "description": "The driver to use for managing cgroups.\n", + "type": "string", + "enum": [ + "cgroupfs", + "systemd", + "none" + ], + "default": "cgroupfs", + "example": "cgroupfs" + }, + "CgroupVersion": { + "description": "The version of the cgroup.\n", + "type": "string", + "enum": [ + "1", + "2" + ], + "default": "1", + "example": "1" + }, + "NEventsListener": { + "description": "Number of event listeners subscribed.", + "type": "integer", + "example": 30 + }, + "KernelVersion": { + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "OperatingSystem": { + "description": "Name of the host's operating system, for example: \"Ubuntu 24.04 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "type": "string", + "example": "Ubuntu 24.04 LTS" + }, + "OSVersion": { + "description": "Version of the host's operating system\n\n


\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "type": "string", + "example": "24.04" + }, + "OSType": { + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "linux" + }, + "Architecture": { + "description": "Hardware architecture of the host, as returned by the operating system.\nThis is equivalent to the output of `uname -m` on Linux.\n\nUnlike `Arch` (from `/version`), this reports the machine's native\narchitecture, which can differ from the Go runtime architecture when\nrunning a binary compiled for a different architecture (for example,\na 32-bit binary running on 64-bit hardware).\n", + "type": "string", + "example": "x86_64" + }, + "NCPU": { + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "type": "integer", + "example": 4 + }, + "MemTotal": { + "description": "Total amount of physical memory available on the host, in bytes.\n", + "type": "integer", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "default": "https://index.docker.io/v1/", + "type": "string", + "example": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/definitions/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/definitions/GenericResources" + }, + "HttpProxy": { + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + }, + "NoProxy": { + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "*.local, 169.254/16" + }, + "Name": { + "description": "Hostname of the host.", + "type": "string", + "example": "node5.corp.example.com" + }, + "Labels": { + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "storage=ssd", + "production" + ] + }, + "ExperimentalBuild": { + "description": "Indicates if experimental features are enabled on the daemon.\n", + "type": "boolean", + "example": true + }, + "ServerVersion": { + "description": "Version string of the daemon.\n", + "type": "string", + "example": "27.0.1" + }, + "Runtimes": { + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Runtime" + }, + "default": { + "runc": { + "path": "runc" + } + }, + "example": { + "runc": { + "path": "runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "type": "string", + "default": "runc", + "example": "runc" + }, + "Swarm": { + "$ref": "#/definitions/SwarmInfo" + }, + "LiveRestoreEnabled": { + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "type": "boolean", + "default": false, + "example": false + }, + "Isolation": { + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "type": "string", + "enum": [ + "default", + "hyperv", + "process", + "" + ] + }, + "InitBinary": { + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/definitions/Commit" + }, + "RuncCommit": { + "$ref": "#/definitions/Commit" + }, + "InitCommit": { + "$ref": "#/definitions/Commit" + }, + "SecurityOptions": { + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, user-namespaces (userns), rootless and\nno-new-privileges.\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns", + "name=rootless" + ] + }, + "ProductLicense": { + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "type": "string", + "example": "Community Engine" + }, + "DefaultAddressPools": { + "description": "List of custom default address pools for local networks, which can be\nspecified in the daemon.json file or dockerd option.\n\nExample: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n10.10.[0-255].0/24 address pools.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Base": { + "description": "The network address in CIDR format", + "type": "string", + "example": "10.10.0.0/16" + }, + "Size": { + "description": "The network pool size", + "type": "integer", + "example": "24" + } + } + } + }, + "FirewallBackend": { + "$ref": "#/definitions/FirewallInfo" + }, + "DiscoveredDevices": { + "description": "List of devices discovered by device drivers.\n\nEach device includes information about its source driver, kind, name,\nand additional driver-specific attributes.\n", + "type": "array", + "items": { + "$ref": "#/definitions/DeviceInfo" + } + }, + "NRI": { + "$ref": "#/definitions/NRIInfo" + }, + "Warnings": { + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "WARNING: No memory limit support" + ] + }, + "CDISpecDirs": { + "description": "List of directories where (Container Device Interface) CDI\nspecifications are located.\n\nThese specifications define vendor-specific modifications to an OCI\nruntime specification for a container being created.\n\nAn empty list indicates that CDI device injection is disabled.\n\nNote that since using CDI device injection requires the daemon to have\nexperimental enabled. For non-experimental daemons an empty list will\nalways be returned.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/etc/cdi", + "/var/run/cdi" + ] + }, + "Containerd": { + "$ref": "#/definitions/ContainerdInfo" + } + } + }, + "ContainerdInfo": { + "description": "Information for connecting to the containerd instance that is used by the daemon.\nThis is included for debugging purposes only.\n", + "type": "object", + "x-nullable": true, + "properties": { + "Address": { + "description": "The address of the containerd socket.", + "type": "string", + "example": "/run/containerd/containerd.sock" + }, + "Namespaces": { + "description": "The namespaces that the daemon uses for running containers and\nplugins in containerd. These namespaces can be configured in the\ndaemon configuration, and are considered to be used exclusively\nby the daemon, Tampering with the containerd instance may cause\nunexpected behavior.\n\nAs these namespaces are considered to be exclusively accessed\nby the daemon, it is not recommended to change these values,\nor to change them to a value that is used by other systems,\nsuch as cri-containerd.\n", + "type": "object", + "properties": { + "Containers": { + "description": "The default containerd namespace used for containers managed\nby the daemon.\n\nThe default namespace for containers is \"moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "moby", + "example": "moby" + }, + "Plugins": { + "description": "The default containerd namespace used for plugins managed by\nthe daemon.\n\nThe default namespace for plugins is \"plugins.moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "plugins.moby", + "example": "plugins.moby" + } + } + } + } + }, + "FirewallInfo": { + "description": "Information about the daemon's firewalling configuration.\n\nThis field is currently only used on Linux, and omitted on other platforms.\n", + "type": "object", + "x-nullable": true, + "properties": { + "Driver": { + "description": "The name of the firewall backend driver.\n", + "type": "string", + "example": "nftables" + }, + "Info": { + "description": "Information about the firewall backend, provided as\n\"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "ReloadedAt", + "2025-01-01T00:00:00Z" + ] + ] + } + } + }, + "PluginsInfo": { + "description": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n", + "type": "object", + "properties": { + "Volume": { + "description": "Names of available volume-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "local" + ] + }, + "Network": { + "description": "Names of available network-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ] + }, + "Authorization": { + "description": "Names of available authorization plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "img-authz-plugin", + "hbm" + ] + }, + "Log": { + "description": "Names of available logging-drivers, and logging-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "splunk", + "syslog" + ] + } + } + }, + "RegistryServiceConfig": { + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "type": "object", + "x-nullable": true, + "properties": { + "InsecureRegistryCIDRs": { + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`::1/128` and `127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "::1/128", + "127.0.0.0/8" + ] + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ] + } + } + }, + "IndexInfo": { + "description": "IndexInfo contains information about a registry.", + "type": "object", + "x-nullable": true, + "properties": { + "Name": { + "description": "Name of the registry, such as \"docker.io\".\n", + "type": "string", + "example": "docker.io" + }, + "Mirrors": { + "description": "List of mirrors, expressed as URIs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ] + }, + "Secure": { + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "type": "boolean", + "example": true + }, + "Official": { + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "type": "boolean", + "example": true + } + } + }, + "Runtime": { + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n", + "type": "object", + "properties": { + "path": { + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [ + "--debug", + "--systemd-cgroup=false" + ] + }, + "status": { + "description": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "string" + }, + "example": { + "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" + } + } + } + }, + "Commit": { + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n", + "type": "object", + "properties": { + "ID": { + "description": "Actual commit ID of external tool.", + "type": "string", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + } + } + }, + "SwarmInfo": { + "description": "Represents generic information about swarm.\n", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string", + "default": "", + "example": "k67qz4598weg5unwwffg6z1m1" + }, + "NodeAddr": { + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "type": "string", + "default": "", + "example": "10.0.0.46" + }, + "LocalNodeState": { + "$ref": "#/definitions/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "default": false, + "example": true + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "description": "List of ID's and addresses of other managers in the swarm.\n", + "type": "array", + "default": null, + "x-nullable": true, + "items": { + "$ref": "#/definitions/PeerNode" + }, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ] + }, + "Nodes": { + "description": "Total number of nodes in the swarm.", + "type": "integer", + "x-nullable": true, + "example": 4 + }, + "Managers": { + "description": "Total number of managers in the swarm.", + "type": "integer", + "x-nullable": true, + "example": 3 + }, + "Cluster": { + "$ref": "#/definitions/ClusterInfo" + } + } + }, + "LocalNodeState": { + "description": "Current local status of this node.", + "type": "string", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ], + "example": "active" + }, + "PeerNode": { + "description": "Represents a peer-node in the swarm", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string" + }, + "Addr": { + "description": "IP address and ports at which this node can be reached.\n", + "type": "string" + } + } + }, + "NetworkAttachmentConfig": { + "description": "Specifies how a service should be attached to a particular network.\n", + "type": "object", + "properties": { + "Target": { + "description": "The target network for attachment. Must be a network name or ID.\n", + "type": "string" + }, + "Aliases": { + "description": "Discoverable alternate names for the service on this network.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "description": "Driver attachment options for the network target.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "EventActor": { + "description": "Actor describes something that generates events, like a container, network,\nor a volume.\n", + "type": "object", + "properties": { + "ID": { + "description": "The ID of the object emitting the event", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Attributes": { + "description": "Various key/value attributes of the object, depending on its type.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-label-value", + "image": "alpine:latest", + "name": "my-container" + } + } + } + }, + "EventMessage": { + "description": "EventMessage represents the information an event contains.\n", + "type": "object", + "title": "SystemEventsResponse", + "properties": { + "Type": { + "description": "The type of object emitting the event", + "type": "string", + "enum": [ + "builder", + "config", + "container", + "daemon", + "image", + "network", + "node", + "plugin", + "secret", + "service", + "volume" + ], + "example": "container" + }, + "Action": { + "description": "The type of event", + "type": "string", + "example": "create" + }, + "Actor": { + "$ref": "#/definitions/EventActor" + }, + "scope": { + "description": "Scope of the event. Engine events are `local` scope. Cluster (Swarm)\nevents are `swarm` scope.\n", + "type": "string", + "enum": [ + "local", + "swarm" + ] + }, + "time": { + "description": "Timestamp of event", + "type": "integer", + "format": "int64", + "example": 1629574695 + }, + "timeNano": { + "description": "Timestamp of event, with nanosecond accuracy", + "type": "integer", + "format": "int64", + "example": 1629574695515050000 + } + } + }, + "OCIDescriptor": { + "type": "object", + "x-go-name": "Descriptor", + "description": "A descriptor struct containing digest, media type, and size, as defined in\nthe [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).\n", + "properties": { + "mediaType": { + "description": "The media type of the object this schema refers to.\n", + "type": "string", + "example": "application/vnd.oci.image.manifest.v1+json" + }, + "digest": { + "description": "The digest of the targeted content.\n", + "type": "string", + "example": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + }, + "size": { + "description": "The size in bytes of the blob.\n", + "type": "integer", + "format": "int64", + "example": 424 + }, + "urls": { + "description": "List of URLs from which this object MAY be downloaded.", + "type": "array", + "items": { + "type": "string", + "format": "uri" + }, + "x-nullable": true + }, + "annotations": { + "description": "Arbitrary metadata relating to the targeted content.", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.base.digest": "sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8", + "org.opencontainers.image.base.name": "scratch", + "org.opencontainers.image.created": "2025-01-27T00:00:00Z", + "org.opencontainers.image.revision": "9fabb4bad5138435b01857e2fe9363e2dc5f6a79", + "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base", + "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu", + "org.opencontainers.image.version": "24.04" + } + }, + "data": { + "type": "string", + "x-nullable": true, + "description": "Data is an embedding of the targeted content. This is encoded as a base64\nstring when marshalled to JSON (automatically, by encoding/json). If\npresent, Data can be used directly to avoid fetching the targeted content.", + "example": null + }, + "platform": { + "$ref": "#/definitions/OCIPlatform" + }, + "artifactType": { + "description": "ArtifactType is the IANA media type of this artifact.", + "type": "string", + "x-nullable": true, + "example": null + } + } + }, + "OCIPlatform": { + "type": "object", + "x-go-name": "Platform", + "x-nullable": true, + "description": "Describes the platform which the image in the manifest runs on, as defined\nin the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).\n", + "properties": { + "architecture": { + "description": "The CPU architecture, for example `amd64` or `ppc64`.\n", + "type": "string", + "example": "arm" + }, + "os": { + "description": "The operating system, for example `linux` or `windows`.\n", + "type": "string", + "example": "windows" + }, + "os.version": { + "description": "Optional field specifying the operating system version, for example on\nWindows `10.0.19041.1165`.\n", + "type": "string", + "example": "10.0.19041.1165" + }, + "os.features": { + "description": "Optional field specifying an array of strings, each listing a required\nOS feature (for example on Windows `win32k`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "win32k" + ] + }, + "variant": { + "description": "Optional field specifying a variant of the CPU, for example `v7` to\nspecify ARMv7 when architecture is `arm`.\n", + "type": "string", + "example": "v7" + } + } + }, + "DistributionInspect": { + "type": "object", + "x-go-name": "DistributionInspect", + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "description": "Describes the result obtained from contacting the registry to retrieve\nimage metadata.\n", + "properties": { + "Descriptor": { + "$ref": "#/definitions/OCIDescriptor" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image.\n", + "items": { + "$ref": "#/definitions/OCIPlatform" + } + } + } + }, + "ClusterVolume": { + "type": "object", + "description": "Options and information specific to, and only present on, Swarm CSI\ncluster volumes.\n", + "properties": { + "ID": { + "type": "string", + "description": "The Swarm ID of this volume. Because cluster volumes are Swarm\nobjects, they have an ID, unlike non-cluster volumes. This ID can\nbe used to refer to the Volume instead of the name.\n" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/definitions/ClusterVolumeSpec" + }, + "Info": { + "type": "object", + "description": "Information about the global status of the volume.\n", + "properties": { + "CapacityBytes": { + "type": "integer", + "format": "int64", + "description": "The capacity of the volume in bytes. A value of 0 indicates that\nthe capacity is unknown.\n" + }, + "VolumeContext": { + "type": "object", + "description": "A map of strings to strings returned from the storage plugin when\nthe volume is created.\n", + "additionalProperties": { + "type": "string" + } + }, + "VolumeID": { + "type": "string", + "description": "The ID of the volume as returned by the CSI storage plugin. This\nis distinct from the volume's ID as provided by Docker. This ID\nis never used by the user when communicating with Docker to refer\nto this volume. If the ID is blank, then the Volume has not been\nsuccessfully created in the plugin yet.\n" + }, + "AccessibleTopology": { + "type": "array", + "description": "The topology this volume is actually accessible from.\n", + "items": { + "$ref": "#/definitions/Topology" + } + } + } + }, + "PublishStatus": { + "type": "array", + "description": "The status of the volume as it pertains to its publishing and use on\nspecific nodes\n", + "items": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "The ID of the Swarm node the volume is published on.\n" + }, + "State": { + "type": "string", + "description": "The published state of the volume.\n* `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.\n* `published` The volume is published successfully to the node.\n* `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.\n* `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.\n", + "enum": [ + "pending-publish", + "published", + "pending-node-unpublish", + "pending-controller-unpublish" + ] + }, + "PublishContext": { + "type": "object", + "description": "A map of strings to strings returned by the CSI controller\nplugin when a volume is published.\n", + "additionalProperties": { + "type": "string" + } + } + } + } + } + } + }, + "ClusterVolumeSpec": { + "type": "object", + "description": "Cluster-specific options used to create the volume.\n", + "properties": { + "Group": { + "type": "string", + "description": "Group defines the volume group of this volume. Volumes belonging to\nthe same group can be referred to by group name when creating\nServices. Referring to a volume by group instructs Swarm to treat\nvolumes in that group interchangeably for the purpose of scheduling.\nVolumes with an empty string for a group technically all belong to\nthe same, emptystring group.\n" + }, + "AccessMode": { + "type": "object", + "description": "Defines how the volume is used by tasks.\n", + "properties": { + "Scope": { + "type": "string", + "description": "The set of nodes this volume can be used on at one time.\n- `single` The volume may only be scheduled to one node at a time.\n- `multi` the volume may be scheduled to any supported number of nodes at a time.\n", + "default": "single", + "enum": [ + "single", + "multi" + ], + "x-nullable": false + }, + "Sharing": { + "type": "string", + "description": "The number and way that different tasks can use this volume\nat one time.\n- `none` The volume may only be used by one task at a time.\n- `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly\n- `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.\n- `all` The volume may have any number of readers and writers.\n", + "default": "none", + "enum": [ + "none", + "readonly", + "onewriter", + "all" + ], + "x-nullable": false + }, + "MountVolume": { + "type": "object", + "description": "Options for using this volume as a Mount-type volume.\n\n Either MountVolume or BlockVolume, but not both, must be\n present.\n properties:\n FsType:\n type: \"string\"\n description: |\n Specifies the filesystem type for the mount volume.\n Optional.\n MountFlags:\n type: \"array\"\n description: |\n Flags to pass when mounting the volume. Optional.\n items:\n type: \"string\"\nBlockVolume:\n type: \"object\"\n description: |\n Options for using this volume as a Block-type volume.\n Intentionally empty.\n" + }, + "Secrets": { + "type": "array", + "description": "Swarm Secrets that are passed to the CSI storage plugin when\noperating on this volume.\n", + "items": { + "type": "object", + "description": "One cluster volume secret entry. Defines a key-value pair that\nis passed to the plugin.\n", + "properties": { + "Key": { + "type": "string", + "description": "Key is the name of the key of the key-value pair passed to\nthe plugin.\n" + }, + "Secret": { + "type": "string", + "description": "Secret is the swarm Secret object from which to read data.\nThis can be a Secret name or ID. The Secret data is\nretrieved by swarm and used as the value of the key-value\npair passed to the plugin.\n" + } + } + } + }, + "AccessibilityRequirements": { + "type": "object", + "description": "Requirements for the accessible topology of the volume. These\nfields are optional. For an in-depth description of what these\nfields mean, see the CSI specification.\n", + "properties": { + "Requisite": { + "type": "array", + "description": "A list of required topologies, at least one of which the\nvolume must be accessible from.\n", + "items": { + "$ref": "#/definitions/Topology" + } + }, + "Preferred": { + "type": "array", + "description": "A list of topologies that the volume should attempt to be\nprovisioned in.\n", + "items": { + "$ref": "#/definitions/Topology" + } + } + } + }, + "CapacityRange": { + "type": "object", + "description": "The desired capacity that the volume should be created with. If\nempty, the plugin will decide the capacity.\n", + "properties": { + "RequiredBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must be at least this big. The value of 0\nindicates an unspecified minimum\n" + }, + "LimitBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must not be bigger than this. The value of 0\nindicates an unspecified maximum.\n" + } + } + }, + "Availability": { + "type": "string", + "description": "The availability of the volume for use in tasks.\n- `active` The volume is fully available for scheduling on the cluster\n- `pause` No new workloads should use the volume, but existing workloads are not stopped.\n- `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.\n", + "default": "active", + "x-nullable": false, + "enum": [ + "active", + "pause", + "drain" + ] + } + } + } + } + }, + "Topology": { + "description": "A map of topological domains to topological segments. For in depth\ndetails, see documentation for the Topology object in the CSI\nspecification.\n", + "type": "object", + "properties": { + "Segments": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "AttestationStatement": { + "x-go-name": "AttestationStatement", + "description": "AttestationStatement is a single in-toto statement attached to an image.\n", + "type": "object", + "required": [ + "Descriptor", + "PredicateType" + ], + "properties": { + "Descriptor": { + "$ref": "#/definitions/OCIDescriptor" + }, + "PredicateType": { + "description": "The in-toto predicate type URI of this statement.", + "type": "string", + "example": "https://slsa.dev/provenance/v0.2" + }, + "Statement": { + "description": "The verbatim in-toto statement JSON. Only included when the caller\nopts in via the `statement=true` query parameter; otherwise absent.\n", + "type": "object", + "x-nullable": true + } + } + }, + "ImageManifestSummary": { + "x-go-name": "ManifestSummary", + "description": "ImageManifestSummary represents a summary of an image manifest.\n", + "type": "object", + "required": [ + "ID", + "Descriptor", + "Available", + "Size", + "Kind" + ], + "properties": { + "ID": { + "description": "ID is the content-addressable ID of an image and is the same as the\ndigest of the image manifest.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + }, + "Descriptor": { + "$ref": "#/definitions/OCIDescriptor" + }, + "Available": { + "description": "Indicates whether all the child content (image config, layers) is fully available locally.", + "type": "boolean", + "example": true + }, + "Size": { + "type": "object", + "x-nullable": false, + "required": [ + "Content", + "Total" + ], + "properties": { + "Total": { + "type": "integer", + "format": "int64", + "example": 8213251, + "description": "Total is the total size (in bytes) of all the locally present\ndata (both distributable and non-distributable) that's related to\nthis manifest and its children.\nThis equal to the sum of [Content] size AND all the sizes in the\n[Size] struct present in the Kind-specific data struct.\nFor example, for an image kind (Kind == \"image\")\nthis would include the size of the image content and unpacked\nimage snapshots ([Size.Content] + [ImageData.Size.Unpacked]).\n" + }, + "Content": { + "description": "Content is the size (in bytes) of all the locally present\ncontent in the content store (e.g. image config, layers)\nreferenced by this manifest and its children.\nThis only includes blobs in the content store.\n", + "type": "integer", + "format": "int64", + "example": 3987495 + } + } + }, + "Kind": { + "type": "string", + "example": "image", + "enum": [ + "image", + "attestation", + "unknown" + ], + "description": "The kind of the manifest.\n\nkind | description\n-------------|-----------------------------------------------------------\nimage | Image manifest that can be used to start a container.\nattestation | Attestation manifest produced by the Buildkit builder for a specific image manifest.\n" + }, + "ImageData": { + "description": "The image data for the image manifest.\nThis field is only populated when Kind is \"image\".\n", + "type": "object", + "x-nullable": true, + "x-omitempty": true, + "required": [ + "Platform", + "Containers", + "Size", + "UnpackedSize" + ], + "properties": { + "Platform": { + "$ref": "#/definitions/OCIPlatform", + "description": "OCI platform of the image. This will be the platform specified in the\nmanifest descriptor from the index/manifest list.\nIf it's not available, it will be obtained from the image config.\n" + }, + "Identity": { + "description": "Identity holds information about the identity and origin of this image.\nFor image list responses, this can duplicate Build/Pull fields across\nimage manifests, because those parts are image-level metadata.\n", + "x-nullable": true, + "$ref": "#/definitions/Identity" + }, + "Containers": { + "description": "The IDs of the containers that are using this image.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430", + "abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e" + ] + }, + "Size": { + "type": "object", + "x-nullable": false, + "required": [ + "Unpacked" + ], + "properties": { + "Unpacked": { + "type": "integer", + "format": "int64", + "example": 3987495, + "description": "Unpacked is the size (in bytes) of the locally unpacked\n(uncompressed) image content that's directly usable by the containers\nrunning this image.\nIt's independent of the distributable content - e.g.\nthe image might still have an unpacked data that's still used by\nsome container even when the distributable/compressed content is\nalready gone.\n" + } + } + } + } + }, + "AttestationData": { + "description": "The image data for the attestation manifest.\nThis field is only populated when Kind is \"attestation\".\n", + "type": "object", + "x-nullable": true, + "x-omitempty": true, + "required": [ + "For" + ], + "properties": { + "For": { + "description": "The digest of the image manifest that this attestation is for.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + } + } + } + } + } + }, + "id": "engine-1.55-1060b9fc6554", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/definitions", + "destinationPointer": null + }, + { + "pointer": "/openapi", + "beforePresent": false, + "afterPresent": true, + "after": "3.0.0", + "id": "engine-1.55-5f9acaab2187", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/openapi" + }, + { + "pointer": "/paths/~1_ping/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "text/plain" + ], + "id": "engine-1.55-f31122b2cf9f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "type": "string", + "example": "OK" + } + } + }, + "id": "engine-1.55-1a30d150947d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/content" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Api-Version/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string" + }, + "id": "engine-1.55-7ac5e4333446", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Api-Version/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Api-Version/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-bf8f6e0ba933", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Api-Version/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/default", + "beforePresent": true, + "afterPresent": false, + "before": "2", + "id": "engine-1.55-25ba7eea3ec2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "2" + }, + "id": "engine-1.55-2d5395b3e110", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-909402e6ca62", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache, no-store, must-revalidate", + "id": "engine-1.55-580f6c3b70de", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + }, + "id": "engine-1.55-74e098076d17", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-3526b3c3e395", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Docker-Experimental/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "boolean" + }, + "id": "engine-1.55-e088a454f0a9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Docker-Experimental/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Docker-Experimental/type", + "beforePresent": true, + "afterPresent": false, + "before": "boolean", + "id": "engine-1.55-a9542ebe2159", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Docker-Experimental/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Pragma/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache", + "id": "engine-1.55-98e775d9b6eb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Pragma/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Pragma/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache" + }, + "id": "engine-1.55-7a48b741e440", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Pragma/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Pragma/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-d0f984ee5636", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Pragma/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Swarm/default", + "beforePresent": true, + "afterPresent": false, + "before": "inactive", + "id": "engine-1.55-a986a7632431", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Swarm/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Swarm/enum", + "beforePresent": true, + "afterPresent": false, + "before": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "id": "engine-1.55-9546c5c45abb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Swarm/enum", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Swarm/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "default": "inactive" + }, + "id": "engine-1.55-a092e3fef07e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Swarm/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Swarm/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-0191efbb927b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Swarm/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "example": "OK" + }, + "id": "engine-1.55-481d5c48e660", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-5f0c193d133e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/500/content" + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache, no-store, must-revalidate", + "id": "engine-1.55-6d16439fbbf6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + }, + "id": "engine-1.55-718b8185432c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-1fb0244d6d3c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Pragma/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache", + "id": "engine-1.55-d19937f61dea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/headers/Pragma/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Pragma/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache" + }, + "id": "engine-1.55-102ae75c76c4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/500/headers/Pragma/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Pragma/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-ba4c69a764c2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/headers/Pragma/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-103691545254", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "text/plain" + ], + "id": "engine-1.55-fcd8b947f5ce", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "type": "string", + "example": "(empty)" + } + } + }, + "id": "engine-1.55-6d1ab4e9bc68", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/content" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Api-Version/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string" + }, + "id": "engine-1.55-a4dd14813321", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Api-Version/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Api-Version/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-bdcc657b6547", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Api-Version/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Builder-Version/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string" + }, + "id": "engine-1.55-16e8d96ae87e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Builder-Version/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Builder-Version/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-a4b514019501", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Builder-Version/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache, no-store, must-revalidate", + "id": "engine-1.55-e321b9ae088a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + }, + "id": "engine-1.55-22e29fdefd63", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-8957f74730d1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Docker-Experimental/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "boolean" + }, + "id": "engine-1.55-977288089a12", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Docker-Experimental/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Docker-Experimental/type", + "beforePresent": true, + "afterPresent": false, + "before": "boolean", + "id": "engine-1.55-7a2b59bd39ab", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Docker-Experimental/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Pragma/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache", + "id": "engine-1.55-b6f58b3a24e4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Pragma/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Pragma/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache" + }, + "id": "engine-1.55-571675e75848", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Pragma/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Pragma/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-9e2d9fa75839", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Pragma/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Swarm/default", + "beforePresent": true, + "afterPresent": false, + "before": "inactive", + "id": "engine-1.55-c707e9387542", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Swarm/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Swarm/enum", + "beforePresent": true, + "afterPresent": false, + "before": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "id": "engine-1.55-abc4184ee49f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Swarm/enum", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Swarm/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "default": "inactive" + }, + "id": "engine-1.55-e1c6f35e3770", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Swarm/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Swarm/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-b7848e626725", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Swarm/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "example": "(empty)" + }, + "id": "engine-1.55-005181f4da03", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6857a5b79c6f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/500/content" + }, + { + "pointer": "/paths/~1_ping/head/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b8733a1ab3c6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-b6a33746d6ff", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "authConfig", + "in": "body", + "description": "Authentication to check", + "schema": { + "$ref": "#/definitions/AuthConfig" + } + } + ], + "id": "engine-1.55-eab3be3e6227", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-f140acd26b37", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthConfig" + } + } + }, + "description": "Authentication to check" + }, + "id": "engine-1.55-656855b431a9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1auth/post/requestBody" + }, + { + "pointer": "/paths/~1auth/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + } + } + }, + "id": "engine-1.55-9b42c999a759", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1auth/post/responses/200/content" + }, + { + "pointer": "/paths/~1auth/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/AuthResponse" + }, + "id": "engine-1.55-57140246acc1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/responses/401/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c135305004bf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1auth/post/responses/401/content" + }, + { + "pointer": "/paths/~1auth/post/responses/401/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c9f66bba7827", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/responses/401/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-012622409cb2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1auth/post/responses/500/content" + }, + { + "pointer": "/paths/~1auth/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-cb54eebfc927", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/octet-stream" + ], + "id": "engine-1.55-a3b89ad66865", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "inputStream", + "in": "body", + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.", + "schema": { + "type": "string", + "format": "binary" + } + }, + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "type": "string", + "default": "Dockerfile" + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "type": "string" + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "type": "string" + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "type": "string" + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "type": "boolean", + "default": false + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "type": "boolean", + "default": false + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "type": "string" + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "type": "string" + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "type": "boolean", + "default": true + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "type": "boolean", + "default": false + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "type": "integer", + "format": "int64" + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "type": "integer", + "format": "int64" + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "type": "integer", + "format": "int64" + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "type": "string" + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "type": "integer", + "format": "int64" + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "type": "integer", + "format": "int64" + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "type": "string" + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "type": "integer", + "format": "int64" + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "type": "boolean" + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "type": "string" + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported\nstandard values are: `bridge`, `host`, `none`, and `container:`.\nAny other value is taken as a custom network's name or ID to which this\ncontainer should connect to.\n", + "type": "string" + }, + { + "name": "Content-type", + "in": "header", + "type": "string", + "enum": [ + "application/x-tar" + ], + "default": "application/x-tar" + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "type": "string" + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "type": "string", + "default": "" + }, + { + "name": "target", + "in": "query", + "description": "Target build stage", + "type": "string", + "default": "" + }, + { + "name": "outputs", + "in": "query", + "description": "BuildKit output configuration in the format of a stringified JSON array of objects.\nEach object must have two top-level properties: `Type` and `Attrs`.\nThe `Type` property must be set to 'moby'.\nThe `Attrs` property is a map of attributes for the BuildKit output configuration.\nSee https://docs.docker.com/build/exporters/oci-docker/ for more information.\n\nExample:\n\n```\n[{\"Type\":\"moby\",\"Attrs\":{\"type\":\"image\",\"force-compression\":\"true\",\"compression\":\"zstd\"}}]\n```\n", + "type": "string", + "default": "" + }, + { + "name": "version", + "in": "query", + "type": "string", + "default": "1", + "enum": [ + "1", + "2" + ], + "description": "Version of the builder backend to use.\n\n- `1` is the first generation classic (deprecated) builder in the Docker daemon (default)\n- `2` is [BuildKit](https://github.com/moby/buildkit)\n" + } + ], + "after": [ + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "schema": { + "type": "string", + "default": "Dockerfile" + } + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "schema": { + "type": "string" + } + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "schema": { + "type": "string" + } + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "schema": { + "type": "string" + } + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "schema": { + "type": "string" + } + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "schema": { + "type": "string" + } + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "schema": { + "type": "string" + } + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "schema": { + "type": "boolean" + } + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "schema": { + "type": "string" + } + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported\nstandard values are: `bridge`, `host`, `none`, and `container:`.\nAny other value is taken as a custom network's name or ID to which this\ncontainer should connect to.\n", + "schema": { + "type": "string" + } + }, + { + "name": "Content-type", + "in": "header", + "schema": { + "type": "string", + "enum": [ + "application/x-tar" + ], + "default": "application/x-tar" + } + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "target", + "in": "query", + "description": "Target build stage", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "outputs", + "in": "query", + "description": "BuildKit output configuration in the format of a stringified JSON array of objects.\nEach object must have two top-level properties: `Type` and `Attrs`.\nThe `Type` property must be set to 'moby'.\nThe `Attrs` property is a map of attributes for the BuildKit output configuration.\nSee https://docs.docker.com/build/exporters/oci-docker/ for more information.\n\nExample:\n\n```\n[{\"Type\":\"moby\",\"Attrs\":{\"type\":\"image\",\"force-compression\":\"true\",\"compression\":\"zstd\"}}]\n```\n", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "version", + "in": "query", + "description": "Version of the builder backend to use.\n\n- `1` is the first generation classic (deprecated) builder in the Docker daemon (default)\n- `2` is [BuildKit](https://github.com/moby/buildkit)\n", + "schema": { + "type": "string", + "enum": [ + "1", + "2" + ], + "default": "1" + } + } + ], + "id": "engine-1.55-8d0f4837cc1e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build/post/parameters", + "destinationPointer": "/paths/~1build/post/parameters" + }, + { + "pointer": "/paths/~1build/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-87660097dcf5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." + }, + "id": "engine-1.55-a913ed345773", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build/post/requestBody" + }, + { + "pointer": "/paths/~1build/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-71d1c6ee210d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build/post/responses/400/content" + }, + { + "pointer": "/paths/~1build/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-172e19680d07", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b8b8579b2d28", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build/post/responses/500/content" + }, + { + "pointer": "/paths/~1build/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8cf3e8390c26", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build~1prune/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "reserved-space", + "in": "query", + "description": "Amount of disk space in bytes to keep for cache", + "type": "integer", + "format": "int64" + }, + { + "name": "max-used-space", + "in": "query", + "description": "Maximum amount of disk space allowed to keep for cache", + "type": "integer", + "format": "int64" + }, + { + "name": "min-free-space", + "in": "query", + "description": "Target amount of free disk space after pruning", + "type": "integer", + "format": "int64" + }, + { + "name": "all", + "in": "query", + "type": "boolean", + "description": "Remove all types of build cache" + }, + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the list of build cache objects.\n\nAvailable filters:\n\n- `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time.\n- `id=`\n- `parent=`\n- `type=`\n- `description=`\n- `inuse`\n- `shared`\n- `private`\n" + } + ], + "after": [ + { + "name": "reserved-space", + "in": "query", + "description": "Amount of disk space in bytes to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "max-used-space", + "in": "query", + "description": "Maximum amount of disk space allowed to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "min-free-space", + "in": "query", + "description": "Target amount of free disk space after pruning", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "all", + "in": "query", + "description": "Remove all types of build cache", + "schema": { + "type": "boolean" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the list of build cache objects.\n\nAvailable filters:\n\n- `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time.\n- `id=`\n- `parent=`\n- `type=`\n- `description=`\n- `inuse`\n- `shared`\n- `private`\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-cdb4e11b71fd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build~1prune/post/parameters", + "destinationPointer": "/paths/~1build~1prune/post/parameters" + }, + { + "pointer": "/paths/~1build~1prune/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-f5131f271115", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build~1prune/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build~1prune/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "BuildPruneResponse", + "properties": { + "CachesDeleted": { + "type": "array", + "items": { + "description": "ID of build cache object", + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "id": "engine-1.55-2369be3328ea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build~1prune/post/responses/200/content" + }, + { + "pointer": "/paths/~1build~1prune/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "BuildPruneResponse", + "properties": { + "CachesDeleted": { + "type": "array", + "items": { + "description": "ID of build cache object", + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "id": "engine-1.55-c925f1195bfc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build~1prune/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build~1prune/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-d5181ac21f64", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build~1prune/post/responses/500/content" + }, + { + "pointer": "/paths/~1build~1prune/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c2cd57cbb52f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build~1prune/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-021898a2ebb2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "containerConfig", + "in": "body", + "description": "The container configuration", + "schema": { + "$ref": "#/definitions/ContainerConfig" + } + }, + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "type": "string" + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "type": "string" + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "type": "string" + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "type": "string" + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "type": "string" + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "type": "boolean", + "default": true + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "type": "string" + } + ], + "after": [ + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "schema": { + "type": "string" + } + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "schema": { + "type": "string" + } + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "schema": { + "type": "string" + } + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-97e59df04e5f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/parameters", + "destinationPointer": "/paths/~1commit/post/parameters" + }, + { + "pointer": "/paths/~1commit/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-bf1fcf392565", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerConfig" + } + } + }, + "description": "The container configuration" + }, + "id": "engine-1.55-689654975442", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1commit/post/requestBody" + }, + { + "pointer": "/paths/~1commit/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + }, + "id": "engine-1.55-768841b9e9ac", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1commit/post/responses/201/content" + }, + { + "pointer": "/paths/~1commit/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/IDResponse" + }, + "id": "engine-1.55-5eb9b0c6e0a3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-b804a45cfbb8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1commit/post/responses/404/content" + }, + { + "pointer": "/paths/~1commit/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-93364e7c3eff", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b7542df732aa", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-8ba822837175", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1commit/post/responses/500/content" + }, + { + "pointer": "/paths/~1commit/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-809f3a7cda6a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the configs list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a config name (prefix match)\n" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the configs list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a config name (prefix match)\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-b94eb4fa702f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs/get/parameters", + "destinationPointer": "/paths/~1configs/get/parameters" + }, + { + "pointer": "/paths/~1configs/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-c10899aad5fc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Config" + }, + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ] + } + } + }, + "id": "engine-1.55-349aef23e0cc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs/get/responses/200/content" + }, + { + "pointer": "/paths/~1configs/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Config" + }, + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ] + }, + "id": "engine-1.55-688fa9670304", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-37702dec2f53", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs/get/responses/500/content" + }, + { + "pointer": "/paths/~1configs/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d620b8dfdb43", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-e5c77fefecca", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs/get/responses/503/content" + }, + { + "pointer": "/paths/~1configs/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-058798bfa6e4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-5668db1df462", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "body", + "in": "body", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + ], + "id": "engine-1.55-060b7a99fbd7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-e506382c6ac2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + } + }, + "id": "engine-1.55-6824452d2c5a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/requestBody" + }, + { + "pointer": "/paths/~1configs~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + }, + "id": "engine-1.55-03116bede822", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1configs~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/IDResponse" + }, + "id": "engine-1.55-ead6122e1909", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-5c7009162561", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/responses/409/content" + }, + { + "pointer": "/paths/~1configs~1create/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5f2b2e52d84c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-3f5029702431", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1configs~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-6ad300d77907", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-124f127ab2b2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/responses/503/content" + }, + { + "pointer": "/paths/~1configs~1create/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-20763a58524d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "ID of the config" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the config", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-d46225f031ed", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/delete/parameters", + "destinationPointer": "/paths/~1configs~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1configs~1{id}/delete/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-dda88aa1e695", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/delete/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-efd752735dee", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-7f33e40bb781", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-47f90e9b7e73", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-111a7e9b3a13", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-1fb2da9a520a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/delete/responses/503/content" + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-1c768a717042", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/delete/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "ID of the config" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the config", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-cb8712014504", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/parameters", + "destinationPointer": "/paths/~1configs~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1configs~1{id}/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-0129ec0c5968", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Config" + }, + "examples": { + "response": { + "value": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + } + } + } + }, + "id": "engine-1.55-e733944cfc5c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + }, + "id": "engine-1.55-ca19bb1e7f44", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Config" + }, + "id": "engine-1.55-8bc62def6af6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-39d313791213", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-2c3f9ce5070e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-f30fc0f5360b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-928f98b6706a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-0b7ccdde7e55", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/get/responses/503/content" + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b3374aa6912e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "type": "string", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/ConfigSpec" + }, + "description": "The spec of the config to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[ConfigInspect endpoint](#operation/ConfigInspect) response values.\n" + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is\nrequired to avoid conflicting writes.\n", + "type": "integer", + "format": "int64", + "required": true + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "id": "engine-1.55-190f6d9c7f27", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/parameters", + "destinationPointer": "/paths/~1configs~1{id}~1update/post/parameters" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "description": "The spec of the config to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[ConfigInspect endpoint](#operation/ConfigInspect) response values.\n" + }, + "id": "engine-1.55-a681c228a234", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/requestBody" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-02fe8450e4fa", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/responses/400/content" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-266cf7fa4c06", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-3b2bf733a2b1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/responses/404/content" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-ffc1c65d1854", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-638532098b9e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-bcae9cb96bea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-2155516dfd28", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/responses/503/content" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-7d9a6dba6c5c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json", + "application/octet-stream" + ], + "id": "engine-1.55-f1f292cc82f1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match\n`/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n", + "type": "string", + "pattern": "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$" + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format `os[/arch[/variant]]` used for image lookup.\n\nWhen specified, the daemon checks if the requested image is present\nin the local image cache with the given OS and Architecture, and\notherwise returns a `404` status.\n\nIf the option is not set, the host's native OS and Architecture are\nused to look up the image in the image cache. However, if no platform\nis passed and the given image does exist in the local image cache,\nbut its OS or architecture does not match, the container is created\nwith the available image, and a warning is added to the `Warnings`\nfield in the response, for example;\n\n WARNING: The requested image's platform (linux/arm64/v8) does not\n match the detected host platform (linux/amd64) and no\n specific platform was requested\n", + "type": "string", + "default": "" + }, + { + "name": "body", + "in": "body", + "description": "Container to create", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/definitions/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/definitions/NetworkingConfig" + } + } + } + ], + "example": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + }, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "HostConfig": { + "Binds": [ + "/tmp:/tmp" + ], + "Links": [ + "redis3:redis" + ], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "NanoCpus": 500000, + "CpuPercent": 80, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuQuota": 50000, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "MemorySwappiness": 60, + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": 0, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "VolumesFrom": [ + "parent", + "other:ro" + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "GroupAdd": [ + "newgroup" + ], + "RestartPolicy": { + "Name": "", + "MaximumRetryCount": 0 + }, + "AutoRemove": true, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [ + {} + ], + "LogConfig": { + "Type": "json-file", + "Config": {} + }, + "SecurityOpt": [], + "StorageOpt": {}, + "CgroupParent": "", + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + } + }, + "required": true + } + ], + "after": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match\n`/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n", + "schema": { + "type": "string", + "pattern": "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format `os[/arch[/variant]]` used for image lookup.\n\nWhen specified, the daemon checks if the requested image is present\nin the local image cache with the given OS and Architecture, and\notherwise returns a `404` status.\n\nIf the option is not set, the host's native OS and Architecture are\nused to look up the image in the image cache. However, if no platform\nis passed and the given image does exist in the local image cache,\nbut its OS or architecture does not match, the container is created\nwith the available image, and a warning is added to the `Warnings`\nfield in the response, for example;\n\n WARNING: The requested image's platform (linux/arm64/v8) does not\n match the detected host platform (linux/amd64) and no\n specific platform was requested\n", + "schema": { + "type": "string", + "default": "" + } + } + ], + "id": "engine-1.55-c4b02c160608", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/parameters", + "destinationPointer": "/paths/~1containers~1create/post/parameters" + }, + { + "pointer": "/paths/~1containers~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-5115ac42e7c7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ], + "example": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + }, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "HostConfig": { + "Binds": [ + "/tmp:/tmp" + ], + "Links": [ + "redis3:redis" + ], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "NanoCpus": 500000, + "CpuPercent": 80, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuQuota": 50000, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "MemorySwappiness": 60, + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": 0, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "VolumesFrom": [ + "parent", + "other:ro" + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "GroupAdd": [ + "newgroup" + ], + "RestartPolicy": { + "Name": "", + "MaximumRetryCount": 0 + }, + "AutoRemove": true, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [ + {} + ], + "LogConfig": { + "Type": "json-file", + "Config": {} + }, + "SecurityOpt": [], + "StorageOpt": {}, + "CgroupParent": "", + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + } + } + }, + "application/octet-stream": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ], + "example": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + }, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "HostConfig": { + "Binds": [ + "/tmp:/tmp" + ], + "Links": [ + "redis3:redis" + ], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "NanoCpus": 500000, + "CpuPercent": 80, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuQuota": 50000, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "MemorySwappiness": 60, + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": 0, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "VolumesFrom": [ + "parent", + "other:ro" + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "GroupAdd": [ + "newgroup" + ], + "RestartPolicy": { + "Name": "", + "MaximumRetryCount": 0 + }, + "AutoRemove": true, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [ + {} + ], + "LogConfig": { + "Type": "json-file", + "Config": {} + }, + "SecurityOpt": [], + "StorageOpt": {}, + "CgroupParent": "", + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + } + } + } + }, + "description": "Container to create", + "required": true + }, + "id": "engine-1.55-60b2911dee5c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/requestBody" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerCreateResponse" + } + } + }, + "id": "engine-1.55-fbfc2de8d0e5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerCreateResponse" + }, + "id": "engine-1.55-41195d80a631", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c08d35b4e9b2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5ddb068e7915", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-92aaaf72d8f9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such image: c2ada9df5af8" + } + }, + "id": "engine-1.55-9e0e0955bfb7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-6458527d284b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b639cb840b13", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/responses/409/content" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b55afdb81a50", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-36b28f480f0d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-cae14ac55eba", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown.\n", + "type": "boolean", + "default": false + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "type": "integer" + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "type": "boolean", + "default": false + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "type": "string" + } + ], + "after": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "schema": { + "type": "integer" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-f644c99f342a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1json/get/parameters", + "destinationPointer": "/paths/~1containers~1json/get/parameters" + }, + { + "pointer": "/paths/~1containers~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-54e59c9541cc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + } + } + }, + "id": "engine-1.55-c3fe6747e2ce", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/ContainerSummary" + } + }, + "id": "engine-1.55-644f10f341f5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1json/get/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-e5d0356eb1b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1json/get/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1json/get/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-f61c5042acb2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1json/get/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-3256cd3c12e6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-f371a69ed2fb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1prune/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-4f2866326eb2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1prune/post/parameters", + "destinationPointer": "/paths/~1containers~1prune/post/parameters" + }, + { + "pointer": "/paths/~1containers~1prune/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-22f190b22176", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1prune/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1prune/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "ContainerPruneResponse", + "properties": { + "ContainersDeleted": { + "description": "Container IDs that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "id": "engine-1.55-1ce3ee2058c8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1prune/post/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1prune/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "ContainerPruneResponse", + "properties": { + "ContainersDeleted": { + "description": "Container IDs that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "id": "engine-1.55-822d1cde498c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1prune/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1prune/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-7b61c637114f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1prune/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1prune/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-7a40afed14de", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1prune/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "v", + "in": "query", + "description": "Remove anonymous volumes associated with the container.", + "type": "boolean", + "default": false + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "type": "boolean", + "default": false + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "v", + "in": "query", + "description": "Remove anonymous volumes associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-f5fc1698546a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/parameters", + "destinationPointer": "/paths/~1containers~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-3c17caef07c6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}/delete/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-19231cc17628", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-88d75e00b47c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-fec3588e153d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-606eddfe5df1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the\ncontainer before attempting removal or force remove\n" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-0be98e5d7a45", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}/delete/responses/409/content" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/409/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the\ncontainer before attempting removal or force remove\n" + } + }, + "id": "engine-1.55-78a4bbe54b3c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/409/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-53b11f656bde", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c63e23df8c66", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-7dfeccf3b27b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-330356353a8b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar" + ], + "id": "engine-1.55-3b333302f892", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-33aefd66537b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-aca125daf808", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-cb57b87d710c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-fcd5fd079a63", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-0ba72ec22340", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6f02bcffef60", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-f1838ee5404e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-34b85fbf9297", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1archive/head/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/200/headers/X-Docker-Container-Path-Stat/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string" + }, + "id": "engine-1.55-578b420a1c10", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/head/responses/200/headers/X-Docker-Container-Path-Stat/schema" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/200/headers/X-Docker-Container-Path-Stat/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.55-960b690d56dd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/200/headers/X-Docker-Container-Path-Stat/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b7181f07703d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d3a423fcd9ee", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-43e81e1269d2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-8e16e9bffb05", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-80088e873ba6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-dc733d5bdc37", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-37b1561da89a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar", + "application/octet-stream" + ], + "id": "engine-1.55-ec27734775ae", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "type": "string" + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If `1`, `true`, or `True` then it will be an error if unpacking the\ngiven content would cause an existing directory to be replaced with\na non-directory and vice versa.\n", + "type": "string" + }, + { + "name": "copyUIDGID", + "in": "query", + "description": "If `1`, `true`, then it will copy UID/GID maps to the dest file or\ndir\n", + "type": "string" + }, + { + "name": "inputStream", + "in": "body", + "required": true, + "description": "The input stream must be a tar archive compressed with one of the\nfollowing algorithms: `identity` (no compression), `gzip`, `bzip2`,\nor `xz`.\n", + "schema": { + "type": "string", + "format": "binary" + } + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "schema": { + "type": "string" + } + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If `1`, `true`, or `True` then it will be an error if unpacking the\ngiven content would cause an existing directory to be replaced with\na non-directory and vice versa.\n", + "schema": { + "type": "string" + } + }, + { + "name": "copyUIDGID", + "in": "query", + "description": "If `1`, `true`, then it will copy UID/GID maps to the dest file or\ndir\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-5e72f2d842ab", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "The input stream must be a tar archive compressed with one of the\nfollowing algorithms: `identity` (no compression), `gzip`, `bzip2`,\nor `xz`.\n", + "required": true + }, + "id": "engine-1.55-a152efa35a73", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/requestBody" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "not a directory" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b6ceed80eb13", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/400/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "not a directory" + } + }, + "id": "engine-1.55-d1fa605a7c33", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/400/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d153a954a289", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-925fe756f71b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/responses/403/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-61b331ca59f7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-ea04271aa3ed", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-6b968d00b395", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-0b65178d8ac2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-4882bbf7d268", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5e52011ced8c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,` or `_`.\n", + "type": "string" + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you\nwant to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been\nreturned, it will seamlessly transition into streaming current\noutput.\n", + "type": "boolean", + "default": false + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards.\n", + "type": "boolean", + "default": false + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "type": "boolean", + "default": false + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "type": "boolean", + "default": false + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you\nwant to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been\nreturned, it will seamlessly transition into streaming current\noutput.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-c9f0066a7d03", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream", + "application/vnd.docker.multiplexed-stream" + ], + "id": "engine-1.55-889a33817cf1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-67ca0955bea5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-25e45ddec94f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-bb6c8d31022a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-440d4207b6be", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-0f85e0d042d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-1a2793dc2eb0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-bb363019b7b5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,`, or `_`.\n", + "type": "string" + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "type": "boolean", + "default": false + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "type": "boolean", + "default": false + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "type": "boolean", + "default": false + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "type": "boolean", + "default": false + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,`, or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-9d1559a12735", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1attach~1ws/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-5c4da09d2193", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-6c59e217d608", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-0532b57c95bf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-1e35b30ff2cc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c9ce1fefffc6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b2a3e92f3d5d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-de3fcc79f135", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-011782ef6fc0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1changes/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-d5e657601354", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilesystemChange" + } + }, + "examples": { + "response": { + "value": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + } + } + } + }, + "id": "engine-1.55-b899592ca978", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1changes/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + }, + "id": "engine-1.55-6f4828c6b2fe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/FilesystemChange" + } + }, + "id": "engine-1.55-2d852d79162c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-2f8aa6ea1716", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1changes/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-dec35553cde0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d09736cd9c89", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-f94de38a58f1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1changes/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8e05f374a590", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-b6efede1c20b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "execConfig", + "in": "body", + "description": "Exec configuration", + "schema": { + "type": "object", + "title": "ExecConfig", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "x-nullable": true, + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is\na single character `[a-Z]` or `ctrl-` where ``\nis one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n" + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside\nthe container. Format is one of: `user`, `user:group`, `uid`,\nor `uid:gid`.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container.\n" + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + }, + "required": true + }, + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "type": "string", + "required": true + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-fbaa5df0c594", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-86c023d72d1a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecConfig", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "ConsoleSize": { + "type": [ + "array", + "null" + ], + "description": "Initial console size, as an `[height, width]` array.", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is\na single character `[a-Z]` or `ctrl-` where ``\nis one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n" + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside\nthe container. Format is one of: `user`, `user:group`, `uid`,\nor `uid:gid`.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container.\n" + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + } + } + }, + "description": "Exec configuration", + "required": true + }, + "id": "engine-1.55-0676170cbb08", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/requestBody" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + }, + "id": "engine-1.55-4928d103aad4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/responses/201/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/IDResponse" + }, + "id": "engine-1.55-5f04ed674380", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-1c7a8f52bd89", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-ae3d05fb595c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-6acda6d38eb6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-61b0aaa0e0ac", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/responses/409/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-fa366925a2b5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-25e2894604a2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-0980eef6fe83", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-99094e09fe3a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1export/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/octet-stream" + ], + "id": "engine-1.55-24a15d82d23e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-a954bbc24403", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1export/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-0acbc0bcdf4c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-39f2b879026d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-93dedce1921d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1export/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c6c666aa8617", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "size", + "in": "query", + "type": "boolean", + "default": false, + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-8481f77717c5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1json/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-f78003dc9efc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerInspectResponse" + } + } + }, + "id": "engine-1.55-6f02409ae59a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerInspectResponse" + }, + "id": "engine-1.55-f6ef7030e7fe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-3dd2e778aa93", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1json/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-a98de3def29f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d43491833903", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-e061766b1597", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-7b450baec93f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "type": "string", + "default": "SIGKILL" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string", + "default": "SIGKILL" + } + } + ], + "id": "engine-1.55-17342e831531", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1kill/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-4540d5006a54", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1kill/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-34e3e1385c5c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-ab2da872c8f1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-44c3f9881e3d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1kill/post/responses/409/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/409/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + }, + "id": "engine-1.55-4083527ba79e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/409/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-774df4580eed", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b397e87b769a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1kill/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-fad706d8795c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "type": "boolean", + "default": false + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "type": "boolean", + "default": false + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "type": "boolean", + "default": false + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "type": "integer", + "default": 0 + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "type": "integer", + "default": 0 + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "type": "boolean", + "default": false + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "type": "string", + "default": "all" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "id": "engine-1.55-4a1d36855066", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1logs/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream", + "application/vnd.docker.multiplexed-stream" + ], + "id": "engine-1.55-3f6609ff8263", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "id": "engine-1.55-d785c277a4e8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1logs/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "format": "binary" + }, + "id": "engine-1.55-5fc6a800628f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-b86632f3ac16", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1logs/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-6abf9da6c001", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-35b8fb2f1c85", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-e8a196595567", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-28a3472dd673", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-52f7663da4d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1pause/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-e1be2d686ffd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1pause/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-b8d75aa3d820", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-864ac589a42b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c86b59824d14", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1pause/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8ec44950f2af", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "name", + "in": "query", + "required": true, + "description": "New name for the container", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "required": true, + "description": "New name for the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-a493e0dbd1fb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1rename/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-1d9bc615597d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1rename/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-45aba7c190d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8320976f83d5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-a42971d21f18", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1rename/post/responses/409/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5e86ce2ab9d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-0cbcdc4578e6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1rename/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-7b5556ab9f07", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/octet-stream" + ], + "id": "engine-1.55-0fbe0b567a12", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "type": "integer" + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "type": "integer" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "id": "engine-1.55-bda31f69cc08", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1resize/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "text/plain" + ], + "id": "engine-1.55-0c329a540bc1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-8731a0279622", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1resize/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-a8f45dd8edc8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-624174097fdb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-828c71b3cfeb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-57962e07318e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "type": "string" + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "type": "integer" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "id": "engine-1.55-3f62c06632b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1restart/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-413d65e76cb4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1restart/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-a9bb60e5ef48", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-abbbb0d367cd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-69c5291e3b51", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1restart/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-368c72ac7aa0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a\nsingle character `[a-Z]` or `ctrl-` where `` is one\nof: `a-z`, `@`, `^`, `[`, `,` or `_`.\n", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a\nsingle character `[a-Z]` or `ctrl-` where `` is one\nof: `a-z`, `@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-cb773c96c9cc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1start/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-cb280e3b0e7c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1start/post/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-6729f98f303c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-56a7d9edf8b5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1start/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-5605ef2e9b10", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-65f40a76210b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-beac7a827bec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1start/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5198b3dad6b2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then\nit will disconnect.\n", + "type": "boolean", + "default": true + }, + { + "name": "one-shot", + "in": "query", + "description": "Only get a single stat instead of waiting for 2 cycles. Must be used\nwith `stream=false`.\n", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then\nit will disconnect.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "one-shot", + "in": "query", + "description": "Only get a single stat instead of waiting for 2 cycles. Must be used\nwith `stream=false`.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-c5f31bb3d7b7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1stats/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-7374d07fa8c6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerStatsResponse" + } + } + }, + "id": "engine-1.55-efe86f4c2d9a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stats/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerStatsResponse" + }, + "id": "engine-1.55-0117d62bf60c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-d29a18b97c2b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stats/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-89d02b8233ea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-db8ac0e42ec6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-257dcd1cab4b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stats/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-09a11146e6bb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "type": "string" + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "type": "integer" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "id": "engine-1.55-c16ab61f71f6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1stop/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-99401963c8c7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stop/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-2db798b84ddd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-9a9702097e1b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-0b2dd7e66168", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stop/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d103b436957d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "type": "string", + "default": "-ef" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "schema": { + "type": "string", + "default": "-ef" + } + } + ], + "id": "engine-1.55-00c1a9603fbb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1top/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerTopResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ContainerTopResponse" + } + } + }, + "id": "engine-1.55-d5f6a75205f7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1top/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerTopResponse" + }, + "id": "engine-1.55-4a3a1e3c7e43", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-f5df11e24249", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1top/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-7f462ce449e9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-3f5571d4fa90", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-7ccfc4bdd179", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1top/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-2afb664269a1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-9e7839856312", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1unpause/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-7fe25d261013", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-b5716f805227", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-9b56d727d07f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-998432c3ca84", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-f682bd8cc1b8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-7a80f3cccc2f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "update", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/definitions/RestartPolicy" + } + } + } + ], + "example": { + "BlkioWeight": 300, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuQuota": 50000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpusetCpus": "0,1", + "CpusetMems": "0", + "Memory": 314572800, + "MemorySwap": 514288000, + "MemoryReservation": 209715200, + "RestartPolicy": { + "MaximumRetryCount": 4, + "Name": "on-failure" + } + } + } + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-b73c868fb1f3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1update/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-d96b1e721872", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + } + } + } + ], + "example": { + "BlkioWeight": 300, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuQuota": 50000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpusetCpus": "0,1", + "CpusetMems": "0", + "Memory": 314572800, + "MemorySwap": 514288000, + "MemoryReservation": 209715200, + "RestartPolicy": { + "MaximumRetryCount": 4, + "Name": "on-failure" + } + } + } + } + }, + "required": true + }, + "id": "engine-1.55-f63467fd47ba", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1update/post/requestBody" + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerUpdateResponse" + } + } + }, + "id": "engine-1.55-f86e0d280855", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1update/post/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerUpdateResponse" + }, + "id": "engine-1.55-e442fb7491cd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-156bea9f530e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1update/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-4c4b08a4a160", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b3eeee7721b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-145442bf1fe9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c8e9a327eeed", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition.\n\nDefaults to `not-running` if omitted or empty.\n", + "type": "string", + "enum": [ + "not-running", + "next-exit", + "removed" + ], + "default": "not-running" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition.\n\nDefaults to `not-running` if omitted or empty.\n", + "schema": { + "type": "string", + "enum": [ + "not-running", + "next-exit", + "removed" + ], + "default": "not-running" + } + } + ], + "id": "engine-1.55-4d65220dda16", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1wait/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-7dda09ca26ba", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerWaitResponse" + } + } + }, + "id": "engine-1.55-e22793a68e88", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1wait/post/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerWaitResponse" + }, + "id": "engine-1.55-cb9775194eb5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-e40e3c9937ed", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1wait/post/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-bf07b1abfc82", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-ed4f5312fdaf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1wait/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.55-89c8696c3594", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-9a629f7a4fb0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-a69e38b97a49", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1wait/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-321e869294ec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "type": "string", + "required": true + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-6483ccd908d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/parameters", + "destinationPointer": "/paths/~1distribution~1{name}~1json/get/parameters" + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-955a0b06b0bc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DistributionInspect" + } + } + }, + "id": "engine-1.55-d3ca92ad9dad", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1distribution~1{name}~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/DistributionInspect" + }, + "id": "engine-1.55-cfdbdca55cb8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/401/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: someimage (tag: latest)" + } + } + } + } + }, + "id": "engine-1.55-6ed09bd70b1f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1distribution~1{name}~1json/get/responses/401/content" + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/401/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such image: someimage (tag: latest)" + } + }, + "id": "engine-1.55-85cb5b25b560", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/responses/401/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/401/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-e3dc8b75b320", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/responses/401/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-890633823c3d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1distribution~1{name}~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-71ecd61a9dad", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "type": "string" + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "type": "string" + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "type": "string" + } + ], + "after": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "schema": { + "type": "string" + } + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-3d125c08e806", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/parameters", + "destinationPointer": "/paths/~1events/get/parameters" + }, + { + "pointer": "/paths/~1events/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/jsonl", + "application/x-ndjson", + "application/json-seq" + ], + "id": "engine-1.55-7b1d309e772a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + } + }, + "id": "engine-1.55-280faeda8023", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1events/get/responses/200/content" + }, + { + "pointer": "/paths/~1events/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/EventMessage" + }, + "id": "engine-1.55-7c5846cfd490", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-3614dbfd5bf7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1events/get/responses/400/content" + }, + { + "pointer": "/paths/~1events/get/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-622fa7366226", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-d7f8de57aa3b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1events/get/responses/500/content" + }, + { + "pointer": "/paths/~1events/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-62ac743ae22f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-8074db9c1d82", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/parameters", + "destinationPointer": "/paths/~1exec~1{id}~1json/get/parameters" + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-059c95efc5c1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecInspectResponse", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/components/schemas/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "examples": { + "response": { + "value": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + } + } + } + }, + "id": "engine-1.55-34b0a96830dd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + }, + "id": "engine-1.55-0aa2f9059007", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "ExecInspectResponse", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/definitions/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "id": "engine-1.55-81843fd0d67f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-16599e0fa663", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1json/get/responses/404/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b0c4b8b6855f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-5af5ca649729", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8a95247f5d57", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "type": "string" + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "type": "integer" + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "type": "integer" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "id": "engine-1.55-d708e19a3377", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/parameters", + "destinationPointer": "/paths/~1exec~1{id}~1resize/post/parameters" + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-4be53c0db121", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1resize/post/responses/400/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-4278bbba264b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-a685136e670d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1resize/post/responses/404/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8503da4d1c28", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-f32b17cacbe1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1resize/post/responses/500/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b0306a787282", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-4b51abcdaf49", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "execStartConfig", + "in": "body", + "schema": { + "type": "object", + "title": "ExecStartConfig", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command.", + "example": false + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY.", + "example": true + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "x-nullable": true, + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + } + } + } + }, + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-f8006de017fe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/parameters", + "destinationPointer": "/paths/~1exec~1{id}~1start/post/parameters" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream", + "application/vnd.docker.multiplexed-stream" + ], + "id": "engine-1.55-e044d8d697b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecStartConfig", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command.", + "example": false + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY.", + "example": true + }, + "ConsoleSize": { + "type": [ + "array", + "null" + ], + "description": "Initial console size, as an `[height, width]` array.", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + } + } + } + } + } + }, + "id": "engine-1.55-bfe155443f15", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1start/post/requestBody" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-4e713ebfbf4e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1start/post/responses/404/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-1a2e4f9adca1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-bb9daa66c222", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1start/post/responses/409/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c1bb21d3de7f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "text/plain", + "application/octet-stream" + ], + "id": "engine-1.55-a16ed0040f46", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1create/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. If the name includes a tag or digest, specific behavior applies:\n\n- If only `fromImage` includes a tag, that tag is used.\n- If both `fromImage` and `tag` are provided, `tag` takes precedence.\n- If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored.\n- If neither a tag nor digest is specified, all tags are pulled.\n", + "type": "string" + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "type": "string" + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "type": "string" + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "type": "string" + }, + { + "name": "message", + "in": "query", + "description": "Set commit message for imported image.", + "type": "string" + }, + { + "name": "inputImage", + "in": "body", + "description": "Image content if the value `-` has been specified in fromSrc query parameter", + "schema": { + "type": "string" + }, + "required": false + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string" + }, + { + "name": "changes", + "in": "query", + "description": "Apply `Dockerfile` instructions to the image that is created,\nfor example: `changes=ENV DEBUG=true`.\nNote that `ENV DEBUG=true` should be URI component encoded.\n\nSupported `Dockerfile` instructions:\n`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`\n", + "type": "array", + "items": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]].\n\nWhen used in combination with the `fromImage` option, the daemon checks\nif the given image is present in the local image cache with the given\nOS and Architecture, and otherwise attempts to pull the image. If the\noption is not set, the host's native OS and Architecture are used.\nIf the given image does not exist in the local image cache, the daemon\nattempts to pull the image with the host's native OS and Architecture.\nIf the given image does exists in the local image cache, but its OS or\narchitecture does not match, a warning is produced.\n\nWhen used with the `fromSrc` option to import an image from an archive,\nthis option sets the platform information for the imported image. If\nthe option is not set, the host's native OS and Architecture are used\nfor the imported image.\n", + "type": "string", + "default": "" + } + ], + "after": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. If the name includes a tag or digest, specific behavior applies:\n\n- If only `fromImage` includes a tag, that tag is used.\n- If both `fromImage` and `tag` are provided, `tag` takes precedence.\n- If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored.\n- If neither a tag nor digest is specified, all tags are pulled.\n", + "schema": { + "type": "string" + } + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "schema": { + "type": "string" + } + }, + { + "name": "message", + "in": "query", + "description": "Set commit message for imported image.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + }, + { + "name": "changes", + "in": "query", + "description": "Apply `Dockerfile` instructions to the image that is created,\nfor example: `changes=ENV DEBUG=true`.\nNote that `ENV DEBUG=true` should be URI component encoded.\n\nSupported `Dockerfile` instructions:\n`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]].\n\nWhen used in combination with the `fromImage` option, the daemon checks\nif the given image is present in the local image cache with the given\nOS and Architecture, and otherwise attempts to pull the image. If the\noption is not set, the host's native OS and Architecture are used.\nIf the given image does not exist in the local image cache, the daemon\nattempts to pull the image with the host's native OS and Architecture.\nIf the given image does exists in the local image cache, but its OS or\narchitecture does not match, a warning is produced.\n\nWhen used with the `fromSrc` option to import an image from an archive,\nthis option sets the platform information for the imported image. If\nthe option is not set, the host's native OS and Architecture are used\nfor the imported image.\n", + "schema": { + "type": "string", + "default": "" + } + } + ], + "id": "engine-1.55-02d325ce8597", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1create/post/parameters", + "destinationPointer": "/paths/~1images~1create/post/parameters" + }, + { + "pointer": "/paths/~1images~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-b1012bb6775d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/octet-stream": { + "schema": { + "type": "string" + } + } + }, + "description": "Image content if the value `-` has been specified in fromSrc query parameter" + }, + "id": "engine-1.55-4b5586c67408", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1create/post/requestBody" + }, + { + "pointer": "/paths/~1images~1create/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-d17b646c42d9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1create/post/responses/404/content" + }, + { + "pointer": "/paths/~1images~1create/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-377aba9a40f9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1create/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-7dd7880d963e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1images~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-6e1266a91ac4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1get/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "type": "array", + "items": { + "type": "string" + } + }, + { + "name": "platform", + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to be saved if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n" + } + ], + "after": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to be saved if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "id": "engine-1.55-86f99b31744b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1get/get/parameters", + "destinationPointer": "/paths/~1images~1get/get/parameters" + }, + { + "pointer": "/paths/~1images~1get/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar" + ], + "id": "engine-1.55-97cb03f4d3e4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1get/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1get/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "id": "engine-1.55-bd919cffe156", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1get/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1get/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "format": "binary" + }, + "id": "engine-1.55-f6a9651d055c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1get/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1get/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-f9b39efb1886", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1get/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1get/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b594f72d1377", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1get/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "type": "boolean", + "default": false + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the images list.\n\nAvailable filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n- `until=`\n", + "type": "string" + }, + { + "name": "shared-size", + "in": "query", + "description": "Compute and show shared size as a `SharedSize` field on each image.", + "type": "boolean", + "default": false + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "type": "boolean", + "default": false + }, + { + "name": "manifests", + "in": "query", + "description": "Include `Manifests` in the image summary.", + "type": "boolean", + "default": false + }, + { + "name": "identity", + "in": "query", + "description": "Include `Identity` in each manifest summary. Requires `manifests=1`.", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the images list.\n\nAvailable filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n- `until=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "shared-size", + "in": "query", + "description": "Compute and show shared size as a `SharedSize` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "manifests", + "in": "query", + "description": "Include `Manifests` in the image summary.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "identity", + "in": "query", + "description": "Include `Identity` in each manifest summary. Requires `manifests=1`.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-43d88e968bfe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1json/get/parameters", + "destinationPointer": "/paths/~1images~1json/get/parameters" + }, + { + "pointer": "/paths/~1images~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-447fccb4c87c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + } + } + }, + "id": "engine-1.55-3d26ae44b29a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/ImageSummary" + } + }, + "id": "engine-1.55-729b69749059", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-40c20f9c0957", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-97d9ba88dd48", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1load/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar" + ], + "id": "engine-1.55-9ba33bcd070c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1load/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1load/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "imagesTarball", + "in": "body", + "description": "Tar archive containing images", + "schema": { + "type": "string", + "format": "binary" + } + }, + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "type": "boolean", + "default": false + }, + { + "name": "platform", + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to load if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be loaded.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n" + } + ], + "after": [ + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to load if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be loaded.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "id": "engine-1.55-c02f4bf1a462", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1load/post/parameters", + "destinationPointer": "/paths/~1images~1load/post/parameters" + }, + { + "pointer": "/paths/~1images~1load/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-71bf775726ea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1load/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1load/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "Tar archive containing images" + }, + "id": "engine-1.55-085b0d930a2f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1load/post/requestBody" + }, + { + "pointer": "/paths/~1images~1load/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-572f19b9edf7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1load/post/responses/500/content" + }, + { + "pointer": "/paths/~1images~1load/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-f37ce6ec20c2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1load/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1prune/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-feff182e2a3f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1prune/post/parameters", + "destinationPointer": "/paths/~1images~1prune/post/parameters" + }, + { + "pointer": "/paths/~1images~1prune/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-3be4a26ea1cd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1prune/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1prune/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "ImagePruneResponse", + "properties": { + "ImagesDeleted": { + "description": "Images that were deleted", + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "id": "engine-1.55-d4abb18f4a7e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1prune/post/responses/200/content" + }, + { + "pointer": "/paths/~1images~1prune/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "ImagePruneResponse", + "properties": { + "ImagesDeleted": { + "description": "Images that were deleted", + "type": "array", + "items": { + "$ref": "#/definitions/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "id": "engine-1.55-ba43548bdad3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1prune/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1prune/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c24a3983163e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1prune/post/responses/500/content" + }, + { + "pointer": "/paths/~1images~1prune/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-97152ed9f208", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1prune/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1search/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "type": "string", + "required": true + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "type": "integer" + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n", + "type": "string" + } + ], + "after": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "schema": { + "type": "integer" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-c4f90bc260a1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/parameters", + "destinationPointer": "/paths/~1images~1search/get/parameters" + }, + { + "pointer": "/paths/~1images~1search/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-3c1949a368e0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1search/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "title": "ImageSearchResponseItem", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "description": "Whether this repository has automated builds enabled.\n\n\n\n\n\n\n> **Deprecated**: This field is deprecated and will always be \"false\".\n", + "type": "boolean", + "example": false + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "examples": { + "response": { + "value": [ + { + "description": "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!", + "is_official": true, + "is_automated": false, + "name": "alpine", + "star_count": 10093 + }, + { + "description": "Busybox base image.", + "is_official": true, + "is_automated": false, + "name": "Busybox base image.", + "star_count": 3037 + }, + { + "description": "The PostgreSQL object-relational database system provides reliability and data integrity.", + "is_official": true, + "is_automated": false, + "name": "postgres", + "star_count": 12408 + } + ] + } + } + } + }, + "id": "engine-1.55-88e7ddc3b122", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1search/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1search/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": [ + { + "description": "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!", + "is_official": true, + "is_automated": false, + "name": "alpine", + "star_count": 10093 + }, + { + "description": "Busybox base image.", + "is_official": true, + "is_automated": false, + "name": "Busybox base image.", + "star_count": 3037 + }, + { + "description": "The PostgreSQL object-relational database system provides reliability and data integrity.", + "is_official": true, + "is_automated": false, + "name": "postgres", + "star_count": 12408 + } + ] + }, + "id": "engine-1.55-5ef160af7546", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1search/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "type": "object", + "title": "ImageSearchResponseItem", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "description": "Whether this repository has automated builds enabled.\n\n


\n\n> **Deprecated**: This field is deprecated and will always be \"false\".\n", + "type": "boolean", + "example": false + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "id": "engine-1.55-5bf7b95d4f45", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1search/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-7b19ad83d13f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1search/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1search/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-feba326217a4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "type": "string", + "required": true + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "type": "boolean", + "default": false + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "type": "boolean", + "default": false + }, + { + "name": "platforms", + "in": "query", + "description": "Select platform-specific content to delete.\nMultiple values are accepted.\nEach platform is a OCI platform encoded as a JSON string.\n", + "type": "array", + "items": { + "type": "string" + } + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platforms", + "in": "query", + "description": "Select platform-specific content to delete.\nMultiple values are accepted.\nEach platform is a OCI platform encoded as a JSON string.\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "id": "engine-1.55-d6ccd4a4532d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/parameters", + "destinationPointer": "/paths/~1images~1{name}/delete/parameters" + }, + { + "pointer": "/paths/~1images~1{name}/delete/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-7b4c2900f563", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "examples": { + "response": { + "value": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + } + } + } + }, + "id": "engine-1.55-b8179a19bd9e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}/delete/responses/200/content" + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + }, + "id": "engine-1.55-b95fcea523ad", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/ImageDeleteResponseItem" + } + }, + "id": "engine-1.55-910d34102b44", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-7c4782c93281", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-35fba62fb4d2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-0ed32225084e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}/delete/responses/409/content" + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-4e6e0fb558c4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-0b9baa814d9d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-37aea11cc982", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "type": "string", + "required": true + }, + { + "name": "platform", + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "in": "query", + "description": "JSON-encoded OCI platform to select the image variant whose\nattestations to return.\nIf omitted, the daemon's default (host) platform is used.\n\nOnly one platform value is currently accepted; passing more than\none returns an error. The parameter is declared as an array so the\nwire shape can accept multiple values in the future without an\nAPI version bump.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"amd64\"}`", + "required": false + }, + { + "name": "type", + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "in": "query", + "description": "In-toto predicate type URI to filter returned statements. May be\nrepeated to accept any of several predicate types. If omitted, all\nstatements are returned.\n\nExample: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document`", + "required": false + }, + { + "name": "statement", + "type": "boolean", + "in": "query", + "description": "Include the verbatim in-toto statement body in each returned\nentry. Defaults to false; when omitted or false, only the\ndescriptor and predicate type are returned and statement blobs\nare not read.", + "default": false, + "required": false + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the image variant whose\nattestations to return.\nIf omitted, the daemon's default (host) platform is used.\n\nOnly one platform value is currently accepted; passing more than\none returns an error. The parameter is declared as an array so the\nwire shape can accept multiple values in the future without an\nAPI version bump.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"amd64\"}`", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "type", + "in": "query", + "description": "In-toto predicate type URI to filter returned statements. May be\nrepeated to accept any of several predicate types. If omitted, all\nstatements are returned.\n\nExample: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document`", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "statement", + "in": "query", + "description": "Include the verbatim in-toto statement body in each returned\nentry. Defaults to false; when omitted or false, only the\ndescriptor and predicate type are returned and statement blobs\nare not read.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-5aff6031fe4f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/parameters", + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-0e1ae53f0dbd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AttestationStatement" + } + } + } + }, + "id": "engine-1.55-c48d65c6ee65", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/AttestationStatement" + } + }, + "id": "engine-1.55-88d44da8bd17", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-7081db4dba5f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/responses/400/content" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d2523049b60f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-1ab5facf158d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-6c8188501f64", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-914386322e85", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d7cea8e65555", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/501/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c4f97b58852a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/responses/501/content" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/501/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5ac46137b299", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/responses/501/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "type": "string", + "required": true + }, + { + "name": "platform", + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "in": "query", + "description": "JSON encoded OCI platform describing a platform which will be used\nto select a platform-specific image to be saved if the image is\nmulti-platform.\nIf not provided, the full multi-platform image will be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform describing a platform which will be used\nto select a platform-specific image to be saved if the image is\nmulti-platform.\nIf not provided, the full multi-platform image will be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "id": "engine-1.55-af7853f8bc6b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1get/get/parameters", + "destinationPointer": "/paths/~1images~1{name}~1get/get/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar" + ], + "id": "engine-1.55-2244e0334299", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1get/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "id": "engine-1.55-0a74908d8371", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1get/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "format": "binary" + }, + "id": "engine-1.55-552cf6d20585", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1get/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-2a96ed6f3ae7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1get/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-484df107a7f7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1get/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "type": "string", + "required": true + }, + { + "name": "platform", + "type": "string", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show the history for. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show the history for. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-3fb71168d49a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/parameters", + "destinationPointer": "/paths/~1images~1{name}~1history/get/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-a0c5aaef92c9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageHistoryResponseItem" + } + }, + "examples": { + "response": { + "value": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + } + } + } + }, + "id": "engine-1.55-44b3a3e53b68", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1history/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + }, + "id": "engine-1.55-bd698703e867", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/ImageHistoryResponseItem" + } + }, + "id": "engine-1.55-1d8a9bb58fdd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-a95ca59fe8f1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1history/get/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-97eb6076f471", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-e490000cf6ef", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1history/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-41f9fcadba34", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "type": "string", + "required": true + }, + { + "name": "manifests", + "in": "query", + "description": "Include Manifests in the image summary.\n\nThe `manifests` and `platform` options are mutually exclusive, and\nan error is produced if both are set.", + "type": "boolean", + "default": false, + "required": false + }, + { + "name": "platform", + "type": "string", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show inspect. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nThe `platform` and `manifests` options are mutually exclusive, and\nan error is produced if both are set.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "manifests", + "in": "query", + "description": "Include Manifests in the image summary.\n\nThe `manifests` and `platform` options are mutually exclusive, and\nan error is produced if both are set.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show inspect. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nThe `platform` and `manifests` options are mutually exclusive, and\nan error is produced if both are set.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-3f0ba7e758bf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/parameters", + "destinationPointer": "/paths/~1images~1{name}~1json/get/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-8578a15f6414", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageInspect" + } + } + }, + "id": "engine-1.55-0603c5898139", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ImageInspect" + }, + "id": "engine-1.55-28165ebb52e7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: someimage (tag: latest)" + } + } + } + } + }, + "id": "engine-1.55-d93299a2bb5c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1json/get/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such image: someimage (tag: latest)" + } + }, + "id": "engine-1.55-5a4f3f544db1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-34adb2439830", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b4654a3adaaf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-2f38dc6a4e90", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/octet-stream" + ], + "id": "engine-1.55-c25e105f4118", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Name of the image to push. For example, `registry.example.com/myimage`.\nThe image must be present in the local image store with the same name.\n\nThe name should be provided without tag; if a tag is provided, it\nis ignored. For example, `registry.example.com/myimage:latest` is\nconsidered equivalent to `registry.example.com/myimage`.\n\nUse the `tag` parameter to specify the tag to push.\n", + "type": "string", + "required": true + }, + { + "name": "tag", + "in": "query", + "description": "Tag of the image to push. For example, `latest`. If no tag is provided,\nall tags of the given image that are present in the local image store\nare pushed.\n", + "type": "string" + }, + { + "name": "platform", + "type": "string", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant to push.\nIf not provided, all available variants will attempt to be pushed.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to push to the registry. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n" + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string", + "required": true + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Name of the image to push. For example, `registry.example.com/myimage`.\nThe image must be present in the local image store with the same name.\n\nThe name should be provided without tag; if a tag is provided, it\nis ignored. For example, `registry.example.com/myimage:latest` is\nconsidered equivalent to `registry.example.com/myimage`.\n\nUse the `tag` parameter to specify the tag to push.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag of the image to push. For example, `latest`. If no tag is provided,\nall tags of the given image that are present in the local image store\nare pushed.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant to push.\nIf not provided, all available variants will attempt to be pushed.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to push to the registry. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-607c30e901b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/parameters", + "destinationPointer": "/paths/~1images~1{name}~1push/post/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-1a7de6b06664", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1push/post/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-db4a5abe4be2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-5d8aed18511b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1push/post/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-33df340f5788", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "type": "string", + "required": true + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "type": "string" + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "type": "string" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-d8486c5ba6be", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/parameters", + "destinationPointer": "/paths/~1images~1{name}~1tag/post/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-fec682264052", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1tag/post/responses/400/content" + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-081de71a1663", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-5d5ed461deb2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1tag/post/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d9534b160b1f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-2d2e0e32754e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1tag/post/responses/409/content" + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-afe746832fcb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-2c9536e20dfe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1tag/post/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c534cc5e64ec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1info/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-3be1b9973809", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1info/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1info/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemInfo" + } + } + }, + "id": "engine-1.55-c79fa00af0b7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1info/get/responses/200/content" + }, + { + "pointer": "/paths/~1info/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/SystemInfo" + }, + "id": "engine-1.55-44e9d72f71b0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1info/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1info/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6a69db0b9bc3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1info/get/responses/500/content" + }, + { + "pointer": "/paths/~1info/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d930557b6fc1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1info/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process\non the networks list.\n\nAvailable filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n networks that are not in use by a container. When set to `false`\n (or `0`), only networks that are in use by one or more\n containers are returned.\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process\non the networks list.\n\nAvailable filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n networks that are not in use by a container. When set to `false`\n (or `0`), only networks that are in use by one or more\n containers are returned.\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-cb9e07e9e297", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks/get/parameters", + "destinationPointer": "/paths/~1networks/get/parameters" + }, + { + "pointer": "/paths/~1networks/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-6abf102a9c64", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkSummary" + } + }, + "examples": { + "response": { + "value": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv4": true, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + } + } + } + }, + "id": "engine-1.55-692cc4dacbca", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks/get/responses/200/content" + }, + { + "pointer": "/paths/~1networks/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv4": true, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + }, + "id": "engine-1.55-244189637d80", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/NetworkSummary" + } + }, + "id": "engine-1.55-54186c12c913", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-de10d657632d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks/get/responses/500/content" + }, + { + "pointer": "/paths/~1networks/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b9fe4ce5786e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-f60491e9957f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "networkConfig", + "in": "body", + "description": "Network configuration", + "required": true, + "schema": { + "type": "object", + "title": "NetworkCreateRequest", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "The network's name.", + "type": "string", + "example": "my_network" + }, + "Driver": { + "description": "Name of the network driver plugin to use.", + "type": "string", + "default": "bridge", + "example": "bridge" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level).\n", + "type": "string" + }, + "Internal": { + "description": "Restrict external access to the network.", + "type": "boolean" + }, + "Attachable": { + "description": "Globally scoped network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "example": true + }, + "Ingress": { + "description": "Ingress network is the network which provides the routing-mesh\nin swarm mode.\n", + "type": "boolean", + "example": false + }, + "ConfigOnly": { + "description": "Creates a config-only network. Config-only networks are placeholder\nnetworks for network configurations to be used by other networks.\nConfig-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "default": false, + "example": false + }, + "ConfigFrom": { + "description": "Specifies the source which will provide the configuration for\nthis network. The specified network must be an existing\nconfig-only network; see ConfigOnly.\n", + "$ref": "#/definitions/ConfigReference" + }, + "IPAM": { + "description": "Optional custom IP scheme for the network.", + "$ref": "#/definitions/IPAM" + }, + "EnableIPv4": { + "description": "Enable IPv4 on the network.", + "type": "boolean", + "example": true + }, + "EnableIPv6": { + "description": "Enable IPv6 on the network.", + "type": "boolean", + "example": true + }, + "Options": { + "description": "Network specific options to be used by the drivers.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + } + ], + "id": "engine-1.55-fbd8601a51dd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-8c09ceceefb4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "NetworkCreateRequest", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "The network's name.", + "type": "string", + "example": "my_network" + }, + "Driver": { + "description": "Name of the network driver plugin to use.", + "type": "string", + "default": "bridge", + "example": "bridge" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level).\n", + "type": "string" + }, + "Internal": { + "description": "Restrict external access to the network.", + "type": "boolean" + }, + "Attachable": { + "description": "Globally scoped network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "example": true + }, + "Ingress": { + "description": "Ingress network is the network which provides the routing-mesh\nin swarm mode.\n", + "type": "boolean", + "example": false + }, + "ConfigOnly": { + "description": "Creates a config-only network. Config-only networks are placeholder\nnetworks for network configurations to be used by other networks.\nConfig-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "default": false, + "example": false + }, + "ConfigFrom": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigReference" + }, + { + "description": "Specifies the source which will provide the configuration for\nthis network. The specified network must be an existing\nconfig-only network; see ConfigOnly.\n" + } + ] + }, + "IPAM": { + "allOf": [ + { + "$ref": "#/components/schemas/IPAM" + }, + { + "description": "Optional custom IP scheme for the network." + } + ] + }, + "EnableIPv4": { + "description": "Enable IPv4 on the network.", + "type": "boolean", + "example": true + }, + "EnableIPv6": { + "description": "Enable IPv6 on the network.", + "type": "boolean", + "example": true + }, + "Options": { + "description": "Network specific options to be used by the drivers.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + } + }, + "description": "Network configuration", + "required": true + }, + "id": "engine-1.55-46390cb65764", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/requestBody" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkCreateResponse" + } + } + }, + "id": "engine-1.55-94f958bc4bf0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/NetworkCreateResponse" + }, + "id": "engine-1.55-4ed4611acf60", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-ccee151f5a81", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/responses/400/content" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-a7ce53a737b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-ed8e7b074898", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/responses/403/content" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5f90abc9a5c1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-192f7649fc70", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/responses/404/content" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5b3306c4935b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-98fc72908355", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-a19ba1caae5b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1prune/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-8d54fc769f9b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1prune/post/parameters", + "destinationPointer": "/paths/~1networks~1prune/post/parameters" + }, + { + "pointer": "/paths/~1networks~1prune/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-9714f340eed8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1prune/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1prune/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "NetworkPruneResponse", + "properties": { + "NetworksDeleted": { + "description": "Networks that were deleted", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "id": "engine-1.55-c5793b25b78e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1prune/post/responses/200/content" + }, + { + "pointer": "/paths/~1networks~1prune/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "NetworkPruneResponse", + "properties": { + "NetworksDeleted": { + "description": "Networks that were deleted", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "id": "engine-1.55-ebdc78b7ca6b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1prune/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1prune/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6ee86c48ab12", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1prune/post/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1prune/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-72e6afec6354", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1prune/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-77472283eb60", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/parameters", + "destinationPointer": "/paths/~1networks~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-47c235afb9f6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/delete/responses/403/content" + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-91023e841152", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6cb852e39bc0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-215597a3b0f7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c705b3ea93bd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-68675dcbee7e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "type": "string" + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "type": "boolean", + "default": false + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-90e5e337fa74", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/get/parameters", + "destinationPointer": "/paths/~1networks~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1networks~1{id}/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-fca9d1e20925", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkInspect" + } + } + }, + "id": "engine-1.55-1f6c394c3a3e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/NetworkInspect" + }, + "id": "engine-1.55-1abdb85496f8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c5eca0a16010", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5326031809db", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-11b909cffa03", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d0063f050ef8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-f2d81f9be52c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "type": "string" + }, + { + "name": "container", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/NetworkConnectRequest" + } + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-2edd7193d3dd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/parameters", + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/parameters" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkConnectRequest" + } + } + }, + "required": true + }, + "id": "engine-1.55-2f1b13820bd8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/requestBody" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-087acd571555", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/responses/400/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-bb5c4ae8aef3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-2870549ca39b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/responses/403/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8da3f40cf30c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-3a1c79e3fe3b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/responses/404/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-6434d115ccee", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-99d263005f5b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-57add2bbc914", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-59d5d3f41578", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "type": "string" + }, + { + "name": "container", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/NetworkDisconnectRequest" + } + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-a80d7bf6b3d9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/parameters", + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/parameters" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkDisconnectRequest" + } + } + }, + "required": true + }, + "id": "engine-1.55-858a70e19498", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/requestBody" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-9cc6f27a2325", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-456d27e28d41", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-becafa604761", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-1fac4a3785a5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-8949bd871487", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-2fbf4f0f3c09", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `node.label=`\n- `role=`(`manager`|`worker`)`\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `node.label=`\n- `role=`(`manager`|`worker`)`\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-5bcbfcc84545", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/parameters", + "destinationPointer": "/paths/~1nodes/get/parameters" + }, + { + "pointer": "/paths/~1nodes/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + } + }, + "id": "engine-1.55-971b9a53edce", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes/get/responses/200/content" + }, + { + "pointer": "/paths/~1nodes/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Node" + } + }, + "id": "engine-1.55-e6f10b2b1197", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-2e20008df797", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes/get/responses/500/content" + }, + { + "pointer": "/paths/~1nodes/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d094a325376e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-a40767dcd9c8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes/get/responses/503/content" + }, + { + "pointer": "/paths/~1nodes/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b8fbf812648c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "type": "string", + "required": true + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "default": false, + "type": "boolean" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-bfa5ff16cd35", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/parameters", + "destinationPointer": "/paths/~1nodes~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-407606e7fa93", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-84b69be58b4f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c924849db92d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-4a688a4169cd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-710e4e65db4e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/delete/responses/503/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-bea41eb5eddf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "type": "string", + "required": true + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-a3f1ec012696", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/parameters", + "destinationPointer": "/paths/~1nodes~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Node" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Node" + } + } + }, + "id": "engine-1.55-e9d46af2f54d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Node" + }, + "id": "engine-1.55-a3f69e7d9360", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-1013ad0a99b0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-ac142fb7b6c5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-a8a267782b39", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-643a744346f4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b92f97e0291e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/get/responses/503/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c4dc6945d151", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "type": "string", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/NodeSpec" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required\nto avoid conflicting writes.\n", + "type": "integer", + "format": "int64", + "required": true + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required\nto avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "id": "engine-1.55-d6d56e0fddcb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/parameters", + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/parameters" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + } + } + }, + "id": "engine-1.55-be5adf7055bd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/requestBody" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-a064946502da", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/responses/400/content" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d522e50b32b6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-e59f47e3866c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/responses/404/content" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c9716cca11d2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6e6b9c704f33", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-6da79c89cc7e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6045b5506528", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/responses/503/content" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-147429cca3e6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the plugin list.\n\nAvailable filters:\n\n- `capability=`\n- `enable=|`\n" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the plugin list.\n\nAvailable filters:\n\n- `capability=`\n- `enable=|`\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-f51ae0c31fc6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins/get/parameters", + "destinationPointer": "/paths/~1plugins/get/parameters" + }, + { + "pointer": "/paths/~1plugins/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-67b596b9549d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "id": "engine-1.55-84ddbf4b05b1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins/get/responses/200/content" + }, + { + "pointer": "/paths/~1plugins/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Plugin" + } + }, + "id": "engine-1.55-f701c3436e5a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-75084ae63339", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins/get/responses/500/content" + }, + { + "pointer": "/paths/~1plugins/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-a2368cdb4709", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar" + ], + "id": "engine-1.55-a939d62d112c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1create/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "tarContext", + "in": "body", + "description": "Path to tar containing plugin rootfs and manifest", + "schema": { + "type": "string", + "format": "binary" + } + } + ], + "after": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-025ac6ed5424", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1create/post/parameters", + "destinationPointer": "/paths/~1plugins~1create/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "Path to tar containing plugin rootfs and manifest" + }, + "id": "engine-1.55-b501d7b0e808", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1create/post/requestBody" + }, + { + "pointer": "/paths/~1plugins~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-13173e95e2bf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-31568c120353", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1privileges/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-53b21e2fdf25", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1privileges/get/parameters", + "destinationPointer": "/paths/~1plugins~1privileges/get/parameters" + }, + { + "pointer": "/paths/~1plugins~1privileges/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + }, + "id": "engine-1.55-0e6383481e17", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1privileges/get/responses/200/content" + }, + { + "pointer": "/paths/~1plugins~1privileges/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + }, + "id": "engine-1.55-71417ff08b62", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1privileges/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1privileges/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c9eee629aebf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1privileges/get/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1privileges/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-3d171b44527c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1privileges/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1pull/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": false, + "type": "string" + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + ], + "after": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-6f3a898d1781", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1pull/post/parameters", + "destinationPointer": "/paths/~1plugins~1pull/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1pull/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-0c42897be0fb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1pull/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1pull/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "$ref": "#/components/requestBodies/PluginPrivilegeArray" + }, + "id": "engine-1.55-3e0adfa5dae2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1pull/post/requestBody" + }, + { + "pointer": "/paths/~1plugins~1pull/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-e20f2e799edd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1pull/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1pull/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-0f1d12c206a6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1pull/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the\nplugin is in use by a container.\n", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the\nplugin is in use by a container.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-6eef25d1e2c9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/parameters", + "destinationPointer": "/paths/~1plugins~1{name}/delete/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + }, + "id": "engine-1.55-e941027cce19", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}/delete/responses/200/content" + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Plugin" + }, + "id": "engine-1.55-bb57b024030a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-d0632ffe7a5b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d68ad8defc67", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-d6f43c701d77", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d9a179e3afcc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "force", + "in": "query", + "description": "Force disable a plugin even if still in use.\n", + "required": false, + "type": "boolean" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force disable a plugin even if still in use.\n", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "id": "engine-1.55-308d5e3911db", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1disable/post/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1disable/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-0e9d42796c82", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-01a271d170e6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-642710fcb346", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-df03e93b3931", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "type": "integer", + "default": 0 + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "schema": { + "type": "integer", + "default": 0 + } + } + ], + "id": "engine-1.55-0a417f3c4bf5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1enable/post/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1enable/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-37c507ef2ff9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-10cbdc4e2310", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-e8a03331e6c7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-557e4202e16a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-9bbf3b93b1f3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1json/get/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + }, + "id": "engine-1.55-921081768fac", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Plugin" + }, + "id": "engine-1.55-44b35b17dae5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-1599be2abed2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1json/get/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-0315523cbf90", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-466c83dce093", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c6ce204c102e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-f8c9c7da3ffa", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1push/post/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1push/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-fe85099c6226", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1push/post/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-41fb98a7e7a4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1push/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-1118eb971001", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1push/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-76a4ea16ef9e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1push/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-3dc2c5519851", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=1" + ] + } + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-5e2e62492f04", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1set/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=1" + ] + } + } + } + }, + "id": "engine-1.55-d67097f75580", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1set/post/requestBody" + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b00f5ddde1ee", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1set/post/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-dbd84682aa4e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-66867a073186", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1set/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b38ff3ddcf0e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-26395c9d1df0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1upgrade/post/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1upgrade/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "$ref": "#/components/requestBodies/PluginPrivilegeArray" + }, + "id": "engine-1.55-8b8bd3aa06bb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1upgrade/post/requestBody" + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6076ad738f1b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-a02b234801e7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-4c9e5f935654", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-059fc20dca5b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the secrets list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a secret name (prefix match)\n- `names=` matches a secret name (exact match)\n" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the secrets list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a secret name (prefix match)\n- `names=` matches a secret name (exact match)\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-478769609b6d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets/get/parameters", + "destinationPointer": "/paths/~1secrets/get/parameters" + }, + { + "pointer": "/paths/~1secrets/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-2f3cfc5de0c3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Secret" + }, + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "id": "engine-1.55-ea794a078f16", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets/get/responses/200/content" + }, + { + "pointer": "/paths/~1secrets/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Secret" + }, + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ] + }, + "id": "engine-1.55-fa1bf2816cfa", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-105b73c83eff", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets/get/responses/500/content" + }, + { + "pointer": "/paths/~1secrets/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-2323dcf1cad5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-148245b93dd5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets/get/responses/503/content" + }, + { + "pointer": "/paths/~1secrets/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-02cd9b841c92", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-6fd4e7dc64c6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "body", + "in": "body", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + ], + "id": "engine-1.55-218eabb834d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-a7903480ec4c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + } + }, + "id": "engine-1.55-1443c3b3aaeb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/requestBody" + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + }, + "id": "engine-1.55-03c4e7363fd0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/IDResponse" + }, + "id": "engine-1.55-09595910701a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-ba6e88885b61", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/responses/409/content" + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d53ba05fbec2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-17f077d89294", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-6f734aa4066a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6e91c994b33d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/responses/503/content" + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-230ebc522152", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "ID of the secret" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the secret", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-3ed926b7a0b8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/delete/parameters", + "destinationPointer": "/paths/~1secrets~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-311c0d5b3a42", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/delete/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-35292ab86e54", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-1882a5480077", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c6b1405502d1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-1e24957f3455", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-5818c6a95a17", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/delete/responses/503/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d3d85492d204", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/delete/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "ID of the secret" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the secret", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-be1fea7e5eb3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/parameters", + "destinationPointer": "/paths/~1secrets~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-d10e78db33ea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Secret" + }, + "examples": { + "response": { + "value": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + } + } + } + }, + "id": "engine-1.55-5b91961e53b0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + }, + "id": "engine-1.55-6bf02815dedb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Secret" + }, + "id": "engine-1.55-0586ab0c011f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b2e4837f2a04", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8edc4eefcfd0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-3e4b9e93c8ba", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-3606b4921c05", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-a855856598d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/get/responses/503/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-734fb90fd1d0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "type": "string", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/SecretSpec" + }, + "description": "The spec of the secret to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[SecretInspect endpoint](#operation/SecretInspect) response values.\n" + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is\nrequired to avoid conflicting writes.\n", + "type": "integer", + "format": "int64", + "required": true + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "id": "engine-1.55-ecb1625a7fdd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/parameters", + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/parameters" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "description": "The spec of the secret to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[SecretInspect endpoint](#operation/SecretInspect) response values.\n" + }, + "id": "engine-1.55-9d3071c40298", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/requestBody" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-bf270f943cca", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/responses/400/content" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-196ae6f4214f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b0d7602befd6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/responses/404/content" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-0d9443f2aec9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-adbe0831d79e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8ffb68dc278d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-51907cae073a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/responses/503/content" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5f50e2b5d203", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the services list.\n\nAvailable filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n" + }, + { + "name": "status", + "in": "query", + "type": "boolean", + "description": "Include service status, with count of running and desired tasks.\n" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the services list.\n\nAvailable filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "query", + "description": "Include service status, with count of running and desired tasks.\n", + "schema": { + "type": "boolean" + } + } + ], + "id": "engine-1.55-e71de8b79898", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/parameters", + "destinationPointer": "/paths/~1services/get/parameters" + }, + { + "pointer": "/paths/~1services/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + } + }, + "id": "engine-1.55-acb02bf5cdda", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services/get/responses/200/content" + }, + { + "pointer": "/paths/~1services/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Service" + } + }, + "id": "engine-1.55-934307bd574c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6aae1b1747a0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services/get/responses/500/content" + }, + { + "pointer": "/paths/~1services/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-e0444841a296", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-3f59545cdece", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services/get/responses/503/content" + }, + { + "pointer": "/paths/~1services/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-606754ffa78f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-60ecce1c86e1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ], + "OomScoreAdj": 0 + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string" + } + ], + "after": [ + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-62bd6114a805", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/parameters", + "destinationPointer": "/paths/~1services~1create/post/parameters" + }, + { + "pointer": "/paths/~1services~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-13a7170303fc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ], + "OomScoreAdj": 0 + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "required": true + }, + "id": "engine-1.55-569729623416", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/requestBody" + }, + { + "pointer": "/paths/~1services~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceCreateResponse" + } + } + }, + "id": "engine-1.55-f90e28b69462", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ServiceCreateResponse" + }, + "id": "engine-1.55-e97c7df91a3f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-7f7fbd7e40cc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/400/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c67933161811", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-b48d65a65b05", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/403/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-c753c2759fa9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-1cbe8b01ff1c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/409/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8209fb0c8367", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-8c33df583c4b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-1148c54bca75", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-0a8e2862fe34", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/503/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-bb57d451210c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-74a351d94ad6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/parameters", + "destinationPointer": "/paths/~1services~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-3623fd59b336", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-cb04ab53985e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c551a68558bf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d930bf424f47", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-43f8be22b162", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/delete/responses/503/content" + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-37a2f859fd61", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "type": "string" + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-10253f64f798", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/parameters", + "destinationPointer": "/paths/~1services~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Service" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Service" + } + } + }, + "id": "engine-1.55-4b4bba58f44a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Service" + }, + "id": "engine-1.55-f7cfe871e85b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-212ed6082897", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-31d7953541e4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-ee61a237a136", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-279863552b27", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-50e5ff058eee", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/get/responses/503/content" + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-92a735d6ac7b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the service", + "type": "string" + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "type": "boolean", + "default": false + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "type": "boolean", + "default": false + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "type": "boolean", + "default": false + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "type": "boolean", + "default": false + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "type": "integer", + "default": 0 + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "type": "boolean", + "default": false + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "type": "string", + "default": "all" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the service", + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "id": "engine-1.55-5b0827115fe2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/parameters", + "destinationPointer": "/paths/~1services~1{id}~1logs/get/parameters" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream", + "application/vnd.docker.multiplexed-stream" + ], + "id": "engine-1.55-e95b26c3dbe8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "id": "engine-1.55-fa81ab2d5d08", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/200/content" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "format": "binary" + }, + "id": "engine-1.55-82570f61da84", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such service: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-729584add335", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/404/content" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such service: c2ada9df5af8" + } + }, + "id": "engine-1.55-6125acfb78d1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-bd24b640fc26", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-68c4b07ac205", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/500/content" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b49376e2a5dc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-925d4638cbcd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/503/content" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-05291b3ea173", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-9469840ec852", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ], + "OomScoreAdj": 0 + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is\nrequired to avoid conflicting writes.\nThis version number should be the value as currently set on the\nservice *before* the update. You can find the current version by\ncalling `GET /services/{id}`\n", + "required": true, + "type": "integer" + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the `X-Registry-Auth` header is not specified, this parameter\nindicates where to find registry authorization credentials.\n", + "type": "string", + "enum": [ + "spec", + "previous-spec" + ], + "default": "spec" + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback\nto the previous service spec. The supplied spec will be ignored in\nthis case.\n", + "type": "string" + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is\nrequired to avoid conflicting writes.\nThis version number should be the value as currently set on the\nservice *before* the update. You can find the current version by\ncalling `GET /services/{id}`\n", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the `X-Registry-Auth` header is not specified, this parameter\nindicates where to find registry authorization credentials.\n", + "schema": { + "type": "string", + "enum": [ + "spec", + "previous-spec" + ], + "default": "spec" + } + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback\nto the previous service spec. The supplied spec will be ignored in\nthis case.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-5fb0014f912e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/parameters", + "destinationPointer": "/paths/~1services~1{id}~1update/post/parameters" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-8605dc7d56b0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ], + "OomScoreAdj": 0 + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + } + }, + "required": true + }, + "id": "engine-1.55-595c0c373e65", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/requestBody" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUpdateResponse" + } + } + }, + "id": "engine-1.55-cb1647e4580a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/responses/200/content" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ServiceUpdateResponse" + }, + "id": "engine-1.55-4614e0b82e25", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c081848ef5e2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/responses/400/content" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-0af39b24293f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-475153a36837", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/responses/404/content" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5a5254d001e9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-3aafc89ddd3b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-52ccab6715ec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-d0db3c41024f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/responses/503/content" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-9d342d5fe0f5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1session/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream" + ], + "id": "engine-1.55-8685e1cf6140", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1session/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1session/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-adcd61b4b538", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1session/post/responses/400/content" + }, + { + "pointer": "/paths/~1session/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8def75426146", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1session/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1session/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6d57f96a1900", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1session/post/responses/500/content" + }, + { + "pointer": "/paths/~1session/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-0e8f5ff66ff8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1session/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + } + }, + "id": "engine-1.55-fd88f40eb8fe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm/get/responses/200/content" + }, + { + "pointer": "/paths/~1swarm/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Swarm" + }, + "id": "engine-1.55-85bdc24706ca", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-1b4f000c7f85", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm/get/responses/404/content" + }, + { + "pointer": "/paths/~1swarm/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-da144fcfdc97", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c2c0d2b6776a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm/get/responses/500/content" + }, + { + "pointer": "/paths/~1swarm/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-31d162421416", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-ae4a709e3746", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm/get/responses/503/content" + }, + { + "pointer": "/paths/~1swarm/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-9a9469550e24", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "title": "SwarmInitRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "type": "integer", + "format": "uint32" + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "type": "array", + "items": { + "type": "string", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "ForceNewCluster": { + "description": "Force creation of a new swarm.", + "type": "boolean" + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "type": "integer", + "format": "uint32" + }, + "Spec": { + "$ref": "#/definitions/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + ], + "id": "engine-1.55-43d06b8ff48a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json", + "text/plain" + ], + "id": "engine-1.55-610321a92057", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmInitRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "type": "integer", + "format": "uint32" + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "type": "array", + "items": { + "type": "string", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "ForceNewCluster": { + "description": "Force creation of a new swarm.", + "type": "boolean" + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "type": "integer", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SwarmInitRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "type": "integer", + "format": "uint32" + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "type": "array", + "items": { + "type": "string", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "ForceNewCluster": { + "description": "Force creation of a new swarm.", + "type": "boolean" + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "type": "integer", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + }, + "required": true + }, + "id": "engine-1.55-1b9446d5af4a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/requestBody" + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "description": "The node ID", + "type": "string", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + }, + "text/plain": { + "schema": { + "description": "The node ID", + "type": "string", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + } + }, + "id": "engine-1.55-2e0d7636241f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/responses/200/content" + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "description": "The node ID", + "type": "string", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + }, + "id": "engine-1.55-7698f92a8a75", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-347947b1e0ec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/responses/400/content" + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d62d85258f45", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-49e5da6d9092", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-536900541795", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-474df7c99d8a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-358ea5c9bff2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "title": "SwarmJoinRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP). This is\nrequired for joining a swarm. If the port number is omitted,\nthe default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "RemoteAddrs": { + "description": "Addresses of manager nodes already participating in the swarm.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "JoinToken": { + "description": "Secret token for joining this swarm.", + "type": "string" + } + }, + "required": [ + "ListenAddr", + "RemoteAddrs", + "JoinToken" + ], + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathAddr": "192.168.1.1", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + ], + "id": "engine-1.55-981ce3c8edd7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmJoinRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP). This is\nrequired for joining a swarm. If the port number is omitted,\nthe default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "RemoteAddrs": { + "description": "Addresses of manager nodes already participating in the swarm.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "JoinToken": { + "description": "Secret token for joining this swarm.", + "type": "string" + } + }, + "required": [ + "ListenAddr", + "RemoteAddrs", + "JoinToken" + ], + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathAddr": "192.168.1.1", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SwarmJoinRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP). This is\nrequired for joining a swarm. If the port number is omitted,\nthe default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "RemoteAddrs": { + "description": "Addresses of manager nodes already participating in the swarm.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "JoinToken": { + "description": "Secret token for joining this swarm.", + "type": "string" + } + }, + "required": [ + "ListenAddr", + "RemoteAddrs", + "JoinToken" + ], + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathAddr": "192.168.1.1", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + }, + "required": true + }, + "id": "engine-1.55-d4953a0f7ab4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1join/post/requestBody" + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-39637cbe7b1a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1join/post/responses/400/content" + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-a9930fe02ae8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-ca48a29e87e9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1join/post/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b2cc469c09f2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-312f57da12b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1join/post/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-b0d96528ad39", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1leave/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "force", + "description": "Force leave swarm, even if this is the last manager or that it will\nbreak the cluster.\n", + "in": "query", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "force", + "description": "Force leave swarm, even if this is the last manager or that it will\nbreak the cluster.\n", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-5deeedc58e9e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1leave/post/parameters", + "destinationPointer": "/paths/~1swarm~1leave/post/parameters" + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-f6e643764ff8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1leave/post/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-f3af3e9f796a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1leave/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-6808c6e9cfa0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1leave/post/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-ff90eaa53cf0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1leave/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlock/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-baa1430bf5e1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlock/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlock/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "title": "SwarmUnlockRequest", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + ], + "id": "engine-1.55-988e9d13d57d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlock/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlock/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-068b7e2375cf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlock/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlock/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmUnlockRequest", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "required": true + }, + "id": "engine-1.55-235d481229c4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlock/post/requestBody" + }, + { + "pointer": "/paths/~1swarm~1unlock/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-7f05cb7c7428", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlock/post/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1unlock/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-1a5654d02cca", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlock/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlock/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c2491baa8316", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlock/post/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1unlock/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-928354728a80", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlock/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-8040e0af80d4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "UnlockKeyResponse", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "UnlockKeyResponse", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "id": "engine-1.55-ab16f847b58a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlockkey/get/responses/200/content" + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "UnlockKeyResponse", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + }, + "id": "engine-1.55-8a118707b47d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-af860c07aa88", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlockkey/get/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-1396639c2cfa", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-17a82fda405c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlockkey/get/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-0660c8e4c007", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SwarmSpec" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is\nrequired to avoid conflicting writes.\n", + "type": "integer", + "format": "int64", + "required": true + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "type": "boolean", + "default": false + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "type": "boolean", + "default": false + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-f358e50a8519", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/parameters", + "destinationPointer": "/paths/~1swarm~1update/post/parameters" + }, + { + "pointer": "/paths/~1swarm~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + } + }, + "required": true + }, + "id": "engine-1.55-d33628dbb0c6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1update/post/requestBody" + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-46f67082c8d4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1update/post/responses/400/content" + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-3320f99da205", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-29ca24a58043", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-356d9fe088e2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-742591ba9f37", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1update/post/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-6e0991e98961", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1system~1df/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "type", + "in": "query", + "description": "Object types, for which to compute and return data.\n", + "type": "array", + "collectionFormat": "multi", + "items": { + "type": "string", + "enum": [ + "container", + "image", + "volume", + "build-cache" + ] + } + }, + { + "name": "verbose", + "in": "query", + "description": "Show detailed information on space usage.\n", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "type", + "in": "query", + "description": "Object types, for which to compute and return data.\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "container", + "image", + "volume", + "build-cache" + ] + } + } + }, + { + "name": "verbose", + "in": "query", + "description": "Show detailed information on space usage.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-b2ee059afd2e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1system~1df/get/parameters", + "destinationPointer": "/paths/~1system~1df/get/parameters" + }, + { + "pointer": "/paths/~1system~1df/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "SystemDataUsageResponse", + "properties": { + "ImageUsage": { + "$ref": "#/components/schemas/ImagesDiskUsage" + }, + "ContainerUsage": { + "$ref": "#/components/schemas/ContainersDiskUsage" + }, + "VolumeUsage": { + "$ref": "#/components/schemas/VolumesDiskUsage" + }, + "BuildCacheUsage": { + "$ref": "#/components/schemas/BuildCacheDiskUsage" + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SystemDataUsageResponse", + "properties": { + "ImageUsage": { + "$ref": "#/components/schemas/ImagesDiskUsage" + }, + "ContainerUsage": { + "$ref": "#/components/schemas/ContainersDiskUsage" + }, + "VolumeUsage": { + "$ref": "#/components/schemas/VolumesDiskUsage" + }, + "BuildCacheUsage": { + "$ref": "#/components/schemas/BuildCacheDiskUsage" + } + } + } + } + }, + "id": "engine-1.55-88940587faff", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1system~1df/get/responses/200/content" + }, + { + "pointer": "/paths/~1system~1df/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "SystemDataUsageResponse", + "properties": { + "ImageUsage": { + "$ref": "#/definitions/ImagesDiskUsage" + }, + "ContainerUsage": { + "$ref": "#/definitions/ContainersDiskUsage" + }, + "VolumeUsage": { + "$ref": "#/definitions/VolumesDiskUsage" + }, + "BuildCacheUsage": { + "$ref": "#/definitions/BuildCacheDiskUsage" + } + } + }, + "id": "engine-1.55-21ff2732699d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1system~1df/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1system~1df/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-d0724d27a0dd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1system~1df/get/responses/500/content" + }, + { + "pointer": "/paths/~1system~1df/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-0c517dfa8923", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1system~1df/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the tasks list.\n\nAvailable filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the tasks list.\n\nAvailable filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-888057e6250a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks/get/parameters", + "destinationPointer": "/paths/~1tasks/get/parameters" + }, + { + "pointer": "/paths/~1tasks/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-8490823b1b3a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Task" + }, + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ] + } + } + }, + "id": "engine-1.55-e435d3d376d3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks/get/responses/200/content" + }, + { + "pointer": "/paths/~1tasks/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Task" + }, + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ] + }, + "id": "engine-1.55-655f2acf6294", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-591d0154c32d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks/get/responses/500/content" + }, + { + "pointer": "/paths/~1tasks/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-8b77e28d9960", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-f2af1e50428f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks/get/responses/503/content" + }, + { + "pointer": "/paths/~1tasks/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-bebf93382687", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-51aa5dcff183", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/parameters", + "destinationPointer": "/paths/~1tasks~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-f6035b5ef5d2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + }, + "id": "engine-1.55-afd671beb466", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Task" + }, + "id": "engine-1.55-fe521bfb13a1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-c6deb209c7a9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-ea5f31687b5a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-5ba47f770e71", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-76fbb92dd154", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-f8e3a06ce56f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}/get/responses/503/content" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-d35602c73cc7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the task", + "type": "string" + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "type": "boolean", + "default": false + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "type": "boolean", + "default": false + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "type": "boolean", + "default": false + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "type": "boolean", + "default": false + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "type": "integer", + "default": 0 + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "type": "boolean", + "default": false + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "type": "string", + "default": "all" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the task", + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "id": "engine-1.55-e2d18794d6f2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/parameters", + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/parameters" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream", + "application/vnd.docker.multiplexed-stream" + ], + "id": "engine-1.55-fe6b994864b7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "id": "engine-1.55-a5871e79f30a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/content" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "format": "binary" + }, + "id": "engine-1.55-246071b6f050", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such task: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-831a0edc092e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/content" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such task: c2ada9df5af8" + } + }, + "id": "engine-1.55-4d93d78f72ba", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-bc44f287ab17", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-aa6b4f337a68", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-4f262bc3ca8e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-1e7e5dcfa087", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-9fbb4931764f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1version/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-8a86288fc4f5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1version/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1version/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemVersion" + } + } + }, + "id": "engine-1.55-03ed4cd77671", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1version/get/responses/200/content" + }, + { + "pointer": "/paths/~1version/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/SystemVersion" + }, + "id": "engine-1.55-0e7a1c2fe46f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1version/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1version/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-18b0539f54eb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1version/get/responses/500/content" + }, + { + "pointer": "/paths/~1version/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-a50b2fffeaf0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1version/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "type": "string", + "format": "json" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "schema": { + "type": "string", + "format": "json" + } + } + ], + "id": "engine-1.55-78c41a701d66", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes/get/parameters", + "destinationPointer": "/paths/~1volumes/get/parameters" + }, + { + "pointer": "/paths/~1volumes/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-03d039f7cda9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeListResponse" + } + } + }, + "id": "engine-1.55-25b10f6ea781", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes/get/responses/200/content" + }, + { + "pointer": "/paths/~1volumes/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/VolumeListResponse" + }, + "id": "engine-1.55-5f2de8de3ad1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-dc2ad7a0c03d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes/get/responses/500/content" + }, + { + "pointer": "/paths/~1volumes/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-fa650247ed6c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-0ae8d7659a9a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1create/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "volumeConfig", + "in": "body", + "required": true, + "description": "Volume configuration", + "schema": { + "$ref": "#/definitions/VolumeCreateRequest" + } + } + ], + "id": "engine-1.55-7df5fc62b84f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1create/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-c0224404e700", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeCreateRequest" + } + } + }, + "description": "Volume configuration", + "required": true + }, + "id": "engine-1.55-7fce7a7f1399", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1create/post/requestBody" + }, + { + "pointer": "/paths/~1volumes~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + }, + "id": "engine-1.55-4e61eaaa46cb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1volumes~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Volume" + }, + "id": "engine-1.55-7ea733aec38c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-f0b62954042c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1volumes~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-32c1aa492964", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1prune/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n- `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n- `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-ba84a3e5a399", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1prune/post/parameters", + "destinationPointer": "/paths/~1volumes~1prune/post/parameters" + }, + { + "pointer": "/paths/~1volumes~1prune/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-72cd3e597e60", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1prune/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1prune/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "VolumePruneResponse", + "properties": { + "VolumesDeleted": { + "description": "Volumes that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "id": "engine-1.55-4ab31f3ecb93", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1prune/post/responses/200/content" + }, + { + "pointer": "/paths/~1volumes~1prune/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "VolumePruneResponse", + "properties": { + "VolumesDeleted": { + "description": "Volumes that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "id": "engine-1.55-89406770d489", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1prune/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1prune/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-242e098e8d59", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1prune/post/responses/500/content" + }, + { + "pointer": "/paths/~1volumes~1prune/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-9b7b9ad35090", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1prune/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "type": "string" + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.55-aff75b21bef8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/parameters", + "destinationPointer": "/paths/~1volumes~1{name}/delete/parameters" + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-7a1201de706b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-87dd624a5f93", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-171e102f8d60", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/delete/responses/409/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5167074c00a0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-06da9d20d06f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-22b656919f73", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "type": "string" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.55-357a4d8a3139", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/get/parameters", + "destinationPointer": "/paths/~1volumes~1{name}/get/parameters" + }, + { + "pointer": "/paths/~1volumes~1{name}/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-1cab3812b6f8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + }, + "id": "engine-1.55-2ab1bffea9b2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/get/responses/200/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Volume" + }, + "id": "engine-1.55-637a2c94457f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-215c1af1e1f0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/get/responses/404/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-38e4992a194a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-390946562ffc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/get/responses/500/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-27c650831a50", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-b588d89962c4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name or ID of the volume", + "type": "string", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "description": "Volume configuration", + "properties": { + "Spec": { + "$ref": "#/definitions/ClusterVolumeSpec" + } + } + }, + "description": "The spec of the volume to update. Currently, only Availability may\nchange. All other fields must remain unchanged.\n" + }, + { + "name": "version", + "in": "query", + "description": "The version number of the volume being updated. This is required to\navoid conflicting writes. Found in the volume's `ClusterVolume`\nfield.\n", + "type": "integer", + "format": "int64", + "required": true + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name or ID of the volume", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the volume being updated. This is required to\navoid conflicting writes. Found in the volume's `ClusterVolume`\nfield.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "id": "engine-1.55-a1f4a68e9efe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/parameters", + "destinationPointer": "/paths/~1volumes~1{name}/put/parameters" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.55-a7af4c539d83", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Volume configuration", + "properties": { + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + } + } + } + }, + "description": "The spec of the volume to update. Currently, only Availability may\nchange. All other fields must remain unchanged.\n" + }, + "id": "engine-1.55-a3f49c1ad7e1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/requestBody" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-d118b3689b52", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/responses/400/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-48d6ff5de219", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-a23933c3d233", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/responses/404/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-292c0e70e30e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-43c9f572f90c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/responses/500/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-5b16eed1fac7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-55601af135ec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/responses/503/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.55-aa5ee3d65379", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json", + "text/plain" + ], + "id": "engine-1.55-a84aef967d4c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/produces", + "destinationPointer": null + }, + { + "pointer": "/schemes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "http", + "https" + ], + "id": "engine-1.55-2250e1953585", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/schemes", + "destinationPointer": null + }, + { + "pointer": "/servers", + "beforePresent": false, + "afterPresent": true, + "after": [ + { + "url": "/v1.55" + } + ], + "id": "engine-1.55-ab7cdc6d6aad", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/servers" + }, + { + "pointer": "/swagger", + "beforePresent": true, + "afterPresent": false, + "before": "2.0", + "id": "engine-1.55-6ac37e324fec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/swagger", + "destinationPointer": null + }, + { + "pointer": "/jsonSchemaDialect", + "beforePresent": false, + "afterPresent": true, + "after": "https://spec.openapis.org/oas/3.1/dialect/base", + "id": "engine-1.55-03ee85af235e", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/jsonSchemaDialect" + }, + { + "pointer": "/openapi", + "beforePresent": true, + "afterPresent": true, + "before": "3.0.0", + "after": "3.2.0", + "id": "engine-1.55-71377657b6ae", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "moby/moby", + "sourcePointer": "/openapi", + "destinationPointer": "/openapi" + }, + { + "pointer": "/components/schemas/AttestationStatement/properties/Statement/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-4f13ee1f0b16", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/AttestationStatement/properties/Statement/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/AttestationStatement/properties/Statement/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-15d13a7db649", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/AttestationStatement/properties/Statement/type", + "destinationPointer": "/components/schemas/AttestationStatement/properties/Statement/type" + }, + { + "pointer": "/components/schemas/AuthResponse/properties/IdentityToken/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-131411ec6727", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/AuthResponse/properties/IdentityToken/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/AuthResponse/properties/Status/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-cc391c353ba9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/AuthResponse/properties/Status/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/BuildCache/properties/LastUsedAt/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-a0b9f800ca67", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/BuildCache/properties/LastUsedAt/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/BuildCache/properties/LastUsedAt/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-eac32e0891ef", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/BuildCache/properties/LastUsedAt/type", + "destinationPointer": "/components/schemas/BuildCache/properties/LastUsedAt/type" + }, + { + "pointer": "/components/schemas/BuildCache/properties/Parents/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-9c76e2fbf8f4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/BuildCache/properties/Parents/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/BuildCache/properties/Parents/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-21e1a5c5ebcb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/BuildCache/properties/Parents/type", + "destinationPointer": "/components/schemas/BuildCache/properties/Parents/type" + }, + { + "pointer": "/components/schemas/ChangeType/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-a588dfc8ae07", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ChangeType/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ClusterInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-fd3264236968", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ClusterInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ClusterInfo/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-e691663d5d85", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ClusterInfo/type", + "destinationPointer": "/components/schemas/ClusterInfo/type" + }, + { + "pointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Availability/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-d44eceffb2ed", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Availability/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Scope/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-e7100df1ab24", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Scope/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Sharing/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-4734e5ee4f89", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Sharing/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ConfigReference/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-7b78dc24e1c7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ConfigReference/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStatEntry/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-b3e59fd3c36f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStatEntry/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStatEntry/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-cb66c51d4d4f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStatEntry/type", + "destinationPointer": "/components/schemas/ContainerBlkioStatEntry/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-2463575d1373", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_merged_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-b13f621f9d0e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_merged_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_merged_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-9918d41a6336", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_merged_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_merged_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_queue_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-cc2a321331fe", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_queue_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_queue_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-4e3fb4d3e82d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_queue_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_queue_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_service_time_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-4e694aa40186", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_service_time_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_service_time_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-6d5d57f93cee", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_service_time_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_service_time_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_serviced_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-b79761ed5e36", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_serviced_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_serviced_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-ab5146b49c41", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_serviced_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_serviced_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_time_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-14daab7c99c8", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_time_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_time_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-8acf464c709d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_time_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_time_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_wait_time_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-ad304d535f23", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_wait_time_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_wait_time_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-4c112b3f2994", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_wait_time_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_wait_time_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/sectors_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-c174fa816be0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/sectors_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/sectors_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-618613a35036", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/sectors_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/sectors_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-e11373dfdef0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/type" + }, + { + "pointer": "/components/schemas/ContainerCPUStats/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-a3ddd0ec2bd0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCPUStats/properties/online_cpus/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-c16c1c5b0566", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/properties/online_cpus/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCPUStats/properties/online_cpus/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-ac0676e38fa5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/properties/online_cpus/type", + "destinationPointer": "/components/schemas/ContainerCPUStats/properties/online_cpus/type" + }, + { + "pointer": "/components/schemas/ContainerCPUStats/properties/system_cpu_usage/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-ee6850e80c20", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/properties/system_cpu_usage/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCPUStats/properties/system_cpu_usage/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-33629b0c660e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/properties/system_cpu_usage/type", + "destinationPointer": "/components/schemas/ContainerCPUStats/properties/system_cpu_usage/type" + }, + { + "pointer": "/components/schemas/ContainerCPUStats/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-5014c5543e4b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/type", + "destinationPointer": "/components/schemas/ContainerCPUStats/type" + }, + { + "pointer": "/components/schemas/ContainerCPUUsage/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-c4a8b13e1d42", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUUsage/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCPUUsage/properties/percpu_usage/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-79b9617c9bb6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUUsage/properties/percpu_usage/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCPUUsage/properties/percpu_usage/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-7c8818603e15", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUUsage/properties/percpu_usage/type", + "destinationPointer": "/components/schemas/ContainerCPUUsage/properties/percpu_usage/type" + }, + { + "pointer": "/components/schemas/ContainerCPUUsage/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-e9f4a1e0e139", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUUsage/type", + "destinationPointer": "/components/schemas/ContainerCPUUsage/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/ArgsEscaped/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-592fbb583d2c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/ArgsEscaped/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/ArgsEscaped/type", + "beforePresent": true, + "afterPresent": true, + "before": "boolean", + "after": [ + "boolean", + "null" + ], + "id": "engine-1.55-9a7a5d95e49c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/ArgsEscaped/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/ArgsEscaped/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/ExposedPorts/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-5ecdead7fd99", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/ExposedPorts/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/ExposedPorts/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-efcb921aa113", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/ExposedPorts/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/ExposedPorts/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/NetworkDisabled/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-e0af6aa6a4a8", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/NetworkDisabled/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/NetworkDisabled/type", + "beforePresent": true, + "afterPresent": true, + "before": "boolean", + "after": [ + "boolean", + "null" + ], + "id": "engine-1.55-17f2d7e45402", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/NetworkDisabled/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/NetworkDisabled/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/OnBuild/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-96c9825a132c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/OnBuild/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/OnBuild/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-0f31462c8250", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/OnBuild/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/OnBuild/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/Shell/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-498b9be87873", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/Shell/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/Shell/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-2ce9526549f4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/Shell/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/Shell/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/StopSignal/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-06093d6132d3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/StopSignal/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/StopSignal/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-24db05e34722", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/StopSignal/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/StopSignal/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/StopTimeout/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-23ce32633ea3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/StopTimeout/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/StopTimeout/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-451e9c96536e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/StopTimeout/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/StopTimeout/type" + }, + { + "pointer": "/components/schemas/ContainerCreateResponse/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-7c72e912457b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCreateResponse/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCreateResponse/properties/Warnings/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-e64225cfc759", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCreateResponse/properties/Warnings/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/Created/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-45c77d02e456", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/Created/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/Created/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-ee5c785dd94d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/Created/type", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/Created/type" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/ExecIDs/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-0cb2940f3834", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/ExecIDs/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/ExecIDs/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-87bc140da83c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/ExecIDs/type", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/ExecIDs/type" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/LogPath/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-09725a9d1943", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/LogPath/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/LogPath/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-50d107a3e4b6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/LogPath/type", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/LogPath/type" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-678a51418554", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-becf2480d045", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/type", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/type" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-1390727ff1c1", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-fd4406842a71", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/type", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/commitbytes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-33e58da72dff", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/commitbytes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/commitbytes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-04cec05b5edc", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/commitbytes/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/commitbytes/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/commitpeakbytes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-d1e6444445ec", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/commitpeakbytes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/commitpeakbytes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-14bd3659ac59", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/commitpeakbytes/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/commitpeakbytes/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/failcnt/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-7a68942beac0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/failcnt/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/failcnt/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-1d60fc155a3d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/failcnt/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/failcnt/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/limit/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-807ed2dc7b5a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/limit/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/limit/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-898333d69999", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/limit/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/limit/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/max_usage/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-f47d5de647ee", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/max_usage/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/max_usage/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-dea0d47dd1ca", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/max_usage/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/max_usage/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/privateworkingset/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-7cf91752a4a6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/privateworkingset/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/privateworkingset/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-927187654df2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/privateworkingset/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/privateworkingset/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/stats/additionalProperties/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-052349c7c369", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/stats/additionalProperties/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/stats/additionalProperties/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-039ecd94c812", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/stats/additionalProperties/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/stats/additionalProperties/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/usage/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-a9d139c8f417", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/usage/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/usage/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-e0cbe236fdf4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/usage/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/usage/type" + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-3a8d66729a52", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/properties/endpoint_id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-36f0d4c9f747", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/properties/endpoint_id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/properties/endpoint_id/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-2500126386bb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/properties/endpoint_id/type", + "destinationPointer": "/components/schemas/ContainerNetworkStats/properties/endpoint_id/type" + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/properties/instance_id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-ea6a862e6e1a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/properties/instance_id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/properties/instance_id/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-5e4267c26eb6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/properties/instance_id/type", + "destinationPointer": "/components/schemas/ContainerNetworkStats/properties/instance_id/type" + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-3ba852c8ef0b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/type", + "destinationPointer": "/components/schemas/ContainerNetworkStats/type" + }, + { + "pointer": "/components/schemas/ContainerPidsStats/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-4ff586080dc9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerPidsStats/properties/current/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-7f2d50b25730", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/properties/current/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerPidsStats/properties/current/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-d14d22186d67", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/properties/current/type", + "destinationPointer": "/components/schemas/ContainerPidsStats/properties/current/type" + }, + { + "pointer": "/components/schemas/ContainerPidsStats/properties/limit/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-b48cf618184c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/properties/limit/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerPidsStats/properties/limit/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-60e398415998", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/properties/limit/type", + "destinationPointer": "/components/schemas/ContainerPidsStats/properties/limit/type" + }, + { + "pointer": "/components/schemas/ContainerPidsStats/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-8f8bbe40ea18", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/type", + "destinationPointer": "/components/schemas/ContainerPidsStats/type" + }, + { + "pointer": "/components/schemas/ContainerState/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-c3e86a002c49", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerState/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerState/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-96532db70aa3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerState/type", + "destinationPointer": "/components/schemas/ContainerState/type" + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-9008d205c3bb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/id/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-5a7dd3169eed", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/id/type", + "destinationPointer": "/components/schemas/ContainerStatsResponse/properties/id/type" + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-adb48e61def7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/name/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-d353d1db6561", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/name/type", + "destinationPointer": "/components/schemas/ContainerStatsResponse/properties/name/type" + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/networks/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-2b935ff661d3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/networks/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/os_type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-910750e7a437", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/os_type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/os_type/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-ac82242ff043", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/os_type/type", + "destinationPointer": "/components/schemas/ContainerStatsResponse/properties/os_type/type" + }, + { + "pointer": "/components/schemas/ContainerStorageStats/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-9af818126c18", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/read_count_normalized/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-7ea2f9229280", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/read_count_normalized/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/read_count_normalized/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-446a8537861b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/read_count_normalized/type", + "destinationPointer": "/components/schemas/ContainerStorageStats/properties/read_count_normalized/type" + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/read_size_bytes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-8fae336f2cc3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/read_size_bytes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/read_size_bytes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-df43a4949fb9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/read_size_bytes/type", + "destinationPointer": "/components/schemas/ContainerStorageStats/properties/read_size_bytes/type" + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/write_count_normalized/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-74a517d26afb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/write_count_normalized/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/write_count_normalized/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-7c0ff34723d7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/write_count_normalized/type", + "destinationPointer": "/components/schemas/ContainerStorageStats/properties/write_count_normalized/type" + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/write_size_bytes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-7ed476fb417a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/write_size_bytes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/write_size_bytes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-e3bc1cc0b2cf", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/write_size_bytes/type", + "destinationPointer": "/components/schemas/ContainerStorageStats/properties/write_size_bytes/type" + }, + { + "pointer": "/components/schemas/ContainerStorageStats/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-316faefeb8ff", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/type", + "destinationPointer": "/components/schemas/ContainerStorageStats/type" + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/HostConfig/properties/Annotations/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-9c934e9e5fd0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/HostConfig/properties/Annotations/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/HostConfig/properties/Annotations/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-b86b14795972", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/HostConfig/properties/Annotations/type", + "destinationPointer": "/components/schemas/ContainerSummary/properties/HostConfig/properties/Annotations/type" + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-96a20dfe695a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-32c658ee4fa2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/type", + "destinationPointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/type" + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/SizeRw/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-f2437f7f8c98", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/SizeRw/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/SizeRw/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-d262c79c9dd5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/SizeRw/type", + "destinationPointer": "/components/schemas/ContainerSummary/properties/SizeRw/type" + }, + { + "pointer": "/components/schemas/ContainerThrottlingData/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-e91529243e1d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerThrottlingData/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerThrottlingData/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-2a914a1e0bae", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerThrottlingData/type", + "destinationPointer": "/components/schemas/ContainerThrottlingData/type" + }, + { + "pointer": "/components/schemas/ContainerWaitResponse/properties/StatusCode/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-71e6c6887590", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerWaitResponse/properties/StatusCode/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerdInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-62fbece6835d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerdInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerdInfo/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-33b39e0f3b82", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerdInfo/type", + "destinationPointer": "/components/schemas/ContainerdInfo/type" + }, + { + "pointer": "/components/schemas/Driver/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-05e774242ba2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Driver/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Driver/properties/Options/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-02ab6be7b3ad", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Driver/properties/Options/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/DriverData/properties/Data/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-99a6b517844f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/DriverData/properties/Data/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/DriverData/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-5ab8732d8bb5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/DriverData/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/EndpointIPAMConfig/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-9be5ceea43ce", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/EndpointIPAMConfig/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/EndpointIPAMConfig/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-8d041ad3df11", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/EndpointIPAMConfig/type", + "destinationPointer": "/components/schemas/EndpointIPAMConfig/type" + }, + { + "pointer": "/components/schemas/EndpointSettings/properties/DriverOpts/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-b7f613d2ced5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/EndpointSettings/properties/DriverOpts/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/EndpointSettings/properties/DriverOpts/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-8e486c093bc3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/EndpointSettings/properties/DriverOpts/type", + "destinationPointer": "/components/schemas/EndpointSettings/properties/DriverOpts/type" + }, + { + "pointer": "/components/schemas/ErrorResponse/properties/message/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-ecc00714fae4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ErrorResponse/properties/message/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/FilesystemChange/properties/Path/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-baf01a01b7c7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/FilesystemChange/properties/Path/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/FirewallInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-4dbc2d40cdc7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/FirewallInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/FirewallInfo/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-5a1bae65f24a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/FirewallInfo/type", + "destinationPointer": "/components/schemas/FirewallInfo/type" + }, + { + "pointer": "/components/schemas/Health/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-3fa4c1e7edd3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Health/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Health/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-966a69c28bbd", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Health/type", + "destinationPointer": "/components/schemas/Health/type" + }, + { + "pointer": "/components/schemas/HealthcheckResult/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-96be2206f530", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/HealthcheckResult/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/HealthcheckResult/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-8ad4874e9700", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/HealthcheckResult/type", + "destinationPointer": "/components/schemas/HealthcheckResult/type" + }, + { + "pointer": "/components/schemas/HostConfig/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written", + "example": "" + }, + "LogConfig": { + "type": "object", + "description": "The logging configuration for this container", + "properties": { + "Type": { + "description": "Name of the logging driver used for the container or \"none\"\nif logging is disabled.", + "type": "string", + "enum": [ + "local", + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "description": "Driver-specific configuration options for the logging driver.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "5", + "max-size": "10m" + } + } + } + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to the container.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.\n", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ], + "nullable": true + }, + "Annotations": { + "type": "object", + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n", + "additionalProperties": { + "type": "string" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "enum": [ + "private", + "host" + ], + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n" + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string", + "format": "ip-address", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n", + "additionalProperties": { + "type": "string" + } + }, + "Tmpfs": { + "type": "object", + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n", + "additionalProperties": { + "type": "string" + } + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "type": "integer", + "format": "int64", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "minimum": 0 + }, + "Sysctls": { + "type": "object", + "description": "A list of kernel parameters (sysctls) to set in the container.\n\nThis field is omitted if not set.", + "additionalProperties": { + "type": "string" + }, + "example": { + "net.ipv4.ip_forward": "1" + }, + "nullable": true + }, + "Runtime": { + "type": "string", + "description": "Runtime to use with this container.", + "nullable": true + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/asound", + "/proc/acpi", + "/proc/kcore", + "/proc/keys", + "/proc/latency_stats", + "/proc/timer_list", + "/proc/timer_stats", + "/proc/sched_debug", + "/proc/scsi", + "/sys/firmware", + "/sys/devices/virtual/powercap" + ] + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/bus", + "/proc/fs", + "/proc/irq", + "/proc/sys", + "/proc/sysrq-trigger" + ] + } + } + } + ], + "after": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written", + "example": "" + }, + "LogConfig": { + "type": "object", + "description": "The logging configuration for this container", + "properties": { + "Type": { + "description": "Name of the logging driver used for the container or \"none\"\nif logging is disabled.", + "type": "string", + "enum": [ + "local", + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "description": "Driver-specific configuration options for the logging driver.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "5", + "max-size": "10m" + } + } + } + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to the container.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "type": [ + "array", + "null" + ], + "description": "Initial console size, as an `[height, width]` array.\n", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + }, + "Annotations": { + "type": "object", + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n", + "additionalProperties": { + "type": "string" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "enum": [ + "private", + "host" + ], + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n" + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string", + "format": "ip-address", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n", + "additionalProperties": { + "type": "string" + } + }, + "Tmpfs": { + "type": "object", + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n", + "additionalProperties": { + "type": "string" + } + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "type": "integer", + "format": "int64", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "minimum": 0 + }, + "Sysctls": { + "type": [ + "object", + "null" + ], + "description": "A list of kernel parameters (sysctls) to set in the container.\n\nThis field is omitted if not set.", + "additionalProperties": { + "type": "string" + }, + "example": { + "net.ipv4.ip_forward": "1" + } + }, + "Runtime": { + "type": [ + "string", + "null" + ], + "description": "Runtime to use with this container." + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/asound", + "/proc/acpi", + "/proc/kcore", + "/proc/keys", + "/proc/latency_stats", + "/proc/timer_list", + "/proc/timer_stats", + "/proc/sched_debug", + "/proc/scsi", + "/sys/firmware", + "/sys/devices/virtual/powercap" + ] + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/bus", + "/proc/fs", + "/proc/irq", + "/proc/sys", + "/proc/sysrq-trigger" + ] + } + } + } + ], + "id": "engine-1.55-1b0f541ec40d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/HostConfig/allOf", + "destinationPointer": "/components/schemas/HostConfig/allOf" + }, + { + "pointer": "/components/schemas/IDResponse/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-f1a4a2ffc947", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/IDResponse/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/IPAM/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-db3deefd5144", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/IPAM/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/IPAMStatus/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-63dcb09a54a5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/IPAMStatus/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/ArgsEscaped/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-3472c644724f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/ArgsEscaped/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/ArgsEscaped/type", + "beforePresent": true, + "afterPresent": true, + "before": "boolean", + "after": [ + "boolean", + "null" + ], + "id": "engine-1.55-40f8fbf0ab10", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/ArgsEscaped/type", + "destinationPointer": "/components/schemas/ImageConfig/properties/ArgsEscaped/type" + }, + { + "pointer": "/components/schemas/ImageConfig/properties/ExposedPorts/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-6f2215341650", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/ExposedPorts/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/ExposedPorts/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-8d7461f1c448", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/ExposedPorts/type", + "destinationPointer": "/components/schemas/ImageConfig/properties/ExposedPorts/type" + }, + { + "pointer": "/components/schemas/ImageConfig/properties/OnBuild/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-dda051607eb2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/OnBuild/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/OnBuild/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-d8523bcfdf86", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/OnBuild/type", + "destinationPointer": "/components/schemas/ImageConfig/properties/OnBuild/type" + }, + { + "pointer": "/components/schemas/ImageConfig/properties/Shell/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-8dc420945067", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/Shell/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/Shell/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-45cddd70e77b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/Shell/type", + "destinationPointer": "/components/schemas/ImageConfig/properties/Shell/type" + }, + { + "pointer": "/components/schemas/ImageConfig/properties/StopSignal/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-c21b7e064c8e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/StopSignal/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/StopSignal/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-7e0a1b57f28b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/StopSignal/type", + "destinationPointer": "/components/schemas/ImageConfig/properties/StopSignal/type" + }, + { + "pointer": "/components/schemas/ImageHistoryResponseItem/properties/Comment/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-ef81019d7434", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageHistoryResponseItem/properties/Comment/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageHistoryResponseItem/properties/Created/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-1da1090749c2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageHistoryResponseItem/properties/Created/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageHistoryResponseItem/properties/CreatedBy/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-369746ed882b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageHistoryResponseItem/properties/CreatedBy/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageHistoryResponseItem/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-90f10d549e34", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageHistoryResponseItem/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageHistoryResponseItem/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-559b652dee7b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageHistoryResponseItem/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Architecture/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-091211193a2f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Architecture/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Author/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-8e95934ae282", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Author/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Author/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-ca914aeac89e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Author/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Author/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Comment/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-30b4eae62a50", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Comment/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Comment/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-6217e9353355", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Comment/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Comment/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Created/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-a67b6e56b2f1", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Created/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Created/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-bbabebb187b5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Created/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Created/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-a5f9d37af98e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Manifests/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-7e3930451689", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Manifests/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Manifests/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-15aeb69a592f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Manifests/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Manifests/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Metadata/properties/LastTagTime/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-9ce66a3ce45e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Metadata/properties/LastTagTime/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Metadata/properties/LastTagTime/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-dbb5dd3d6a8c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Metadata/properties/LastTagTime/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Metadata/properties/LastTagTime/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Os/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-67d5751955de", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Os/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/OsVersion/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-2dd849351f67", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/OsVersion/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/OsVersion/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-9123b00580cf", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/OsVersion/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/OsVersion/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/RootFS/properties/Type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-c11d3d4e53d9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/RootFS/properties/Type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-de29fb490fa9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Variant/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-e506122f0b68", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Variant/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Variant/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-0bd1d89eb57b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Variant/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Variant/type" + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/AttestationData/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-2d40649f97d9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/AttestationData/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/AttestationData/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-34bb91271a18", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/AttestationData/type", + "destinationPointer": "/components/schemas/ImageManifestSummary/properties/AttestationData/type" + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/ImageData/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-7b25cc3cf904", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/ImageData/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/ImageData/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-622720b9aa7c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/ImageData/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/ImageData/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-b4d3b763ee9a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/ImageData/type", + "destinationPointer": "/components/schemas/ImageManifestSummary/properties/ImageData/type" + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-545f29331257", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Containers/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-3f0964c1dbea", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Containers/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Created/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-17bf40bda20a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Created/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-67a4b649d538", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Labels/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-78dbb3636104", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Labels/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Manifests/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-1d22557b268b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Manifests/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/ParentId/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-88b80cb6a9a6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/ParentId/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/RepoDigests/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-6e6c0aac17b4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/RepoDigests/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/RepoTags/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-93bacf602211", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/RepoTags/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/SharedSize/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-ca9792e46f92", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/SharedSize/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-9eabbce1e22a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/IndexInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-1851b0847614", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/IndexInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/IndexInfo/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-d2e5efc0b47c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/IndexInfo/type", + "destinationPointer": "/components/schemas/IndexInfo/type" + }, + { + "pointer": "/components/schemas/ManagerStatus/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-20259d29a84e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ManagerStatus/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ManagerStatus/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-98a57f89466c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ManagerStatus/type", + "destinationPointer": "/components/schemas/ManagerStatus/type" + }, + { + "pointer": "/components/schemas/NRIInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-499fa6db43c3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NRIInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NRIInfo/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-8b8136a2f75d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NRIInfo/type", + "destinationPointer": "/components/schemas/NRIInfo/type" + }, + { + "pointer": "/components/schemas/Network/properties/Attachable/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-c039fd4e6204", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Network/properties/Attachable/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Network/properties/ConfigOnly/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-3d61d1ab8e98", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Network/properties/ConfigOnly/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Network/properties/Ingress/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-c72c5a2d01c4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Network/properties/Ingress/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Network/properties/Internal/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-47253b344cf7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Network/properties/Internal/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkConnectRequest/properties/Container/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-044bd3c97bd6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkConnectRequest/properties/Container/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkCreateResponse/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-b74b3fcb6a52", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkCreateResponse/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkCreateResponse/properties/Warning/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-bc37a5068f05", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkCreateResponse/properties/Warning/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkDisconnectRequest/properties/Container/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-c8f78d632acd", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkDisconnectRequest/properties/Container/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkDisconnectRequest/properties/Force/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-2e6bc6642949", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkDisconnectRequest/properties/Force/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkTaskInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-a56793c2196f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkTaskInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/annotations/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-ec0cfeded7c8", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/annotations/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/annotations/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-0d2d634da25a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/annotations/type", + "destinationPointer": "/components/schemas/OCIDescriptor/properties/annotations/type" + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/artifactType/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-55052987dbc2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/artifactType/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/artifactType/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-b393bd2a7ffb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/artifactType/type", + "destinationPointer": "/components/schemas/OCIDescriptor/properties/artifactType/type" + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/data/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-3500007964ed", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/data/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/data/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.55-56d0fcbfc3a7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/data/type", + "destinationPointer": "/components/schemas/OCIDescriptor/properties/data/type" + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/urls/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-1ff177303ec3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/urls/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/urls/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-7e82ec12f9b5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/urls/type", + "destinationPointer": "/components/schemas/OCIDescriptor/properties/urls/type" + }, + { + "pointer": "/components/schemas/OCIPlatform/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-b8e8a17e3949", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIPlatform/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIPlatform/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-d636a0ad3b00", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIPlatform/type", + "destinationPointer": "/components/schemas/OCIPlatform/type" + }, + { + "pointer": "/components/schemas/PeerInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-2f9120161d0f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PeerInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-ebbce18afdd0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Args/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-02cdea3fa2d7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Args/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Args/properties/Description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-2e6f8af3b345", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Args/properties/Description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Args/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-225c409d5967", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Args/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-af2320867bd3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Documentation/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-8a5f7c48973b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Documentation/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Interface/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-cd5327fa6603", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Interface/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Interface/properties/Socket/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-1f30b2205b4c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Interface/properties/Socket/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/IpcHost/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-3f2cd45a427d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/IpcHost/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Linux/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-b787cd953187", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Linux/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Linux/properties/AllowAllDevices/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-c13635ce8f84", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Linux/properties/AllowAllDevices/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Network/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-3f23cd1fbbeb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Network/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Network/properties/Type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-25201ac4a5a0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Network/properties/Type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/PidHost/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-90681522ae90", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/PidHost/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/PropagatedMount/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-9de29da193bc", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/PropagatedMount/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/User/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-d390bc64e21b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/User/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/WorkDir/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-763dda265092", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/WorkDir/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Enabled/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-3bb6c7b88794", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Enabled/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-5ad766a199cc", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/PluginReference/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-1544725a66bc", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/PluginReference/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Settings/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-55670ba786b4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Settings/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginDevice/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-6c3168bf4390", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginDevice/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginDevice/properties/Description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-2c127622db7e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginDevice/properties/Description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginDevice/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-bc2a51a142b7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginDevice/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginEnv/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-e690094f37d5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginEnv/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginEnv/properties/Description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-5357bb53f264", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginEnv/properties/Description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginEnv/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-e2294210224d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginEnv/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginMount/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-8e38f625d03c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginMount/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginMount/properties/Description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-862e209ad927", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginMount/properties/Description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginMount/properties/Destination/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-fcced6eb0bc7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginMount/properties/Destination/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginMount/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-5d519a2f8069", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginMount/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginMount/properties/Type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-3babb22581a4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginMount/properties/Type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PortMap/additionalProperties/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-bf23054514bc", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PortMap/additionalProperties/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PortMap/additionalProperties/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-07bbfd94d9c7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PortMap/additionalProperties/type", + "destinationPointer": "/components/schemas/PortMap/additionalProperties/type" + }, + { + "pointer": "/components/schemas/PortSummary/properties/PrivatePort/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-ed5b46b5674a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PortSummary/properties/PrivatePort/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PortSummary/properties/Type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-a0346b92cfa2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PortSummary/properties/Type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/RegistryServiceConfig/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-025eb33452f9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/RegistryServiceConfig/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/RegistryServiceConfig/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-f5fb95cb3e21", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/RegistryServiceConfig/type", + "destinationPointer": "/components/schemas/RegistryServiceConfig/type" + }, + { + "pointer": "/components/schemas/Resources/properties/Init/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-f5c88e14fa98", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Resources/properties/Init/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Resources/properties/Init/type", + "beforePresent": true, + "afterPresent": true, + "before": "boolean", + "after": [ + "boolean", + "null" + ], + "id": "engine-1.55-a7bdf8c36b65", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Resources/properties/Init/type", + "destinationPointer": "/components/schemas/Resources/properties/Init/type" + }, + { + "pointer": "/components/schemas/Resources/properties/PidsLimit/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-a75c80a95070", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Resources/properties/PidsLimit/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Resources/properties/PidsLimit/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-24723b7891fa", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Resources/properties/PidsLimit/type", + "destinationPointer": "/components/schemas/Resources/properties/PidsLimit/type" + }, + { + "pointer": "/components/schemas/RootFSStorageSnapshot/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-9bb8e5b0c313", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/RootFSStorageSnapshot/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Runtime/properties/runtimeArgs/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-e480eb73bd9f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Runtime/properties/runtimeArgs/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Runtime/properties/runtimeArgs/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-6d00bdf32f02", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Runtime/properties/runtimeArgs/type", + "destinationPointer": "/components/schemas/Runtime/properties/runtimeArgs/type" + }, + { + "pointer": "/components/schemas/Runtime/properties/status/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-0b9d6f8dfe1e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Runtime/properties/status/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Runtime/properties/status/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-56e40dbc4c95", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Runtime/properties/status/type", + "destinationPointer": "/components/schemas/Runtime/properties/status/type" + }, + { + "pointer": "/components/schemas/ServiceCreateResponse/properties/ID/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-4a218043aeb2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ServiceCreateResponse/properties/ID/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ServiceCreateResponse/properties/Warnings/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-e7702345982e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ServiceCreateResponse/properties/Warnings/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ServiceCreateResponse/properties/Warnings/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-e91bec0aecd5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ServiceCreateResponse/properties/Warnings/type", + "destinationPointer": "/components/schemas/ServiceCreateResponse/properties/Warnings/type" + }, + { + "pointer": "/components/schemas/ServiceInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-ed9e61d01a1a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ServiceInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SubnetStatus/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-dc2a9f0da82f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SubnetStatus/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/Managers/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-118a5b28533b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/Managers/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/Managers/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-f38085d277ef", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/Managers/type", + "destinationPointer": "/components/schemas/SwarmInfo/properties/Managers/type" + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/Nodes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-079845fd2f92", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/Nodes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/Nodes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-11608089ce4d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/Nodes/type", + "destinationPointer": "/components/schemas/SwarmInfo/properties/Nodes/type" + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/RemoteManagers/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-bd8a1236a6e7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/RemoteManagers/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/RemoteManagers/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-e79ad19b4d48", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/RemoteManagers/type", + "destinationPointer": "/components/schemas/SwarmInfo/properties/RemoteManagers/type" + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/CAConfig/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-bf74bc876060", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/CAConfig/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/CAConfig/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-1ceb47174e8a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/CAConfig/type", + "destinationPointer": "/components/schemas/SwarmSpec/properties/CAConfig/type" + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/Dispatcher/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-f8c96e88acd7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/Dispatcher/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/Dispatcher/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-d232666aec8e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/Dispatcher/type", + "destinationPointer": "/components/schemas/SwarmSpec/properties/Dispatcher/type" + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/Orchestration/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-e4a39d61d7a6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/Orchestration/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/Orchestration/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-d57588d7054e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/Orchestration/type", + "destinationPointer": "/components/schemas/SwarmSpec/properties/Orchestration/type" + }, + { + "pointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Details/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-967241d47d51", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Details/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Details/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-3f165c3612d3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Details/type", + "destinationPointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Details/type" + }, + { + "pointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Version/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-1f0ae0396f2b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Version/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Init/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-efc9de8b59b5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Init/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Init/type", + "beforePresent": true, + "afterPresent": true, + "before": "boolean", + "after": [ + "boolean", + "null" + ], + "id": "engine-1.55-88646544d5ed", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Init/type", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Init/type" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/Resources/properties/MemorySwappiness/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-53a655b743f2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/Resources/properties/MemorySwappiness/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/TaskSpec/properties/Resources/properties/MemorySwappiness/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-1bc08295d232", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/Resources/properties/MemorySwappiness/type", + "destinationPointer": "/components/schemas/TaskSpec/properties/Resources/properties/MemorySwappiness/type" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/Resources/properties/SwapBytes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-17ef8f0f8838", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/Resources/properties/SwapBytes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/TaskSpec/properties/Resources/properties/SwapBytes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.55-35d66f4e9221", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/Resources/properties/SwapBytes/type", + "destinationPointer": "/components/schemas/TaskSpec/properties/Resources/properties/SwapBytes/type" + }, + { + "pointer": "/components/schemas/Volume/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-872f92cd5141", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/Driver/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-800e3fbc2041", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/Driver/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/Labels/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-118781f291b3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/Labels/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/Mountpoint/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-ef58a8962681", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/Mountpoint/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-e68996fb1d8f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/Scope/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-525594cbb7b0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/Scope/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/UsageData/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-2441d501868a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/UsageData/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/UsageData/properties/RefCount/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-8f68b4c865c2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/UsageData/properties/RefCount/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/UsageData/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-10e3c5cf93b2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/UsageData/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/UsageData/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.55-978613386d1c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/UsageData/type", + "destinationPointer": "/components/schemas/Volume/properties/UsageData/type" + }, + { + "pointer": "/components/schemas/VolumeCreateRequest/properties/Driver/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-231b40bc6e18", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/VolumeCreateRequest/properties/Driver/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/VolumeCreateRequest/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.55-79584aeeeaed", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/VolumeCreateRequest/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/requestBody/content/application~1json/schema/properties/ConsoleSize/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-4ff432f286f3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/requestBody/content/application~1json/schema/properties/ConsoleSize/nullable", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-e504304587f3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type", + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json/schema/properties/ConsoleSize/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.55-6dd8a6ea2e23", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json/schema/properties/ConsoleSize/nullable", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.55-e1b360d1df38", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type", + "destinationPointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/GraphDriver/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.55-3d0abf47748f", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/GraphDriver/allOf", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/GraphDriver/allOf" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/Storage/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/Storage" + }, + { + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/Storage" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.55-dcc44e39a2a6", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/Storage/allOf", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/Storage/allOf" + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/ImageManifestDescriptor/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "x-nullable": true, + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store.\n\nThis field is not populated in the `GET /system/df` endpoint.\n" + } + ], + "after": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store.\n\nThis field is not populated in the `GET /system/df` endpoint.\n" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.55-d6eb3dd343f3", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/ImageManifestDescriptor/allOf", + "destinationPointer": "/components/schemas/ContainerSummary/properties/ImageManifestDescriptor/allOf" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Descriptor/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.55-d5ab92ec5880", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Descriptor/allOf", + "destinationPointer": "/components/schemas/ImageInspect/properties/Descriptor/allOf" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/GraphDriver/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.55-2bb8013972af", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/GraphDriver/allOf", + "destinationPointer": "/components/schemas/ImageInspect/properties/GraphDriver/allOf" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Identity/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "anyOf": [ + { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name." + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.55-73ca85a00beb", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Identity/allOf", + "destinationPointer": "/components/schemas/ImageInspect/properties/Identity/allOf" + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/ImageData/properties/Identity/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "description": "Identity holds information about the identity and origin of this image.\nFor image list responses, this can duplicate Build/Pull fields across\nimage manifests, because those parts are image-level metadata.\n", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "anyOf": [ + { + "description": "Identity holds information about the identity and origin of this image.\nFor image list responses, this can duplicate Build/Pull fields across\nimage manifests, because those parts are image-level metadata.\n" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.55-9a794868473c", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/ImageData/properties/Identity/allOf", + "destinationPointer": "/components/schemas/ImageManifestSummary/properties/ImageData/properties/Identity/allOf" + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Descriptor/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.55-6c19cf1e0f2d", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Descriptor/allOf", + "destinationPointer": "/components/schemas/ImageSummary/properties/Descriptor/allOf" + }, + { + "pointer": "/components/schemas/NetworkConnectRequest/properties/EndpointConfig/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/EndpointSettings" + }, + { + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/EndpointSettings" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.55-0e0f32e5e2d2", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkConnectRequest/properties/EndpointConfig/allOf", + "destinationPointer": "/components/schemas/NetworkConnectRequest/properties/EndpointConfig/allOf" + }, + { + "pointer": "/components/schemas/RootFSStorage/properties/Snapshot/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/RootFSStorageSnapshot" + }, + { + "description": "Information about the snapshot used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/RootFSStorageSnapshot" + }, + { + "anyOf": [ + { + "description": "Information about the snapshot used for the container's root filesystem.\n", + "type": "object" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.55-a008bef4981c", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/RootFSStorage/properties/Snapshot/allOf", + "destinationPointer": "/components/schemas/RootFSStorage/properties/Snapshot/allOf" + }, + { + "pointer": "/components/schemas/Storage/properties/RootFS/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/RootFSStorage" + }, + { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/RootFSStorage" + }, + { + "anyOf": [ + { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.55-dab886f3702b", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Storage/properties/RootFS/allOf", + "destinationPointer": "/components/schemas/Storage/properties/RootFS/allOf" + }, + { + "pointer": "/paths/~1build~1prune/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete builder cache.", + "id": "engine-1.55-76ef9c41d040", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build~1prune/post/description" + }, + { + "pointer": "/paths/~1commit/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a new image from a container.", + "id": "engine-1.55-5d4f23b29d08", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1commit/post/description" + }, + { + "pointer": "/paths/~1configs/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List configs.", + "id": "engine-1.55-413d0b2585f0", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs/get/description" + }, + { + "pointer": "/paths/~1configs~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a config.", + "id": "engine-1.55-2f5f825c39ec", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/description" + }, + { + "pointer": "/paths/~1configs~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete a config.", + "id": "engine-1.55-479793494148", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/delete/description" + }, + { + "pointer": "/paths/~1configs~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a config.", + "id": "engine-1.55-c54324a79b20", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/get/description" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Update a Config.", + "id": "engine-1.55-13e3ed94eff2", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/description" + }, + { + "pointer": "/paths/~1containers~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a container.", + "id": "engine-1.55-b0a36e58d43b", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/description" + }, + { + "pointer": "/paths/~1containers~1prune/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete stopped containers.", + "id": "engine-1.55-2dd86cb2c3d5", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1prune/post/description" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Remove a container.", + "id": "engine-1.55-ec6f7810ae3c", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}/delete/description" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Attach to a container via a websocket.", + "id": "engine-1.55-1457126608c1", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach~1ws/get/description" + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Rename a container.", + "id": "engine-1.55-da4a66c80198", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1rename/post/description" + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Restart a container.", + "id": "engine-1.55-498363bb9746", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1restart/post/description" + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Start a container.", + "id": "engine-1.55-9537c7a5936b", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1start/post/description" + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Stop a container.", + "id": "engine-1.55-de835fc5b32e", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stop/post/description" + }, + { + "pointer": "/paths/~1images~1prune/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete unused images.", + "id": "engine-1.55-825fe6b6aca0", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1prune/post/description" + }, + { + "pointer": "/paths/~1info/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Get system information.", + "id": "engine-1.55-7e086bafbfd5", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1info/get/description" + }, + { + "pointer": "/paths/~1networks~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a network.", + "id": "engine-1.55-f577f572ca2d", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/description" + }, + { + "pointer": "/paths/~1networks~1prune/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete unused networks.", + "id": "engine-1.55-3d1d75060209", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1prune/post/description" + }, + { + "pointer": "/paths/~1networks~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Remove a network.", + "id": "engine-1.55-1a0c6d7fa050", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/delete/description" + }, + { + "pointer": "/paths/~1networks~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a network.", + "id": "engine-1.55-10e546f9ea6d", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/get/description" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Disconnect a container from a network.", + "id": "engine-1.55-af5155420dac", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/description" + }, + { + "pointer": "/paths/~1nodes/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List nodes.", + "id": "engine-1.55-db4174902420", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes/get/description" + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete a node.", + "id": "engine-1.55-eb07ba7b51fc", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/delete/description" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a node.", + "id": "engine-1.55-8982653c698c", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/get/description" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Update a node.", + "id": "engine-1.55-0e1fe3ad1780", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/description" + }, + { + "pointer": "/paths/~1plugins~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a plugin.", + "id": "engine-1.55-1480754d0802", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1create/post/description" + }, + { + "pointer": "/paths/~1plugins~1privileges/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Get plugin privileges.", + "id": "engine-1.55-4d6b7f4206a1", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1privileges/get/description" + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Remove a plugin.", + "id": "engine-1.55-648b78632503", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}/delete/description" + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Disable a plugin.", + "id": "engine-1.55-bf85020296db", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1disable/post/description" + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Enable a plugin.", + "id": "engine-1.55-93b3dde7e817", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1enable/post/description" + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a plugin.", + "id": "engine-1.55-8c5b7fe5b366", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1json/get/description" + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Configure a plugin.", + "id": "engine-1.55-31b527342b5d", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1set/post/description" + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Upgrade a plugin.", + "id": "engine-1.55-e2be9209f22c", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1upgrade/post/description" + }, + { + "pointer": "/paths/~1secrets/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List secrets.", + "id": "engine-1.55-2943945b0c8f", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets/get/description" + }, + { + "pointer": "/paths/~1secrets~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a secret.", + "id": "engine-1.55-3c42af3ef580", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/description" + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete a secret.", + "id": "engine-1.55-68f466e6ec33", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/delete/description" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a secret.", + "id": "engine-1.55-3ec5c352b6dd", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/get/description" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Update a Secret.", + "id": "engine-1.55-d78f47f3ccd1", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/description" + }, + { + "pointer": "/paths/~1services/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List services.", + "id": "engine-1.55-f3d7809f2959", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services/get/description" + }, + { + "pointer": "/paths/~1services~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a service.", + "id": "engine-1.55-384d3ba7c867", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/description" + }, + { + "pointer": "/paths/~1services~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete a service.", + "id": "engine-1.55-ff3811e7506f", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/delete/description" + }, + { + "pointer": "/paths/~1services~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a service.", + "id": "engine-1.55-f9f9ee30a02a", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/get/description" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Update a service.", + "id": "engine-1.55-dc11d31a66ba", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/description" + }, + { + "pointer": "/paths/~1swarm/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect swarm.", + "id": "engine-1.55-f5507d6d063a", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm/get/description" + }, + { + "pointer": "/paths/~1swarm~1init/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Initialize a new swarm.", + "id": "engine-1.55-6c5ee3eac6db", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/description" + }, + { + "pointer": "/paths/~1swarm~1join/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Join an existing swarm.", + "id": "engine-1.55-50a0b0e2eff7", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1join/post/description" + }, + { + "pointer": "/paths/~1swarm~1leave/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Leave a swarm.", + "id": "engine-1.55-2a14eb8d37f1", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1leave/post/description" + }, + { + "pointer": "/paths/~1swarm~1unlock/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Unlock a locked manager.", + "id": "engine-1.55-0fb822794e3e", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlock/post/description" + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Get the unlock key.", + "id": "engine-1.55-b45fb4c44d39", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlockkey/get/description" + }, + { + "pointer": "/paths/~1swarm~1update/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Update a swarm.", + "id": "engine-1.55-184e1658bcbd", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1update/post/description" + }, + { + "pointer": "/paths/~1system~1df/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Get data usage information.", + "id": "engine-1.55-5fe539ff33af", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1system~1df/get/description" + }, + { + "pointer": "/paths/~1tasks/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List tasks.", + "id": "engine-1.55-4de080ea6dbf", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks/get/description" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a task.", + "id": "engine-1.55-419de5157321", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}/get/description" + }, + { + "pointer": "/paths/~1volumes/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List volumes.", + "id": "engine-1.55-6e5aae6f8b61", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes/get/description" + }, + { + "pointer": "/paths/~1volumes~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a volume.", + "id": "engine-1.55-ae557e325f95", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1create/post/description" + }, + { + "pointer": "/paths/~1volumes~1prune/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete unused volumes.", + "id": "engine-1.55-ad0a5bb72df0", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1prune/post/description" + }, + { + "pointer": "/paths/~1volumes~1{name}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a volume.", + "id": "engine-1.55-89db4b6541da", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/get/description" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/description", + "beforePresent": false, + "afterPresent": true, + "after": "\"Update a volume. Valid only for Swarm cluster volumes\"\n.", + "id": "engine-1.55-2e03340adfe1", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/description" + }, + { + "pointer": "/tags", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "Container", + "x-displayName": "Containers", + "description": "Create and manage containers.\n" + }, + { + "name": "Image", + "x-displayName": "Images" + }, + { + "name": "Network", + "x-displayName": "Networks", + "description": "Networks are user-defined networks that containers can be attached to.\nSee the [networking documentation](https://docs.docker.com/network/)\nfor more information.\n" + }, + { + "name": "Volume", + "x-displayName": "Volumes", + "description": "Create and manage persistent storage that can be attached to containers.\n" + }, + { + "name": "Exec", + "x-displayName": "Exec", + "description": "Run new commands inside running containers. Refer to the\n[command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\nfor more information.\n\nTo exec a command in a container, you first need to create an exec instance,\nthen start it. These two API endpoints are wrapped up in a single command-line\ncommand, `docker exec`.\n" + }, + { + "name": "Swarm", + "x-displayName": "Swarm", + "description": "Engines can be clustered together in a swarm. Refer to the\n[swarm mode documentation](https://docs.docker.com/engine/swarm/)\nfor more information.\n" + }, + { + "name": "Node", + "x-displayName": "Nodes", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode\nmust be enabled for these endpoints to work.\n" + }, + { + "name": "Service", + "x-displayName": "Services", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must\nbe enabled for these endpoints to work.\n" + }, + { + "name": "Task", + "x-displayName": "Tasks", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit\nof swarm. Swarm mode must be enabled for these endpoints to work.\n" + }, + { + "name": "Secret", + "x-displayName": "Secrets", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must\nbe enabled for these endpoints to work.\n" + }, + { + "name": "Config", + "x-displayName": "Configs", + "description": "Configs are application configurations that can be used by services. Swarm\nmode must be enabled for these endpoints to work.\n" + }, + { + "name": "Plugin", + "x-displayName": "Plugins" + }, + { + "name": "System", + "x-displayName": "System" + } + ], + "after": [ + { + "name": "Container", + "description": "Create and manage containers.\n", + "summary": "Containers", + "kind": "nav" + }, + { + "name": "Image", + "summary": "Images", + "kind": "nav", + "description": "Images reference." + }, + { + "name": "Network", + "description": "Networks are user-defined networks that containers can be attached to.\nSee the [networking documentation](https://docs.docker.com/network/)\nfor more information.\n", + "summary": "Networks", + "kind": "nav" + }, + { + "name": "Volume", + "description": "Create and manage persistent storage that can be attached to containers.\n", + "summary": "Volumes", + "kind": "nav" + }, + { + "name": "Exec", + "description": "Run new commands inside running containers. Refer to the\n[command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\nfor more information.\n\nTo exec a command in a container, you first need to create an exec instance,\nthen start it. These two API endpoints are wrapped up in a single command-line\ncommand, `docker exec`.\n", + "summary": "Exec", + "kind": "nav" + }, + { + "name": "Swarm", + "description": "Engines can be clustered together in a swarm. Refer to the\n[swarm mode documentation](https://docs.docker.com/engine/swarm/)\nfor more information.\n", + "summary": "Swarm", + "kind": "nav" + }, + { + "name": "Node", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode\nmust be enabled for these endpoints to work.\n", + "summary": "Nodes", + "kind": "nav" + }, + { + "name": "Service", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must\nbe enabled for these endpoints to work.\n", + "summary": "Services", + "kind": "nav" + }, + { + "name": "Task", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit\nof swarm. Swarm mode must be enabled for these endpoints to work.\n", + "summary": "Tasks", + "kind": "nav" + }, + { + "name": "Secret", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must\nbe enabled for these endpoints to work.\n", + "summary": "Secrets", + "kind": "nav" + }, + { + "name": "Config", + "description": "Configs are application configurations that can be used by services. Swarm\nmode must be enabled for these endpoints to work.\n", + "summary": "Configs", + "kind": "nav" + }, + { + "name": "Plugin", + "summary": "Plugins", + "kind": "nav", + "description": "Plugins reference." + }, + { + "name": "System", + "summary": "System", + "kind": "nav", + "description": "System reference." + }, + { + "name": "Distribution", + "description": "Distribution operations.", + "summary": "Distribution", + "kind": "nav" + }, + { + "name": "Session", + "description": "Session operations.", + "summary": "Session", + "kind": "nav" + } + ], + "id": "engine-1.55-8d93cf25f3e7", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": "/tags", + "destinationPointer": "/tags" + }, + { + "pointer": "/components/schemas/EndpointPortConfig/properties/PublishMode/description", + "beforePresent": true, + "afterPresent": true, + "before": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "after": "The mode in which port is published.\n\n\n\n\n\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "id": "engine-1.55-7f967a3d7e0e", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/EndpointPortConfig/properties/PublishMode/description", + "destinationPointer": "/components/schemas/EndpointPortConfig/properties/PublishMode/description" + }, + { + "pointer": "/components/schemas/FirewallInfo/properties/Info/description", + "beforePresent": true, + "afterPresent": true, + "before": "Information about the firewall backend, provided as\n\"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "after": "Information about the firewall backend, provided as\n\"label\" / \"value\" pairs.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "id": "engine-1.55-26a3fc86cea8", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/FirewallInfo/properties/Info/description", + "destinationPointer": "/components/schemas/FirewallInfo/properties/Info/description" + }, + { + "pointer": "/components/schemas/NRIInfo/properties/Info/description", + "beforePresent": true, + "afterPresent": true, + "before": "Information about NRI, provided as \"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "after": "Information about NRI, provided as \"label\" / \"value\" pairs.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "id": "engine-1.55-39bec68e2ba6", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NRIInfo/properties/Info/description", + "destinationPointer": "/components/schemas/NRIInfo/properties/Info/description" + }, + { + "pointer": "/components/schemas/PluginsInfo/description", + "beforePresent": true, + "afterPresent": true, + "before": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n", + "after": "Available plugins per type.\n\n\n\n\n\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n", + "id": "engine-1.55-04c928b55092", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginsInfo/description", + "destinationPointer": "/components/schemas/PluginsInfo/description" + }, + { + "pointer": "/components/schemas/Runtime/properties/status/description", + "beforePresent": true, + "afterPresent": true, + "before": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "after": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "id": "engine-1.55-67960b45330c", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Runtime/properties/status/description", + "destinationPointer": "/components/schemas/Runtime/properties/status/description" + }, + { + "pointer": "/components/schemas/SystemInfo/properties/DriverStatus/description", + "beforePresent": true, + "afterPresent": true, + "before": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "after": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "id": "engine-1.55-0329e3b6fbc2", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemInfo/properties/DriverStatus/description", + "destinationPointer": "/components/schemas/SystemInfo/properties/DriverStatus/description" + }, + { + "pointer": "/components/schemas/SystemInfo/properties/ID/description", + "beforePresent": true, + "afterPresent": true, + "before": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "after": "Unique identifier of the daemon.\n\n\n\n\n\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "id": "engine-1.55-d4f94dbd2612", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemInfo/properties/ID/description", + "destinationPointer": "/components/schemas/SystemInfo/properties/ID/description" + }, + { + "pointer": "/components/schemas/SystemInfo/properties/Labels/description", + "beforePresent": true, + "afterPresent": true, + "before": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "after": "User-defined labels (key/value metadata) as set on the daemon.\n\n\n\n\n\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "id": "engine-1.55-1e49e9f0457a", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemInfo/properties/Labels/description", + "destinationPointer": "/components/schemas/SystemInfo/properties/Labels/description" + }, + { + "pointer": "/components/schemas/SystemInfo/properties/OSVersion/description", + "beforePresent": true, + "afterPresent": true, + "before": "Version of the host's operating system\n\n


\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "after": "Version of the host's operating system\n\n\n\n\n\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "id": "engine-1.55-f86780f70899", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemInfo/properties/OSVersion/description", + "destinationPointer": "/components/schemas/SystemInfo/properties/OSVersion/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/description", + "beforePresent": true, + "afterPresent": true, + "before": "Container spec for the service.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "after": "Container spec for the service.\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "id": "engine-1.55-e1b22562c6de", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/File/description", + "beforePresent": true, + "afterPresent": true, + "before": "File represents a specific target that is backed by a file.\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n", + "after": "File represents a specific target that is backed by a file.\n\n\n\n\n\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n", + "id": "engine-1.55-6f16e374c89c", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/File/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/File/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/Runtime/description", + "beforePresent": true, + "afterPresent": true, + "before": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n", + "after": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n\n\n\n\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n", + "id": "engine-1.55-6052ab3cc9f0", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/Runtime/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/Runtime/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Config/description", + "beforePresent": true, + "afterPresent": true, + "before": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "after": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "id": "engine-1.55-07f8929a3621", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Config/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Config/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/File/description", + "beforePresent": true, + "afterPresent": true, + "before": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "after": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "id": "engine-1.55-a9af2cd3fb7f", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/File/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/File/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Registry/description", + "beforePresent": true, + "afterPresent": true, + "before": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "after": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "id": "engine-1.55-b07336ab42a3", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Registry/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Registry/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/NetworkAttachmentSpec/description", + "beforePresent": true, + "afterPresent": true, + "before": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "after": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "id": "engine-1.55-fb45f5fdc555", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/NetworkAttachmentSpec/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/NetworkAttachmentSpec/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/PluginSpec/description", + "beforePresent": true, + "afterPresent": true, + "before": "Plugin spec for the service. *(Experimental release only.)*\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "after": "Plugin spec for the service. *(Experimental release only.)*\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "id": "engine-1.55-bf2c070cb392", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/PluginSpec/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/PluginSpec/description" + }, + { + "pointer": "/paths/~1images~1search/get/responses/200/content/application~1json/schema/items/properties/is_automated/description", + "beforePresent": true, + "afterPresent": true, + "before": "Whether this repository has automated builds enabled.\n\n


\n\n> **Deprecated**: This field is deprecated and will always be \"false\".\n", + "after": "Whether this repository has automated builds enabled.\n\n\n\n\n\n\n> **Deprecated**: This field is deprecated and will always be \"false\".\n", + "id": "engine-1.55-c61fab38f68a", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/responses/200/content/application~1json/schema/items/properties/is_automated/description", + "destinationPointer": "/paths/~1images~1search/get/responses/200/content/application~1json/schema/items/properties/is_automated/description" + }, + { + "pointer": "/paths/~1_ping/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-58ad577fab31", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1_ping/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-0d13f473d0ad", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-8357f99366f6", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1_ping/head/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-1126748b86c2", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-cb39a2b10f31", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-918a6a86ff4a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-375043447441", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-753730442b6e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-9883afc857b6", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-dd0d1ff52034", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/409/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-1714d4399fd5", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/409/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-83c84e9f155b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": {} + }, + "id": "engine-1.55-8753b847ea7d", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-ae99432f7518", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content/application~1x-tar", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-ee5d4fbe8c9a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content/application~1x-tar", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-da67029e4cf7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content/application~1x-tar", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-5b1662077caf", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content/application~1x-tar", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-cf6ce9fa4865", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-ff9d91720016", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-794f5d92128f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d2c291dd0caa", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/403/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-ad8b28dd9160", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/403/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-1e0cbd182ad4", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-0fe5c397e45f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d7418b2edfc7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d27fe3dd1532", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d6d053ac5b9b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-fac48a263743", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-154fa359a757", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-5a25452b1ed1", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-b0771c2bdfa5", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-6a1f7c7288a3", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-0a18defa2788", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d35e7209fa30", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1export/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/500/content/application~1octet-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-f71e21b3661f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/responses/500/content/application~1octet-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-bdd7198a082e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/409/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-61f79a32e180", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/409/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-a2ff3d36341d", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-4b2a36942e2f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-0d7737b41b42", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d1c6c1dd5036", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-95c2bd091abf", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-28d517448277", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-82d79fa47678", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/409/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-67285f334fad", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/409/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-b8f941a54c0e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-4412fa721c4f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-86e7ee06eeea", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-61c1e07a5a2f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d853a4c673c0", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-7f662f1214d9", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-fc33e1c128fa", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-965f3fcdaa71", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-8fe9059ae1c0", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-446da0881f87", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-b7aa3caab1cb", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-6351c6673c1a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-9113b940846c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-167c2a8247b7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/400/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-a93b29ba23c5", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1events/get/responses/400/content/application~1json" + }, + { + "pointer": "/paths/~1events/get/responses/400/content/application~1json-seq", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-9493370b1cab", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/400/content/application~1json-seq", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/400/content/application~1jsonl", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-0dc625b45b49", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/400/content/application~1jsonl", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/400/content/application~1x-ndjson", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-f20c90e5d932", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/400/content/application~1x-ndjson", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-718c181d9243", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1events/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1events/get/responses/500/content/application~1json-seq", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-20a81e3c2ce7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/500/content/application~1json-seq", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/500/content/application~1jsonl", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-30f4a1459543", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/500/content/application~1jsonl", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/500/content/application~1x-ndjson", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-c5585fe5962e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/500/content/application~1x-ndjson", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-4f00ffc2608d", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-87da18fee0df", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-3a6aa52ce200", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-7ce2a67d94e8", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1json" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-fa672416eeb2", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-889101f745be", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-35949b21b286", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1json" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-46c0b85b5d38", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-ce0cb011246c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1get/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-56d14a45c4f7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1get/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1images~1get/get/responses/500/content/application~1x-tar", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-040816f267f0", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1get/get/responses/500/content/application~1x-tar", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d099021bf7e3", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1get/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/500/content/application~1x-tar", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-f3b2a1503dbb", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1get/get/responses/500/content/application~1x-tar", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-09693819e0df", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-5ceb0aab964b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-cf1dac93275b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-aee4d4ad0058", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/409/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-9270214a3275", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/409/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-f80c9e412655", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/403/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-6f64ef80b465", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/403/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-20303caae0c4", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-3122ff920d26", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-b81db107ee4d", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/403/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-1e198d0c3c18", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/403/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-0ab6324ec1dd", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-1a522c339e6c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-530206946672", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-44178c88d88a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-a17e4dbfbff8", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-a9da4d2b3f99", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-27ed757bc79c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-c3a04dc21234", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-058a4a78f3ce", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-84148d443a16", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-8aec76eee1a9", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-227bbbc7ebdd", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-deb27515c556", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-dacce7864533", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-e66cf9df3002", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-ba6e57c1e937", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-2f6487ab5d83", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1create/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-5276a889a58c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1create/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1privileges/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-1065c5f28c4e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1privileges/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-f781f6db8b88", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-5030eb807ddb", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-2f057c8b2eff", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-1ef0f666bc8b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-bc7d31900a74", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-a1a25fab321c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-f7dcc4d52f63", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-1ed1c955dc86", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d589b1810378", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1push/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-3a4886927bc7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1push/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-aaa01a7a1062", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-b52a6617d073", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-243c7a18a4f9", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-334f6ad46ba1", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d827f1844718", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-fd909b048898", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d35ea6dcc977", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-b34337f8413f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-fc82bc21e03c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-060f0ff58d80", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-64cd9bec0e6f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-ade07e5e2a70", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-b6bc8415325b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-bdd6a8e581c3", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-ddcc7d4daf06", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-9fcf975a1043", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-17dfa2028dae", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d0132ea45b8a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-dddba6ddfb42", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-bb59dc234188", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1json" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-efd1ecf0f407", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-94b08b0740cf", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1session/post/responses/400/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-fb147e5b1334", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1session/post/responses/400/content/application~1json" + }, + { + "pointer": "/paths/~1session/post/responses/400/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-81ab5eac1bef", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1session/post/responses/400/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1session/post/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-77d0b94e29c0", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1session/post/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1session/post/responses/500/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-2699d8d3dd68", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1session/post/responses/500/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-fef9a9c89105", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-0efd0bfb0c79", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-e0b750aaacc2", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-09789d1125ec", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-3cc9c3ecb60a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-2abd0c4386f6", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-a3cd3bb115ff", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-ac5c06e59002", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-19b7569c0449", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d6df4f352fa1", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1leave/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-4525cf996e07", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1leave/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-f53dca0b13f1", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-ba802ac2d5ef", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-a2a735a84d94", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-5d6cc3fa3cf8", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-c5719da3a671", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1system~1df/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-84694ff6cdb7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1system~1df/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-355adecb2984", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-7505c9aa7a76", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-5cf5f9bc4f2f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-d0cfa0725856", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1json" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-bf09c3995a3c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-06b527719f4d", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-86db2aed42a4", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/409/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-4fb14b8dc84f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/409/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.55-80770e1c382e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "text/plain": { + "schema": { + "type": "string", + "example": "(empty)" + } + } + }, + "id": "engine-1.55-b62e54b25a5a", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/content", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/500/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-7c02acf67260", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/500/content", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-754743d2ee2e", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.55-c13a34e25df1", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.55-a2a2fccece33", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content", + "destinationPointer": null + }, + { + "pointer": "/security", + "beforePresent": false, + "afterPresent": true, + "after": [], + "id": "engine-1.55-2b9d4937db9a", + "stage": "explicit-root-security", + "classification": "editorial completion", + "rationale": "Make the existing absence of inherited HTTP authentication explicit. Local socket permissions remain connection metadata.", + "evidence": "OpenAPI root security inheritance; existing source operation policies", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/security" + } + ] +} diff --git a/prototypes/api-docs/migrations/engine-1.55.patch b/prototypes/api-docs/migrations/engine-1.55.patch new file mode 100644 index 000000000000..f3d235b5d082 --- /dev/null +++ b/prototypes/api-docs/migrations/engine-1.55.patch @@ -0,0 +1,27641 @@ +--- original/engine-1.55.yaml ++++ converted/engine-1.55.yaml +@@ -1,30 +1,9 @@ +-# A Swagger 2.0 (a.k.a. OpenAPI) definition of the Engine API. +-# +-# This is used for generating API documentation and the types used by the +-# client/server. See api/README.md for more information. +-# +-# Some style notes: +-# - This file is used by ReDoc, which allows GitHub Flavored Markdown in +-# descriptions. +-# - There is no maximum line length, for ease of editing and pretty diffs. +-# - operationIds are in the format "NounVerb", with a singular noun. +- +-swagger: "2.0" +-schemes: +- - "http" +- - "https" +-produces: +- - "application/json" +- - "text/plain" +-consumes: +- - "application/json" +- - "text/plain" +-basePath: "/v1.55" ++openapi: 3.2.0 + info: +- title: "Docker Engine API" ++ title: Docker Engine API + version: "1.55" + x-logo: +- url: "https://docs.docker.com/assets/images/logo-docker-main.png" ++ url: https://docs.docker.com/assets/images/logo-docker-main.png + description: | + The Engine API is an HTTP API served by Docker Engine. It is the API the + Docker client uses to communicate with the Engine, so everything the Docker +@@ -96,34 +75,29 @@ + "identitytoken": "9cbaf023786cd7..." + } + ``` +- +-# The tags on paths define the menu sections in the ReDoc documentation, so +-# the usage of tags must make sense for that: +-# - They should be singular, not plural. +-# - There should not be too many tags, or the menu becomes unwieldy. For +-# example, it is preferable to add a path to the "System" tag instead of +-# creating a tag with a single path in it. +-# - The order of tags in this list defines the order in the menu. + tags: +- # Primary objects +- - name: "Container" +- x-displayName: "Containers" ++ - name: Container + description: | + Create and manage containers. +- - name: "Image" +- x-displayName: "Images" +- - name: "Network" +- x-displayName: "Networks" ++ summary: Containers ++ kind: nav ++ - name: Image ++ summary: Images ++ kind: nav ++ description: Images reference. ++ - name: Network + description: | + Networks are user-defined networks that containers can be attached to. + See the [networking documentation](https://docs.docker.com/network/) + for more information. +- - name: "Volume" +- x-displayName: "Volumes" ++ summary: Networks ++ kind: nav ++ - name: Volume + description: | + Create and manage persistent storage that can be attached to containers. +- - name: "Exec" +- x-displayName: "Exec" ++ summary: Volumes ++ kind: nav ++ - name: Exec + description: | + Run new commands inside running containers. Refer to the + [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) +@@ -132,8189 +106,65 @@ + To exec a command in a container, you first need to create an exec instance, + then start it. These two API endpoints are wrapped up in a single command-line + command, `docker exec`. +- +- # Swarm things +- - name: "Swarm" +- x-displayName: "Swarm" ++ summary: Exec ++ kind: nav ++ - name: Swarm + description: | + Engines can be clustered together in a swarm. Refer to the + [swarm mode documentation](https://docs.docker.com/engine/swarm/) + for more information. +- - name: "Node" +- x-displayName: "Nodes" ++ summary: Swarm ++ kind: nav ++ - name: Node + description: | + Nodes are instances of the Engine participating in a swarm. Swarm mode + must be enabled for these endpoints to work. +- - name: "Service" +- x-displayName: "Services" ++ summary: Nodes ++ kind: nav ++ - name: Service + description: | + Services are the definitions of tasks to run on a swarm. Swarm mode must + be enabled for these endpoints to work. +- - name: "Task" +- x-displayName: "Tasks" ++ summary: Services ++ kind: nav ++ - name: Task + description: | + A task is a container running on a swarm. It is the atomic scheduling unit + of swarm. Swarm mode must be enabled for these endpoints to work. +- - name: "Secret" +- x-displayName: "Secrets" ++ summary: Tasks ++ kind: nav ++ - name: Secret + description: | + Secrets are sensitive data that can be used by services. Swarm mode must + be enabled for these endpoints to work. +- - name: "Config" +- x-displayName: "Configs" ++ summary: Secrets ++ kind: nav ++ - name: Config + description: | + Configs are application configurations that can be used by services. Swarm + mode must be enabled for these endpoints to work. +- # System things +- - name: "Plugin" +- x-displayName: "Plugins" +- - name: "System" +- x-displayName: "System" +- +-definitions: +- ImageHistoryResponseItem: +- type: "object" +- x-go-name: HistoryResponseItem +- title: "HistoryResponseItem" +- description: "individual image layer information in response to ImageHistory operation" +- required: [Id, Created, CreatedBy, Tags, Size, Comment] +- properties: +- Id: +- type: "string" +- x-nullable: false +- Created: +- type: "integer" +- format: "int64" +- x-nullable: false +- CreatedBy: +- type: "string" +- x-nullable: false +- Tags: +- type: "array" +- items: +- type: "string" +- Size: +- type: "integer" +- format: "int64" +- x-nullable: false +- Comment: +- type: "string" +- x-nullable: false +- PortSummary: +- type: "object" +- description: | +- Describes a port-mapping between the container and the host. +- required: [PrivatePort, Type] +- properties: +- IP: +- type: "string" +- format: "ip-address" +- description: "Host IP address that the container's port is mapped to" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- PrivatePort: +- type: "integer" +- format: "uint16" +- x-nullable: false +- description: "Port on the container" +- PublicPort: +- type: "integer" +- format: "uint16" +- description: "Port exposed on the host" +- Type: +- type: "string" +- x-nullable: false +- enum: ["tcp", "udp", "sctp"] +- example: +- PrivatePort: 8080 +- PublicPort: 80 +- Type: "tcp" +- +- MountType: +- description: |- +- The mount type. Available types: +- +- - `bind` a mount of a file or directory from the host into the container. +- - `cluster` a Swarm cluster volume. +- - `image` an OCI image. +- - `npipe` a named pipe from the host into the container. +- - `tmpfs` a `tmpfs`. +- - `volume` a docker volume with the given `Name`. +- type: "string" +- enum: +- - "bind" +- - "cluster" +- - "image" +- - "npipe" +- - "tmpfs" +- - "volume" +- example: "volume" +- +- MountPoint: +- type: "object" +- description: | +- MountPoint represents a mount point configuration inside the container. +- This is used for reporting the mountpoints in use by a container. +- properties: +- Type: +- description: | +- The mount type: +- +- - `bind` a mount of a file or directory from the host into the container. +- - `cluster` a Swarm cluster volume. +- - `image` an OCI image. +- - `npipe` a named pipe from the host into the container. +- - `tmpfs` a `tmpfs`. +- - `volume` a docker volume with the given `Name`. +- allOf: +- - $ref: "#/definitions/MountType" +- example: "volume" +- Name: +- description: | +- Name is the name reference to the underlying data defined by `Source` +- e.g., the volume name. +- type: "string" +- example: "myvolume" +- Source: +- description: | +- Source location of the mount. +- +- For volumes, this contains the storage location of the volume (within +- `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains +- the source (host) part of the bind-mount. For `tmpfs` mount points, this +- field is empty. +- type: "string" +- example: "/var/lib/docker/volumes/myvolume/_data" +- Destination: +- description: | +- Destination is the path relative to the container root (`/`) where +- the `Source` is mounted inside the container. +- type: "string" +- example: "/usr/share/nginx/html/" +- Driver: +- description: | +- Driver is the volume driver used to create the volume (if it is a volume). +- type: "string" +- example: "local" +- Mode: +- description: | +- Mode is a comma separated list of options supplied by the user when +- creating the bind/volume mount. +- +- The default is platform-specific (`"z"` on Linux, empty on Windows). +- type: "string" +- example: "z" +- RW: +- description: | +- Whether the mount is mounted writable (read-write). +- type: "boolean" +- example: true +- Propagation: +- description: | +- Propagation describes how mounts are propagated from the host into the +- mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) +- for details. This field is not used on Windows. +- type: "string" +- example: "" +- +- DeviceMapping: +- type: "object" +- description: "A device mapping between the host and container" +- properties: +- PathOnHost: +- type: "string" +- PathInContainer: +- type: "string" +- CgroupPermissions: +- type: "string" +- example: +- PathOnHost: "/dev/deviceName" +- PathInContainer: "/dev/deviceName" +- CgroupPermissions: "mrw" +- +- DeviceRequest: +- type: "object" +- description: "A request for devices to be sent to device drivers" +- properties: +- Driver: +- description: | +- The name of the device driver to use for this request. +- +- Note that if this is specified the capabilities are ignored when +- selecting a device driver. +- type: "string" +- example: "nvidia" +- Count: +- type: "integer" +- example: -1 +- DeviceIDs: +- type: "array" +- items: +- type: "string" +- example: +- - "0" +- - "1" +- - "GPU-fef8089b-4820-abfc-e83e-94318197576e" +- Capabilities: +- description: | +- A list of capabilities; an OR list of AND lists of capabilities. +- +- Note that if a driver is specified the capabilities have no effect on +- selecting a driver as the driver name is used directly. +- +- Note that if no driver is specified the capabilities are used to +- select a driver with the required capabilities. +- type: "array" +- items: +- type: "array" +- items: +- type: "string" +- example: +- # gpu AND nvidia AND compute +- - ["gpu", "nvidia", "compute"] +- Options: +- description: | +- Driver-specific options, specified as a key/value pairs. These options +- are passed directly to the driver. +- type: "object" +- additionalProperties: +- type: "string" +- +- ThrottleDevice: +- type: "object" +- properties: +- Path: +- description: "Device path" +- type: "string" +- Rate: +- description: "Rate" +- type: "integer" +- format: "int64" +- minimum: 0 +- +- Mount: +- type: "object" +- properties: +- Target: +- description: "Container path." +- type: "string" +- Source: +- description: |- +- Mount source (e.g. a volume name, a host path). The source cannot be +- specified when using `Type=tmpfs`. For `Type=bind`, the source path +- must either exist, or the `CreateMountpoint` must be set to `true` to +- create the source path on the host if missing. +- +- For `Type=npipe`, the pipe must exist prior to creating the container. +- type: "string" +- Type: +- description: | +- The mount type. Available types: +- +- - `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container. +- - `cluster` a Swarm cluster volume +- - `image` Mounts an image. +- - `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container. +- - `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs. +- - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. +- allOf: +- - $ref: "#/definitions/MountType" +- ReadOnly: +- description: "Whether the mount should be read-only." +- type: "boolean" +- Consistency: +- description: "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." +- type: "string" +- BindOptions: +- description: "Optional configuration for the `bind` type." +- type: "object" +- properties: +- Propagation: +- description: "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`." +- type: "string" +- enum: +- - "private" +- - "rprivate" +- - "shared" +- - "rshared" +- - "slave" +- - "rslave" +- NonRecursive: +- description: "Disable recursive bind mount." +- type: "boolean" +- default: false +- CreateMountpoint: +- description: "Create mount point on host if missing" +- type: "boolean" +- default: false +- ReadOnlyNonRecursive: +- description: | +- Make the mount non-recursively read-only, but still leave the mount recursive +- (unless NonRecursive is set to `true` in conjunction). +- +- Added in v1.44, before that version all read-only mounts were +- non-recursive by default. To match the previous behaviour this +- will default to `true` for clients on versions prior to v1.44. +- type: "boolean" +- default: false +- ReadOnlyForceRecursive: +- description: "Raise an error if the mount cannot be made recursively read-only." +- type: "boolean" +- default: false +- VolumeOptions: +- description: "Optional configuration for the `volume` type." +- type: "object" +- properties: +- NoCopy: +- description: "Populate volume with data from the target." +- type: "boolean" +- default: false +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- DriverConfig: +- description: "Map of driver specific options" +- type: "object" +- properties: +- Name: +- description: "Name of the driver to use to create the volume." +- type: "string" +- Options: +- description: "key/value map of driver specific options." +- type: "object" +- additionalProperties: +- type: "string" +- Subpath: +- description: "Source path inside the volume. Must be relative without any back traversals." +- type: "string" +- example: "dir-inside-volume/subdirectory" +- ImageOptions: +- description: "Optional configuration for the `image` type." +- type: "object" +- properties: +- Subpath: +- description: "Source path inside the image. Must be relative without any back traversals." +- type: "string" +- example: "dir-inside-image/subdirectory" +- TmpfsOptions: +- description: "Optional configuration for the `tmpfs` type." +- type: "object" +- properties: +- SizeBytes: +- description: "The size for the tmpfs mount in bytes." +- type: "integer" +- format: "int64" +- Mode: +- description: | +- The permission mode for the tmpfs mount in an integer. +- The value must not be in octal format (e.g. 755) but rather +- the decimal representation of the octal value (e.g. 493). +- type: "integer" +- Options: +- description: | +- The options to be passed to the tmpfs mount. An array of arrays. +- Flag options should be provided as 1-length arrays. Other types +- should be provided as as 2-length arrays, where the first item is +- the key and the second the value. +- type: "array" +- items: +- type: "array" +- minItems: 1 +- maxItems: 2 +- items: +- type: "string" +- example: +- [["noexec"]] +- +- RestartPolicy: +- description: | +- The behavior to apply when the container exits. The default is not to +- restart. +- +- An ever increasing delay (double the previous delay, starting at 100ms) is +- added before each restart to prevent flooding the server. +- type: "object" +- properties: +- Name: +- type: "string" +- description: | +- - Empty string means not to restart +- - `no` Do not automatically restart +- - `always` Always restart +- - `unless-stopped` Restart always except when the user has manually stopped the container +- - `on-failure` Restart only when the container exit code is non-zero +- enum: +- - "" +- - "no" +- - "always" +- - "unless-stopped" +- - "on-failure" +- MaximumRetryCount: +- type: "integer" +- description: | +- If `on-failure` is used, the number of times to retry before giving up. +- +- Resources: +- description: "A container's resources (cgroups config, ulimits, etc)" +- type: "object" +- properties: +- # Applicable to all platforms +- CpuShares: +- description: | +- An integer value representing this container's relative CPU weight +- versus other containers. +- type: "integer" +- Memory: +- description: "Memory limit in bytes." +- type: "integer" +- format: "int64" +- default: 0 +- # Applicable to UNIX platforms +- CgroupParent: +- description: | +- Path to `cgroups` under which the container's `cgroup` is created. If +- the path is not absolute, the path is considered to be relative to the +- `cgroups` path of the init process. Cgroups are created if they do not +- already exist. +- type: "string" +- BlkioWeight: +- description: "Block IO weight (relative weight)." +- type: "integer" +- minimum: 0 +- maximum: 1000 +- BlkioWeightDevice: +- description: | +- Block IO weight (relative device weight) in the form: +- +- ``` +- [{"Path": "device_path", "Weight": weight}] +- ``` +- type: "array" +- items: +- type: "object" +- properties: +- Path: +- type: "string" +- Weight: +- type: "integer" +- minimum: 0 +- BlkioDeviceReadBps: +- description: | +- Limit read rate (bytes per second) from a device, in the form: +- +- ``` +- [{"Path": "device_path", "Rate": rate}] +- ``` +- type: "array" +- items: +- $ref: "#/definitions/ThrottleDevice" +- BlkioDeviceWriteBps: +- description: | +- Limit write rate (bytes per second) to a device, in the form: +- +- ``` +- [{"Path": "device_path", "Rate": rate}] +- ``` +- type: "array" +- items: +- $ref: "#/definitions/ThrottleDevice" +- BlkioDeviceReadIOps: +- description: | +- Limit read rate (IO per second) from a device, in the form: +- +- ``` +- [{"Path": "device_path", "Rate": rate}] +- ``` +- type: "array" +- items: +- $ref: "#/definitions/ThrottleDevice" +- BlkioDeviceWriteIOps: +- description: | +- Limit write rate (IO per second) to a device, in the form: +- +- ``` +- [{"Path": "device_path", "Rate": rate}] +- ``` +- type: "array" +- items: +- $ref: "#/definitions/ThrottleDevice" +- CpuPeriod: +- description: "The length of a CPU period in microseconds." +- type: "integer" +- format: "int64" +- CpuQuota: +- description: | +- Microseconds of CPU time that the container can get in a CPU period. +- type: "integer" +- format: "int64" +- CpuRealtimePeriod: +- description: | +- The length of a CPU real-time period in microseconds. Set to 0 to +- allocate no time allocated to real-time tasks. +- type: "integer" +- format: "int64" +- CpuRealtimeRuntime: +- description: | +- The length of a CPU real-time runtime in microseconds. Set to 0 to +- allocate no time allocated to real-time tasks. +- type: "integer" +- format: "int64" +- CpusetCpus: +- description: | +- CPUs in which to allow execution (e.g., `0-3`, `0,1`). +- type: "string" +- example: "0-3" +- CpusetMems: +- description: | +- Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only +- effective on NUMA systems. +- type: "string" +- Devices: +- description: "A list of devices to add to the container." +- type: "array" +- items: +- $ref: "#/definitions/DeviceMapping" +- DeviceCgroupRules: +- description: "a list of cgroup rules to apply to the container" +- type: "array" +- items: +- type: "string" +- example: "c 13:* rwm" +- DeviceRequests: +- description: | +- A list of requests for devices to be sent to device drivers. +- type: "array" +- items: +- $ref: "#/definitions/DeviceRequest" +- MemoryReservation: +- description: "Memory soft limit in bytes." +- type: "integer" +- format: "int64" +- MemorySwap: +- description: | +- Total memory limit (memory + swap). Set as `-1` to enable unlimited +- swap. +- type: "integer" +- format: "int64" +- MemorySwappiness: +- description: | +- Tune a container's memory swappiness behavior. Accepts an integer +- between 0 and 100. +- type: "integer" +- format: "int64" +- minimum: 0 +- maximum: 100 +- NanoCpus: +- description: "CPU quota in units of 10-9 CPUs." +- type: "integer" +- format: "int64" +- OomKillDisable: +- description: "Disable OOM Killer for the container." +- type: "boolean" +- Init: +- description: | +- Run an init inside the container that forwards signals and reaps +- processes. This field is omitted if empty, and the default (as +- configured on the daemon) is used. +- type: "boolean" +- x-nullable: true +- PidsLimit: +- description: | +- Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` +- to not change. +- type: "integer" +- format: "int64" +- x-nullable: true +- Ulimits: +- description: | +- A list of resource limits to set in the container. For example: +- +- ``` +- {"Name": "nofile", "Soft": 1024, "Hard": 2048} +- ``` +- type: "array" +- items: +- type: "object" +- properties: +- Name: +- description: "Name of ulimit" +- type: "string" +- Soft: +- description: "Soft limit" +- type: "integer" +- Hard: +- description: "Hard limit" +- type: "integer" +- # Applicable to Windows +- CpuCount: +- description: | +- The number of usable CPUs (Windows only). +- +- On Windows Server containers, the processor resource controls are +- mutually exclusive. The order of precedence is `CPUCount` first, then +- `CPUShares`, and `CPUPercent` last. +- type: "integer" +- format: "int64" +- CpuPercent: +- description: | +- The usable percentage of the available CPUs (Windows only). +- +- On Windows Server containers, the processor resource controls are +- mutually exclusive. The order of precedence is `CPUCount` first, then +- `CPUShares`, and `CPUPercent` last. +- type: "integer" +- format: "int64" +- IOMaximumIOps: +- description: "Maximum IOps for the container system drive (Windows only)" +- type: "integer" +- format: "int64" +- IOMaximumBandwidth: +- description: | +- Maximum IO in bytes per second for the container system drive +- (Windows only). +- type: "integer" +- format: "int64" +- +- Limit: +- description: | +- An object describing a limit on resources which can be requested by a task. +- type: "object" +- properties: +- NanoCPUs: +- type: "integer" +- format: "int64" +- example: 4000000000 +- MemoryBytes: +- type: "integer" +- format: "int64" +- example: 8272408576 +- Pids: +- description: | +- Limits the maximum number of PIDs in the container. Set `0` for unlimited. +- type: "integer" +- format: "int64" +- default: 0 +- example: 100 +- +- ResourceObject: +- description: | +- An object describing the resources which can be advertised by a node and +- requested by a task. +- type: "object" +- properties: +- NanoCPUs: +- type: "integer" +- format: "int64" +- example: 4000000000 +- MemoryBytes: +- type: "integer" +- format: "int64" +- example: 8272408576 +- GenericResources: +- $ref: "#/definitions/GenericResources" +- +- GenericResources: +- description: | +- User-defined resources can be either Integer resources (e.g, `SSD=3`) or +- String resources (e.g, `GPU=UUID1`). +- type: "array" +- items: +- type: "object" +- properties: +- NamedResourceSpec: +- type: "object" +- properties: +- Kind: +- type: "string" +- Value: +- type: "string" +- DiscreteResourceSpec: +- type: "object" +- properties: +- Kind: +- type: "string" +- Value: +- type: "integer" +- format: "int64" +- example: +- - DiscreteResourceSpec: +- Kind: "SSD" +- Value: 3 +- - NamedResourceSpec: +- Kind: "GPU" +- Value: "UUID1" +- - NamedResourceSpec: +- Kind: "GPU" +- Value: "UUID2" +- +- HealthConfig: +- description: | +- A test to perform to check that the container is healthy. +- Healthcheck commands should be side-effect free. +- type: "object" +- properties: +- Test: +- description: | +- The test to perform. Possible values are: +- +- - `[]` inherit healthcheck from image or parent image +- - `["NONE"]` disable healthcheck +- - `["CMD", args...]` exec arguments directly +- - `["CMD-SHELL", command]` run command with system's default shell +- +- A non-zero exit code indicates a failed healthcheck: +- - `0` healthy +- - `1` unhealthy +- - `2` reserved (treated as unhealthy) +- - other values: error running probe +- type: "array" +- items: +- type: "string" +- Interval: +- description: | +- The time to wait between checks in nanoseconds. It should be 0 or at +- least 1000000 (1 ms). 0 means inherit. +- type: "integer" +- format: "int64" +- Timeout: +- description: | +- The time to wait before considering the check to have hung. It should +- be 0 or at least 1000000 (1 ms). 0 means inherit. +- +- If the health check command does not complete within this timeout, +- the check is considered failed and the health check process is +- forcibly terminated without a graceful shutdown. +- type: "integer" +- format: "int64" +- Retries: +- description: | +- The number of consecutive failures needed to consider a container as +- unhealthy. 0 means inherit. +- type: "integer" +- StartPeriod: +- description: | +- Start period for the container to initialize before starting +- health-retries countdown in nanoseconds. It should be 0 or at least +- 1000000 (1 ms). 0 means inherit. +- type: "integer" +- format: "int64" +- StartInterval: +- description: | +- The time to wait between checks in nanoseconds during the start period. +- It should be 0 or at least 1000000 (1 ms). 0 means inherit. +- type: "integer" +- format: "int64" +- +- Health: +- description: | +- Health stores information about the container's healthcheck results. +- type: "object" +- x-nullable: true +- properties: +- Status: +- description: | +- Status is one of `none`, `starting`, `healthy` or `unhealthy` +- +- - "none" Indicates there is no healthcheck +- - "starting" Starting indicates that the container is not yet ready +- - "healthy" Healthy indicates that the container is running correctly +- - "unhealthy" Unhealthy indicates that the container has a problem +- type: "string" +- enum: +- - "none" +- - "starting" +- - "healthy" +- - "unhealthy" +- example: "healthy" +- FailingStreak: +- description: "FailingStreak is the number of consecutive failures" +- type: "integer" +- example: 0 +- Log: +- type: "array" +- description: | +- Log contains the last few results (oldest first) +- items: +- $ref: "#/definitions/HealthcheckResult" +- +- HealthcheckResult: +- description: | +- HealthcheckResult stores information about a single run of a healthcheck probe +- type: "object" +- x-nullable: true +- properties: +- Start: +- description: | +- Date and time at which this check started in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "date-time" +- example: "2020-01-04T10:44:24.496525531Z" +- End: +- description: | +- Date and time at which this check ended in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2020-01-04T10:45:21.364524523Z" +- ExitCode: +- description: | +- ExitCode meanings: +- +- - `0` healthy +- - `1` unhealthy +- - `2` reserved (considered unhealthy) +- - other values: error running probe +- type: "integer" +- example: 0 +- Output: +- description: "Output from last check" +- type: "string" +- +- HostConfig: +- description: "Container configuration that depends on the host we are running on" +- allOf: +- - $ref: "#/definitions/Resources" +- - type: "object" +- properties: +- # Applicable to all platforms +- Binds: +- type: "array" +- description: | +- A list of volume bindings for this container. Each volume binding +- is a string in one of these forms: +- +- - `host-src:container-dest[:options]` to bind-mount a host path +- into the container. Both `host-src`, and `container-dest` must +- be an _absolute_ path. +- - `volume-name:container-dest[:options]` to bind-mount a volume +- managed by a volume driver into the container. `container-dest` +- must be an _absolute_ path. +- +- `options` is an optional, comma-delimited list of: +- +- - `nocopy` disables automatic copying of data from the container +- path to the volume. The `nocopy` flag only applies to named volumes. +- - `[ro|rw]` mounts a volume read-only or read-write, respectively. +- If omitted or set to `rw`, volumes are mounted read-write. +- - `[z|Z]` applies SELinux labels to allow or deny multiple containers +- to read and write to the same volume. +- - `z`: a _shared_ content label is applied to the content. This +- label indicates that multiple containers can share the volume +- content, for both reading and writing. +- - `Z`: a _private unshared_ label is applied to the content. +- This label indicates that only the current container can use +- a private volume. Labeling systems such as SELinux require +- proper labels to be placed on volume content that is mounted +- into a container. Without a label, the security system can +- prevent a container's processes from using the content. By +- default, the labels set by the host operating system are not +- modified. +- - `[[r]shared|[r]slave|[r]private]` specifies mount +- [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). +- This only applies to bind-mounted volumes, not internal volumes +- or named volumes. Mount propagation requires the source mount +- point (the location where the source directory is mounted in the +- host operating system) to have the correct propagation properties. +- For shared volumes, the source mount point must be set to `shared`. +- For slave volumes, the mount must be set to either `shared` or +- `slave`. +- items: +- type: "string" +- ContainerIDFile: +- type: "string" +- description: "Path to a file where the container ID is written" +- example: "" +- LogConfig: +- type: "object" +- description: "The logging configuration for this container" +- properties: +- Type: +- description: |- +- Name of the logging driver used for the container or "none" +- if logging is disabled. +- type: "string" +- enum: +- - "local" +- - "json-file" +- - "syslog" +- - "journald" +- - "gelf" +- - "fluentd" +- - "awslogs" +- - "splunk" +- - "etwlogs" +- - "none" +- Config: +- description: |- +- Driver-specific configuration options for the logging driver. +- type: "object" +- additionalProperties: +- type: "string" +- example: +- "max-file": "5" +- "max-size": "10m" +- NetworkMode: +- type: "string" +- description: | +- Network mode to use for this container. Supported standard values +- are: `bridge`, `host`, `none`, and `container:`. Any +- other value is taken as a custom network's name to which this +- container should connect to. +- PortBindings: +- $ref: "#/definitions/PortMap" +- RestartPolicy: +- $ref: "#/definitions/RestartPolicy" +- AutoRemove: +- type: "boolean" +- description: | +- Automatically remove the container when the container's process +- exits. This has no effect if `RestartPolicy` is set. +- VolumeDriver: +- type: "string" +- description: "Driver that this container uses to mount volumes." +- VolumesFrom: +- type: "array" +- description: | +- A list of volumes to inherit from another container, specified in +- the form `[:]`. +- items: +- type: "string" +- Mounts: +- description: | +- Specification for mounts to be added to the container. +- type: "array" +- items: +- $ref: "#/definitions/Mount" +- ConsoleSize: +- type: "array" +- description: | +- Initial console size, as an `[height, width]` array. +- x-nullable: true +- minItems: 2 +- maxItems: 2 +- items: +- type: "integer" +- minimum: 0 +- example: [80, 64] +- Annotations: +- type: "object" +- description: | +- Arbitrary non-identifying metadata attached to container and +- provided to the runtime when the container is started. +- additionalProperties: +- type: "string" +- +- # Applicable to UNIX platforms +- CapAdd: +- type: "array" +- description: | +- A list of kernel capabilities to add to the container. Conflicts +- with option 'Capabilities'. +- items: +- type: "string" +- CapDrop: +- type: "array" +- description: | +- A list of kernel capabilities to drop from the container. Conflicts +- with option 'Capabilities'. +- items: +- type: "string" +- CgroupnsMode: +- type: "string" +- enum: +- - "private" +- - "host" +- description: | +- cgroup namespace mode for the container. Possible values are: +- +- - `"private"`: the container runs in its own private cgroup namespace +- - `"host"`: use the host system's cgroup namespace +- +- If not specified, the daemon default is used, which can either be `"private"` +- or `"host"`, depending on daemon version, kernel support and configuration. +- Dns: +- type: "array" +- description: "A list of DNS servers for the container to use." +- items: +- type: "string" +- format: "ip-address" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- DnsOptions: +- type: "array" +- description: "A list of DNS options." +- items: +- type: "string" +- DnsSearch: +- type: "array" +- description: "A list of DNS search domains." +- items: +- type: "string" +- ExtraHosts: +- type: "array" +- description: | +- A list of hostnames/IP mappings to add to the container's `/etc/hosts` +- file. Specified in the form `["hostname:IP"]`. +- items: +- type: "string" +- GroupAdd: +- type: "array" +- description: | +- A list of additional groups that the container process will run as. +- items: +- type: "string" +- IpcMode: +- type: "string" +- description: | +- IPC sharing mode for the container. Possible values are: +- +- - `"none"`: own private IPC namespace, with /dev/shm not mounted +- - `"private"`: own private IPC namespace +- - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers +- - `"container:"`: join another (shareable) container's IPC namespace +- - `"host"`: use the host system's IPC namespace +- +- If not specified, daemon default is used, which can either be `"private"` +- or `"shareable"`, depending on daemon version and configuration. +- Cgroup: +- type: "string" +- description: "Cgroup to use for the container." +- Links: +- type: "array" +- description: | +- A list of links for the container in the form `container_name:alias`. +- items: +- type: "string" +- OomScoreAdj: +- type: "integer" +- description: | +- An integer value containing the score given to the container in +- order to tune OOM killer preferences. +- example: 500 +- PidMode: +- type: "string" +- description: | +- Set the PID (Process) Namespace mode for the container. It can be +- either: +- +- - `"container:"`: joins another container's PID namespace +- - `"host"`: use the host's PID namespace inside the container +- Privileged: +- type: "boolean" +- description: |- +- Gives the container full access to the host. +- PublishAllPorts: +- type: "boolean" +- description: | +- Allocates an ephemeral host port for all of a container's +- exposed ports. +- +- Ports are de-allocated when the container stops and allocated when +- the container starts. The allocated port might be changed when +- restarting the container. +- +- The port is selected from the ephemeral port range that depends on +- the kernel. For example, on Linux the range is defined by +- `/proc/sys/net/ipv4/ip_local_port_range`. +- ReadonlyRootfs: +- type: "boolean" +- description: "Mount the container's root filesystem as read only." +- SecurityOpt: +- type: "array" +- description: | +- A list of string values to customize labels for MLS systems, such +- as SELinux. +- items: +- type: "string" +- StorageOpt: +- type: "object" +- description: | +- Storage driver options for this container, in the form `{"size": "120G"}`. +- additionalProperties: +- type: "string" +- Tmpfs: +- type: "object" +- description: | +- A map of container directories which should be replaced by tmpfs +- mounts, and their corresponding mount options. For example: +- +- ``` +- { "/run": "rw,noexec,nosuid,size=65536k" } +- ``` +- additionalProperties: +- type: "string" +- UTSMode: +- type: "string" +- description: "UTS namespace to use for the container." +- UsernsMode: +- type: "string" +- description: | +- Sets the usernamespace mode for the container when usernamespace +- remapping option is enabled. +- ShmSize: +- type: "integer" +- format: "int64" +- description: | +- Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. +- minimum: 0 +- Sysctls: +- type: "object" +- x-nullable: true +- description: |- +- A list of kernel parameters (sysctls) to set in the container. +- +- This field is omitted if not set. +- additionalProperties: +- type: "string" +- example: +- "net.ipv4.ip_forward": "1" +- Runtime: +- type: "string" +- x-nullable: true +- description: |- +- Runtime to use with this container. +- # Applicable to Windows +- Isolation: +- type: "string" +- description: | +- Isolation technology of the container. (Windows only) +- enum: +- - "default" +- - "process" +- - "hyperv" +- - "" +- MaskedPaths: +- type: "array" +- description: | +- The list of paths to be masked inside the container (this overrides +- the default set of paths). +- items: +- type: "string" +- example: +- - "/proc/asound" +- - "/proc/acpi" +- - "/proc/kcore" +- - "/proc/keys" +- - "/proc/latency_stats" +- - "/proc/timer_list" +- - "/proc/timer_stats" +- - "/proc/sched_debug" +- - "/proc/scsi" +- - "/sys/firmware" +- - "/sys/devices/virtual/powercap" +- ReadonlyPaths: +- type: "array" +- description: | +- The list of paths to be set as read-only inside the container +- (this overrides the default set of paths). +- items: +- type: "string" +- example: +- - "/proc/bus" +- - "/proc/fs" +- - "/proc/irq" +- - "/proc/sys" +- - "/proc/sysrq-trigger" +- +- ContainerConfig: +- description: | +- Configuration for a container that is portable between hosts. +- type: "object" +- properties: +- Hostname: +- description: | +- The hostname to use for the container, as a valid RFC 1123 hostname. +- type: "string" +- example: "439f4e91bd1d" +- Domainname: +- description: | +- The domain name to use for the container. +- type: "string" +- User: +- description: |- +- Commands run as this user inside the container. If omitted, commands +- run as the user specified in the image the container was started from. +- +- Can be either user-name or UID, and optional group-name or GID, +- separated by a colon (`[<:group-name|GID>]`). +- type: "string" +- example: "123:456" +- AttachStdin: +- description: "Whether to attach to `stdin`." +- type: "boolean" +- default: false +- AttachStdout: +- description: "Whether to attach to `stdout`." +- type: "boolean" +- default: true +- AttachStderr: +- description: "Whether to attach to `stderr`." +- type: "boolean" +- default: true +- ExposedPorts: +- description: | +- An object mapping ports to an empty object in the form: +- +- `{"/": {}}` +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "object" +- enum: +- - {} +- default: {} +- example: { +- "80/tcp": {}, +- "443/tcp": {} +- } +- Tty: +- description: | +- Attach standard streams to a TTY, including `stdin` if it is not closed. +- type: "boolean" +- default: false +- OpenStdin: +- description: "Open `stdin`" +- type: "boolean" +- default: false +- StdinOnce: +- description: "Close `stdin` after one attached client disconnects" +- type: "boolean" +- default: false +- Env: +- description: | +- A list of environment variables to set inside the container in the +- form `["VAR=value", ...]`. A variable without `=` is removed from the +- environment, rather than to have an empty value. +- type: "array" +- items: +- type: "string" +- example: +- - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +- Cmd: +- description: | +- Command to run specified as a string or an array of strings. +- type: "array" +- items: +- type: "string" +- example: ["/bin/sh"] +- Healthcheck: +- $ref: "#/definitions/HealthConfig" +- ArgsEscaped: +- description: "Command is already escaped (Windows only)" +- type: "boolean" +- default: false +- example: false +- x-nullable: true +- Image: +- description: | +- The name (or reference) of the image to use when creating the container, +- or which was used when the container was created. +- type: "string" +- example: "example-image:1.0" +- Volumes: +- description: | +- An object mapping mount point paths inside the container to empty +- objects. +- type: "object" +- additionalProperties: +- type: "object" +- enum: +- - {} +- default: {} +- WorkingDir: +- description: "The working directory for commands to run in." +- type: "string" +- example: "/public/" +- Entrypoint: +- description: | +- The entry point for the container as a string or an array of strings. +- +- If the array consists of exactly one empty string (`[""]`) then the +- entry point is reset to system default (i.e., the entry point used by +- docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). +- type: "array" +- items: +- type: "string" +- example: [] +- NetworkDisabled: +- description: "Disable networking for the container." +- type: "boolean" +- x-nullable: true +- OnBuild: +- description: | +- `ONBUILD` metadata that were defined in the image's `Dockerfile`. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: [] +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- StopSignal: +- description: | +- Signal to stop a container as a string or unsigned integer. +- type: "string" +- example: "SIGTERM" +- x-nullable: true +- StopTimeout: +- description: | +- Timeout to stop a container in seconds. If omitted, the daemon-wide +- default (`default-stop-timeout`) is used. +- type: "integer" +- x-nullable: true +- Shell: +- description: | +- Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: ["/bin/sh", "-c"] +- +- ImageConfig: +- description: | +- Configuration of the image. These fields are used as defaults +- when starting a container from the image. +- type: "object" +- properties: +- User: +- description: "The user that commands are run as inside the container." +- type: "string" +- example: "web:web" +- ExposedPorts: +- description: | +- An object mapping ports to an empty object in the form: +- +- `{"/": {}}` +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "object" +- enum: +- - {} +- default: {} +- example: { +- "80/tcp": {}, +- "443/tcp": {} +- } +- Env: +- description: | +- A list of environment variables to set inside the container in the +- form `["VAR=value", ...]`. A variable without `=` is removed from the +- environment, rather than to have an empty value. +- type: "array" +- items: +- type: "string" +- example: +- - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +- Cmd: +- description: | +- Command to run specified as a string or an array of strings. +- type: "array" +- items: +- type: "string" +- example: ["/bin/sh"] +- Healthcheck: +- $ref: "#/definitions/HealthConfig" +- ArgsEscaped: +- description: "Command is already escaped (Windows only)" +- type: "boolean" +- default: false +- example: false +- x-nullable: true +- Volumes: +- description: | +- An object mapping mount point paths inside the container to empty +- objects. +- type: "object" +- additionalProperties: +- type: "object" +- enum: +- - {} +- default: {} +- example: +- "/app/data": {} +- "/app/config": {} +- WorkingDir: +- description: "The working directory for commands to run in." +- type: "string" +- example: "/public/" +- Entrypoint: +- description: | +- The entry point for the container as a string or an array of strings. +- +- If the array consists of exactly one empty string (`[""]`) then the +- entry point is reset to system default (i.e., the entry point used by +- docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). +- type: "array" +- items: +- type: "string" +- example: [] +- OnBuild: +- description: | +- `ONBUILD` metadata that were defined in the image's `Dockerfile`. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: [] +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- StopSignal: +- description: | +- Signal to stop a container as a string or unsigned integer. +- type: "string" +- example: "SIGTERM" +- x-nullable: true +- Shell: +- description: | +- Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: ["/bin/sh", "-c"] +- +- NetworkingConfig: +- description: | +- NetworkingConfig represents the container's networking configuration for +- each of its interfaces. +- It is used for the networking configs specified in the `docker create` +- and `docker network connect` commands. +- type: "object" +- properties: +- EndpointsConfig: +- description: | +- A mapping of network name to endpoint configuration for that network. +- The endpoint configuration can be left empty to connect to that +- network with no particular endpoint configuration. +- type: "object" +- additionalProperties: +- $ref: "#/definitions/EndpointSettings" +- example: +- # putting an example here, instead of using the example values from +- # /definitions/EndpointSettings, because EndpointSettings contains +- # operational data returned when inspecting a container that we don't +- # accept here. +- EndpointsConfig: +- isolated_nw: +- IPAMConfig: +- IPv4Address: "172.20.30.33" +- IPv6Address: "2001:db8:abcd::3033" +- LinkLocalIPs: +- - "169.254.34.68" +- - "fe80::3468" +- MacAddress: "02:42:ac:12:05:02" +- Links: +- - "container_1" +- - "container_2" +- Aliases: +- - "server_x" +- - "server_y" +- database_nw: {} +- +- NetworkSettings: +- description: "NetworkSettings exposes the network settings in the API" +- type: "object" +- properties: +- SandboxID: +- description: SandboxID uniquely represents a container's network stack. +- type: "string" +- example: "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" +- SandboxKey: +- description: SandboxKey is the full path of the netns handle +- type: "string" +- example: "/var/run/docker/netns/8ab54b426c38" +- Ports: +- $ref: "#/definitions/PortMap" +- Networks: +- description: | +- Information about all networks that the container is connected to. +- type: "object" +- additionalProperties: +- $ref: "#/definitions/EndpointSettings" +- +- Address: +- description: Address represents an IPv4 or IPv6 IP address. +- type: "object" +- properties: +- Addr: +- description: IP address. +- type: "string" +- PrefixLen: +- description: Mask length of the IP address. +- type: "integer" +- +- PortMap: +- description: | +- PortMap describes the mapping of container ports to host ports, using the +- container's port-number and protocol as key in the format `/`, +- for example, `80/udp`. +- +- If a container's port is mapped for multiple protocols, separate entries +- are added to the mapping table. +- type: "object" +- additionalProperties: +- type: "array" +- x-nullable: true +- items: +- $ref: "#/definitions/PortBinding" +- example: +- "443/tcp": +- - HostIp: "127.0.0.1" +- HostPort: "4443" +- "80/tcp": +- - HostIp: "0.0.0.0" +- HostPort: "80" +- - HostIp: "0.0.0.0" +- HostPort: "8080" +- "80/udp": +- - HostIp: "0.0.0.0" +- HostPort: "80" +- "53/udp": +- - HostIp: "0.0.0.0" +- HostPort: "53" +- "2377/tcp": null +- +- PortBinding: +- description: | +- PortBinding represents a binding between a host IP address and a host +- port. +- type: "object" +- properties: +- HostIp: +- description: "Host IP address that the container's port is mapped to." +- type: "string" +- example: "127.0.0.1" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- HostPort: +- description: "Host port number that the container's port is mapped to." +- type: "string" +- example: "4443" +- +- DriverData: +- description: | +- Information about the storage driver used to store the container's and +- image's filesystem. +- type: "object" +- required: [Name, Data] +- properties: +- Name: +- description: "Name of the storage driver." +- type: "string" +- x-nullable: false +- example: "overlay2" +- Data: +- description: | +- Low-level storage metadata, provided as key/value pairs. +- +- This information is driver-specific, and depends on the storage-driver +- in use, and should be used for informational purposes only. +- type: "object" +- x-nullable: false +- additionalProperties: +- type: "string" +- example: { +- "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", +- "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", +- "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" +- } +- +- Storage: +- description: | +- Information about the storage used by the container. +- type: "object" +- properties: +- RootFS: +- description: | +- Information about the storage used for the container's root filesystem. +- type: "object" +- x-nullable: true +- $ref: "#/definitions/RootFSStorage" +- +- RootFSStorage: +- description: | +- Information about the storage used for the container's root filesystem. +- type: "object" +- x-go-name: RootFSStorage +- properties: +- Snapshot: +- description: | +- Information about the snapshot used for the container's root filesystem. +- type: "object" +- x-nullable: true +- $ref: "#/definitions/RootFSStorageSnapshot" +- +- RootFSStorageSnapshot: +- description: | +- Information about a snapshot backend of the container's root filesystem. +- type: "object" +- x-go-name: RootFSStorageSnapshot +- properties: +- Name: +- description: "Name of the snapshotter." +- type: "string" +- x-nullable: false +- +- FilesystemChange: +- description: | +- Change in the container's filesystem. +- type: "object" +- required: [Path, Kind] +- properties: +- Path: +- description: | +- Path to file or directory that has changed. +- type: "string" +- x-nullable: false +- Kind: +- $ref: "#/definitions/ChangeType" +- +- ChangeType: +- description: | +- Kind of change +- +- Can be one of: +- +- - `0`: Modified ("C") +- - `1`: Added ("A") +- - `2`: Deleted ("D") +- type: "integer" +- format: "uint8" +- enum: [0, 1, 2] +- x-nullable: false +- +- ImageInspect: +- description: | +- Information about an image in the local image cache. +- type: "object" +- properties: +- Id: +- description: | +- ID is the content-addressable ID of an image. +- +- This identifier is a content-addressable digest calculated from the +- image's configuration (which includes the digests of layers used by +- the image). +- +- Note that this digest differs from the `RepoDigests` below, which +- holds digests of image manifests that reference the image. +- type: "string" +- x-nullable: false +- example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" +- Descriptor: +- description: | +- Descriptor is an OCI descriptor of the image target. +- In case of a multi-platform image, this descriptor points to the OCI index +- or a manifest list. +- +- This field is only present if the daemon provides a multi-platform image store. +- +- WARNING: This is experimental and may change at any time without any backward +- compatibility. +- x-nullable: true +- $ref: "#/definitions/OCIDescriptor" +- Manifests: +- description: | +- Manifests is a list of image manifests available in this image. It +- provides a more detailed view of the platform-specific image manifests or +- other image-attached data like build attestations. +- +- Only available if the daemon provides a multi-platform image store +- and the `manifests` option is set in the inspect request. +- +- WARNING: This is experimental and may change at any time without any backward +- compatibility. +- type: "array" +- x-nullable: true +- items: +- $ref: "#/definitions/ImageManifestSummary" +- Identity: +- description: |- +- Identity holds information about the identity and origin of the image. +- This is trusted information verified by the daemon and cannot be modified +- by tagging an image to a different name. +- x-nullable: true +- $ref: "#/definitions/Identity" +- RepoTags: +- description: | +- List of image names/tags in the local image cache that reference this +- image. +- +- Multiple image tags can refer to the same image, and this list may be +- empty if no tags reference the image, in which case the image is +- "untagged", in which case it can still be referenced by its ID. +- type: "array" +- items: +- type: "string" +- example: +- - "example:1.0" +- - "example:latest" +- - "example:stable" +- - "internal.registry.example.com:5000/example:1.0" +- RepoDigests: +- description: | +- List of content-addressable digests of locally available image manifests +- that the image is referenced from. Multiple manifests can refer to the +- same image. +- +- These digests are usually only available if the image was either pulled +- from a registry, or if the image was pushed to a registry, which is when +- the manifest is generated and its digest calculated. +- type: "array" +- items: +- type: "string" +- example: +- - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb" +- - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" +- Comment: +- description: | +- Optional message that was set when committing or importing the image. +- type: "string" +- x-nullable: true +- example: "" +- Created: +- description: | +- Date and time at which the image was created, formatted in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- +- This information is only available if present in the image, +- and omitted otherwise. +- type: "string" +- format: "dateTime" +- x-nullable: true +- example: "2022-02-04T21:20:12.497794809Z" +- Author: +- description: | +- Name of the author that was specified when committing the image, or as +- specified through MAINTAINER (deprecated) in the Dockerfile. +- type: "string" +- x-nullable: true +- example: "" +- Config: +- $ref: "#/definitions/ImageConfig" +- Architecture: +- description: | +- Hardware CPU architecture that the image runs on. +- type: "string" +- x-nullable: false +- example: "arm" +- Variant: +- description: | +- CPU architecture variant (presently ARM-only). +- type: "string" +- x-nullable: true +- example: "v7" +- Os: +- description: | +- Operating System the image is built to run on. +- type: "string" +- x-nullable: false +- example: "linux" +- OsVersion: +- description: | +- Operating System version the image is built to run on (especially +- for Windows). +- type: "string" +- example: "" +- x-nullable: true +- Size: +- description: | +- Total size of the image including all layers it is composed of. +- type: "integer" +- format: "int64" +- x-nullable: false +- example: 1239828 +- GraphDriver: +- x-nullable: true +- $ref: "#/definitions/DriverData" +- RootFS: +- description: | +- Information about the image's RootFS, including the layer IDs. +- type: "object" +- required: [Type] +- properties: +- Type: +- type: "string" +- x-nullable: false +- example: "layers" +- Layers: +- type: "array" +- items: +- type: "string" +- example: +- - "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6" +- - "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" +- Metadata: +- description: | +- Additional metadata of the image in the local cache. This information +- is local to the daemon, and not part of the image itself. +- type: "object" +- properties: +- LastTagTime: +- description: | +- Date and time at which the image was last tagged in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- +- This information is only available if the image was tagged locally, +- and omitted otherwise. +- type: "string" +- format: "dateTime" +- example: "2022-02-28T14:40:02.623929178Z" +- x-nullable: true +- +- Identity: +- description: |- +- Identity holds information about the identity and origin of the image. +- This is trusted information verified by the daemon and cannot be modified +- by tagging an image to a different name. +- type: "object" +- properties: +- Signature: +- description: |- +- Signature contains the properties of verified signatures for the image. +- type: "array" +- items: +- $ref: "#/definitions/SignatureIdentity" +- Pull: +- description: |- +- Pull contains remote location information if image was created via pull. +- If image was pulled via mirror, this contains the original repository location. +- After successful push this images also contains the pushed repository location. +- type: "array" +- items: +- $ref: "#/definitions/PullIdentity" +- Build: +- description: |- +- Build contains build reference information if image was created via build. +- type: "array" +- items: +- $ref: "#/definitions/BuildIdentity" +- +- BuildIdentity: +- description: |- +- BuildIdentity contains build reference information if image was created via build. +- type: "object" +- properties: +- Ref: +- description: |- +- Ref is the identifier for the build request. This reference can be used to +- look up the build details in BuildKit history API. +- type: "string" +- CreatedAt: +- description: |- +- CreatedAt is the time when the build ran. +- type: "string" +- format: "date-time" +- +- PullIdentity: +- description: |- +- PullIdentity contains remote location information if image was created via pull. +- If image was pulled via mirror, this contains the original repository location. +- type: "object" +- properties: +- Repository: +- description: |- +- Repository is the remote repository location the image was pulled from. +- type: "string" +- +- SignatureIdentity: +- description: |- +- SignatureIdentity contains the properties of verified signatures for the image. +- type: "object" +- properties: +- Name: +- description: |- +- Name is a textual description summarizing the type of signature. +- type: "string" +- Timestamps: +- description: |- +- Timestamps contains a list of verified signed timestamps for the signature. +- type: "array" +- items: +- $ref: "#/definitions/SignatureTimestamp" +- KnownSigner: +- description: |- +- KnownSigner is an identifier for a special signer identity that is known to the implementation. +- $ref: "#/definitions/KnownSignerIdentity" +- DockerReference: +- description: |- +- DockerReference is the Docker image reference associated with the signature. +- This is an optional field only present in older hashedrecord signatures. +- type: "string" +- Signer: +- description: |- +- Signer contains information about the signer certificate used to sign the image. +- $ref: "#/definitions/SignerIdentity" +- SignatureType: +- description: |- +- SignatureType is the type of signature format. E.g. "bundle-v0.3" or "hashedrecord". +- $ref: "#/definitions/SignatureType" +- Error: +- description: |- +- Error contains error information if signature verification failed. +- Other fields will be empty in this case. +- type: "string" +- Warnings: +- description: |- +- Warnings contains any warnings that occurred during signature verification. +- For example, if there was no internet connectivity and cached trust roots were used. +- Warning does not indicate a failed verification but may point to configuration issues. +- type: "array" +- items: +- type: "string" +- +- SignatureTimestamp: +- description: |- +- SignatureTimestamp contains information about a verified signed timestamp for an image signature. +- type: "object" +- properties: +- Type: +- $ref: "#/definitions/SignatureTimestampType" +- URI: +- type: "string" +- Timestamp: +- type: "string" +- format: "date-time" +- +- SignatureTimestampType: +- description: |- +- SignatureTimestampType is the type of timestamp used in the signature. +- type: "string" +- enum: +- - "Tlog" +- - "TimestampAuthority" +- +- SignatureType: +- description: |- +- SignatureType is the type of signature format. +- type: "string" +- enum: +- - "bundle-v0.3" +- - "simplesigning-v1" +- +- KnownSignerIdentity: +- description: |- +- KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation. +- type: "string" +- enum: +- - "DHI" +- +- SignerIdentity: +- description: |- +- SignerIdentity contains information about the signer certificate used to sign the image. +- type: "object" +- properties: +- CertificateIssuer: +- type: "string" +- description: |- +- CertificateIssuer is the certificate issuer. +- SubjectAlternativeName: +- type: "string" +- description: |- +- SubjectAlternativeName is the certificate subject alternative name. +- Issuer: +- type: "string" +- description: |- +- The OIDC issuer. Should match `iss` claim of ID token or, in the case of +- a federated login like Dex it should match the issuer URL of the +- upstream issuer. The issuer is not set the extensions are invalid and +- will fail to render. +- BuildSignerURI: +- type: "string" +- description: |- +- Reference to specific build instructions that are responsible for signing. +- BuildSignerDigest: +- type: "string" +- description: |- +- Immutable reference to the specific version of the build instructions that is responsible for signing. +- RunnerEnvironment: +- type: "string" +- description: |- +- Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure. +- SourceRepositoryURI: +- type: "string" +- description: |- +- Source repository URL that the build was based on. +- SourceRepositoryDigest: +- type: "string" +- description: |- +- Immutable reference to a specific version of the source code that the build was based upon. +- SourceRepositoryRef: +- type: "string" +- description: |- +- Source Repository Ref that the build run was based upon. +- SourceRepositoryIdentifier: +- type: "string" +- description: |- +- Immutable identifier for the source repository the workflow was based upon. +- SourceRepositoryOwnerURI: +- type: "string" +- description: |- +- Source repository owner URL of the owner of the source repository that the build was based on. +- SourceRepositoryOwnerIdentifier: +- type: "string" +- description: |- +- Immutable identifier for the owner of the source repository that the workflow was based upon. +- BuildConfigURI: +- type: "string" +- description: |- +- Build Config URL to the top-level/initiating build instructions. +- BuildConfigDigest: +- type: "string" +- description: |- +- Immutable reference to the specific version of the top-level/initiating build instructions. +- BuildTrigger: +- type: "string" +- description: |- +- Event or action that initiated the build. +- RunInvocationURI: +- type: "string" +- description: |- +- Run Invocation URL to uniquely identify the build execution. +- SourceRepositoryVisibilityAtSigning: +- type: "string" +- description: |- +- Source repository visibility at the time of signing the certificate. +- +- ImageSummary: +- type: "object" +- x-go-name: "Summary" +- required: +- - Id +- - ParentId +- - RepoTags +- - RepoDigests +- - Created +- - Size +- - SharedSize +- - Labels +- - Containers +- properties: +- Id: +- description: | +- ID is the content-addressable ID of an image. +- +- This identifier is a content-addressable digest calculated from the +- image's configuration (which includes the digests of layers used by +- the image). +- +- Note that this digest differs from the `RepoDigests` below, which +- holds digests of image manifests that reference the image. +- type: "string" +- x-nullable: false +- example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" +- ParentId: +- description: | +- ID of the parent image. +- +- Depending on how the image was created, this field may be empty and +- is only set for images that were built/created locally. This field +- is empty if the image was pulled from an image registry. +- type: "string" +- x-nullable: false +- example: "" +- RepoTags: +- description: | +- List of image names/tags in the local image cache that reference this +- image. +- +- Multiple image tags can refer to the same image, and this list may be +- empty if no tags reference the image, in which case the image is +- "untagged", in which case it can still be referenced by its ID. +- type: "array" +- x-nullable: false +- items: +- type: "string" +- example: +- - "example:1.0" +- - "example:latest" +- - "example:stable" +- - "internal.registry.example.com:5000/example:1.0" +- RepoDigests: +- description: | +- List of content-addressable digests of locally available image manifests +- that the image is referenced from. Multiple manifests can refer to the +- same image. +- +- These digests are usually only available if the image was either pulled +- from a registry, or if the image was pushed to a registry, which is when +- the manifest is generated and its digest calculated. +- type: "array" +- x-nullable: false +- items: +- type: "string" +- example: +- - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb" +- - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" +- Created: +- description: | +- Date and time at which the image was created as a Unix timestamp +- (number of seconds since EPOCH). +- type: "integer" +- x-nullable: false +- example: "1644009612" +- Size: +- description: | +- Total size of the image including all layers it is composed of. +- type: "integer" +- format: "int64" +- x-nullable: false +- example: 172064416 +- SharedSize: +- description: | +- Total size of image layers that are shared between this image and other +- images. +- +- This size is not calculated by default. `-1` indicates that the value +- has not been set / calculated. +- type: "integer" +- format: "int64" +- x-nullable: false +- example: 1239828 +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- x-nullable: false +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- Containers: +- description: | +- Number of containers using this image. Includes both stopped and running +- containers. +- +- `-1` indicates that the value has not been set / calculated. +- x-nullable: false +- type: "integer" +- example: 2 +- Manifests: +- description: | +- Manifests is a list of manifests available in this image. +- It provides a more detailed view of the platform-specific image manifests +- or other image-attached data like build attestations. +- +- WARNING: This is experimental and may change at any time without any backward +- compatibility. +- type: "array" +- x-nullable: false +- x-omitempty: true +- items: +- $ref: "#/definitions/ImageManifestSummary" +- Descriptor: +- description: | +- Descriptor is an OCI descriptor of the image target. +- In case of a multi-platform image, this descriptor points to the OCI index +- or a manifest list. +- +- This field is only present if the daemon provides a multi-platform image store. +- +- WARNING: This is experimental and may change at any time without any backward +- compatibility. +- x-nullable: true +- $ref: "#/definitions/OCIDescriptor" +- +- ImagesDiskUsage: +- type: "object" +- x-go-name: "DiskUsage" +- x-go-package: "github.com/moby/moby/api/types/image" +- description: | +- represents system data usage for image resources. +- properties: +- ActiveCount: +- description: | +- Count of active images. +- type: "integer" +- format: "int64" +- example: 1 +- TotalCount: +- description: | +- Count of all images. +- type: "integer" +- format: "int64" +- example: 4 +- Reclaimable: +- description: | +- Disk space that can be reclaimed by removing unused images. +- type: "integer" +- format: "int64" +- example: 12345678 +- TotalSize: +- description: | +- Disk space in use by images. +- type: "integer" +- format: "int64" +- example: 98765432 +- Items: +- description: | +- List of image summaries. +- type: "array" +- x-omitempty: true +- items: +- x-go-type: +- type: Summary +- +- AuthConfig: +- type: "object" +- properties: +- username: +- type: "string" +- password: +- type: "string" +- serveraddress: +- type: "string" +- example: +- username: "hannibal" +- password: "xxxx" +- serveraddress: "https://index.docker.io/v1/" +- +- AuthResponse: +- description: | +- An identity token was generated successfully. +- type: "object" +- required: [Status] +- properties: +- Status: +- description: "The status of the authentication" +- type: "string" +- example: "Login Succeeded" +- x-nullable: false +- IdentityToken: +- description: "An opaque token used to authenticate a user after a successful login" +- type: "string" +- example: "9cbaf023786cd7..." +- x-nullable: false +- +- ProcessConfig: +- type: "object" +- properties: +- privileged: +- type: "boolean" +- user: +- type: "string" +- tty: +- type: "boolean" +- entrypoint: +- type: "string" +- arguments: +- type: "array" +- items: +- type: "string" +- +- Volume: +- type: "object" +- required: [Name, Driver, Mountpoint, Labels, Scope, Options] +- x-nullable: false +- properties: +- Name: +- type: "string" +- description: "Name of the volume." +- x-nullable: false +- example: "tardis" +- Driver: +- type: "string" +- description: "Name of the volume driver used by the volume." +- x-nullable: false +- example: "custom" +- Mountpoint: +- type: "string" +- description: "Mount path of the volume on the host." +- x-nullable: false +- example: "/var/lib/docker/volumes/tardis" +- CreatedAt: +- type: "string" +- format: "dateTime" +- description: "Date/Time the volume was created." +- example: "2016-06-07T20:31:11.853781916Z" +- Status: +- type: "object" +- description: | +- Low-level details about the volume, provided by the volume driver. +- Details are returned as a map with key/value pairs: +- `{"key":"value","key2":"value2"}`. +- +- The `Status` field is optional, and is omitted if the volume driver +- does not support this feature. +- additionalProperties: +- type: "object" +- example: +- hello: "world" +- Labels: +- type: "object" +- description: "User-defined key/value metadata." +- x-nullable: false +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- Scope: +- type: "string" +- description: | +- The level at which the volume exists. Either `global` for cluster-wide, +- or `local` for machine level. +- default: "local" +- x-nullable: false +- enum: ["local", "global"] +- example: "local" +- ClusterVolume: +- $ref: "#/definitions/ClusterVolume" +- Options: +- type: "object" +- description: | +- The driver specific options used when creating the volume. +- additionalProperties: +- type: "string" +- example: +- device: "tmpfs" +- o: "size=100m,uid=1000" +- type: "tmpfs" +- UsageData: +- type: "object" +- x-nullable: true +- x-go-name: "UsageData" +- required: [Size, RefCount] +- description: | +- Usage details about the volume. This information is used by the +- `GET /system/df` endpoint, and omitted in other endpoints. +- properties: +- Size: +- type: "integer" +- format: "int64" +- default: -1 +- description: | +- Amount of disk space used by the volume (in bytes). This information +- is only available for volumes created with the `"local"` volume +- driver. For volumes created with other volume drivers, this field +- is set to `-1` ("not available") +- x-nullable: false +- RefCount: +- type: "integer" +- format: "int64" +- default: -1 +- description: | +- The number of containers referencing this volume. This field +- is set to `-1` if the reference-count is not available. +- x-nullable: false +- +- VolumesDiskUsage: +- type: "object" +- x-go-name: "DiskUsage" +- x-go-package: "github.com/moby/moby/api/types/volume" +- description: | +- represents system data usage for volume resources. +- properties: +- ActiveCount: +- description: | +- Count of active volumes. +- type: "integer" +- format: "int64" +- example: 1 +- TotalCount: +- description: | +- Count of all volumes. +- type: "integer" +- format: "int64" +- example: 4 +- Reclaimable: +- description: | +- Disk space that can be reclaimed by removing inactive volumes. +- type: "integer" +- format: "int64" +- example: 12345678 +- TotalSize: +- description: | +- Disk space in use by volumes. +- type: "integer" +- format: "int64" +- example: 98765432 +- Items: +- description: | +- List of volumes. +- type: "array" +- x-omitempty: true +- items: +- x-go-type: +- type: Volume +- +- VolumeCreateRequest: +- description: "Volume configuration" +- type: "object" +- title: "VolumeConfig" +- x-go-name: "CreateRequest" +- properties: +- Name: +- description: | +- The new volume's name. If not specified, Docker generates a name. +- type: "string" +- x-nullable: false +- example: "tardis" +- Driver: +- description: "Name of the volume driver to use." +- type: "string" +- default: "local" +- x-nullable: false +- example: "custom" +- DriverOpts: +- description: | +- A mapping of driver options and values. These options are +- passed directly to the driver and are driver specific. +- type: "object" +- additionalProperties: +- type: "string" +- example: +- device: "tmpfs" +- o: "size=100m,uid=1000" +- type: "tmpfs" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- ClusterVolumeSpec: +- $ref: "#/definitions/ClusterVolumeSpec" +- +- VolumeListResponse: +- type: "object" +- title: "VolumeListResponse" +- x-go-name: "ListResponse" +- description: "Volume list response" +- properties: +- Volumes: +- type: "array" +- description: "List of volumes" +- items: +- $ref: "#/definitions/Volume" +- Warnings: +- type: "array" +- description: | +- Warnings that occurred when fetching the list of volumes. +- items: +- type: "string" +- example: [] +- +- Network: +- type: "object" +- properties: +- Name: +- description: | +- Name of the network. +- type: "string" +- example: "my_network" +- x-omitempty: false +- Id: +- description: | +- ID that uniquely identifies a network on a single machine. +- type: "string" +- x-go-name: "ID" +- x-omitempty: false +- example: "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99" +- Created: +- description: | +- Date and time at which the network was created in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- x-omitempty: false +- x-go-type: +- type: Time +- import: +- package: time +- hints: +- nullable: false +- example: "2016-10-19T04:33:30.360899459Z" +- Scope: +- description: | +- The level at which the network exists (e.g. `swarm` for cluster-wide +- or `local` for machine level) +- type: "string" +- x-omitempty: false +- example: "local" +- Driver: +- description: | +- The name of the driver used to create the network (e.g. `bridge`, +- `overlay`). +- type: "string" +- x-omitempty: false +- example: "overlay" +- EnableIPv4: +- description: | +- Whether the network was created with IPv4 enabled. +- type: "boolean" +- x-omitempty: false +- example: true +- EnableIPv6: +- description: | +- Whether the network was created with IPv6 enabled. +- type: "boolean" +- x-omitempty: false +- example: false +- IPAM: +- description: | +- The network's IP Address Management. +- $ref: "#/definitions/IPAM" +- x-nullable: false +- x-omitempty: false +- Internal: +- description: | +- Whether the network is created to only allow internal networking +- connectivity. +- type: "boolean" +- x-nullable: false +- x-omitempty: false +- default: false +- example: false +- Attachable: +- description: | +- Whether a global / swarm scope network is manually attachable by regular +- containers from workers in swarm mode. +- type: "boolean" +- x-nullable: false +- x-omitempty: false +- default: false +- example: false +- Ingress: +- description: | +- Whether the network is providing the routing-mesh for the swarm cluster. +- type: "boolean" +- x-nullable: false +- x-omitempty: false +- default: false +- example: false +- ConfigFrom: +- $ref: "#/definitions/ConfigReference" +- x-nullable: false +- x-omitempty: false +- ConfigOnly: +- description: | +- Whether the network is a config-only network. Config-only networks are +- placeholder networks for network configurations to be used by other +- networks. Config-only networks cannot be used directly to run containers +- or services. +- type: "boolean" +- x-omitempty: false +- x-nullable: false +- default: false +- Options: +- description: | +- Network-specific options uses when creating the network. +- type: "object" +- x-omitempty: false +- additionalProperties: +- type: "string" +- example: +- com.docker.network.bridge.default_bridge: "true" +- com.docker.network.bridge.enable_icc: "true" +- com.docker.network.bridge.enable_ip_masquerade: "true" +- com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" +- com.docker.network.bridge.name: "docker0" +- com.docker.network.driver.mtu: "1500" +- Labels: +- description: | +- Metadata specific to the network being created. +- type: "object" +- x-omitempty: false +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- Peers: +- description: | +- List of peer nodes for an overlay network. This field is only present +- for overlay networks, and omitted for other network types. +- type: "array" +- x-omitempty: true +- items: +- $ref: "#/definitions/PeerInfo" +- +- NetworkSummary: +- description: "Network list response item" +- x-go-name: Summary +- type: "object" +- allOf: +- - $ref: "#/definitions/Network" +- +- NetworkInspect: +- description: 'The body of the "get network" http response message.' +- x-go-name: Inspect +- type: "object" +- allOf: +- - $ref: "#/definitions/Network" +- properties: +- Containers: +- description: | +- Contains endpoints attached to the network. +- type: "object" +- x-omitempty: false +- additionalProperties: +- $ref: "#/definitions/EndpointResource" +- example: +- 19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c: +- Name: "test" +- EndpointID: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" +- MacAddress: "02:42:ac:13:00:02" +- IPv4Address: "172.19.0.2/16" +- IPv6Address: "" +- Services: +- description: | +- List of services using the network. This field is only present for +- swarm scope networks, and omitted for local scope networks. +- type: "object" +- x-omitempty: true +- additionalProperties: +- x-go-type: +- type: ServiceInfo +- hints: +- nullable: false +- Status: +- description: > +- provides runtime information about the network +- such as the number of allocated IPs. +- $ref: "#/definitions/NetworkStatus" +- +- NetworkStatus: +- description: > +- provides runtime information about the network +- such as the number of allocated IPs. +- type: "object" +- x-go-name: Status +- properties: +- IPAM: +- $ref: "#/definitions/IPAMStatus" +- +- ServiceInfo: +- x-nullable: false +- x-omitempty: false +- description: > +- represents service parameters with the list of service's tasks +- type: "object" +- properties: +- VIP: +- type: "string" +- x-omitempty: false +- x-go-type: +- type: Addr +- import: +- package: net/netip +- Ports: +- type: "array" +- x-omitempty: false +- items: +- type: "string" +- LocalLBIndex: +- type: "integer" +- format: "int" +- x-omitempty: false +- x-go-type: +- type: int +- Tasks: +- type: "array" +- x-omitempty: false +- items: +- $ref: "#/definitions/NetworkTaskInfo" +- +- NetworkTaskInfo: +- x-nullable: false +- x-omitempty: false +- x-go-name: Task +- description: > +- carries the information about one backend task +- type: "object" +- properties: +- Name: +- type: "string" +- x-omitempty: false +- EndpointID: +- type: "string" +- x-omitempty: false +- EndpointIP: +- type: "string" +- x-omitempty: false +- x-go-type: +- type: Addr +- import: +- package: net/netip +- Info: +- type: "object" +- x-omitempty: false +- additionalProperties: +- type: "string" +- +- ConfigReference: +- x-nullable: false +- x-omitempty: false +- description: | +- The config-only network source to provide the configuration for +- this network. +- type: "object" +- properties: +- Network: +- description: | +- The name of the config-only network that provides the network's +- configuration. The specified network must be an existing config-only +- network. Only network names are allowed, not network IDs. +- type: "string" +- x-omitempty: false +- example: "config_only_network_01" +- +- IPAM: +- type: "object" +- x-nullable: false +- x-omitempty: false +- properties: +- Driver: +- description: "Name of the IPAM driver to use." +- type: "string" +- default: "default" +- example: "default" +- Config: +- description: | +- List of IPAM configuration options, specified as a map: +- +- ``` +- {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } +- ``` +- type: "array" +- items: +- $ref: "#/definitions/IPAMConfig" +- Options: +- description: "Driver-specific options, specified as a map." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- foo: "bar" +- +- IPAMConfig: +- type: "object" +- properties: +- Subnet: +- type: "string" +- example: "172.20.0.0/16" +- IPRange: +- type: "string" +- example: "172.20.10.0/24" +- Gateway: +- type: "string" +- example: "172.20.10.11" +- AuxiliaryAddresses: +- type: "object" +- additionalProperties: +- type: "string" +- +- IPAMStatus: +- type: "object" +- x-nullable: false +- x-omitempty: false +- properties: +- Subnets: +- type: "object" +- additionalProperties: +- $ref: "#/definitions/SubnetStatus" +- example: +- "172.16.0.0/16": +- IPsInUse: 3 +- DynamicIPsAvailable: 65533 +- "2001:db8:abcd:0012::0/96": +- IPsInUse: 5 +- DynamicIPsAvailable: 4294967291 +- x-go-type: +- type: SubnetStatuses +- kind: map +- +- SubnetStatus: +- type: "object" +- x-nullable: false +- x-omitempty: false +- properties: +- IPsInUse: +- description: > +- Number of IP addresses in the subnet that are in use or reserved and +- are therefore unavailable for allocation, saturating at 264 - 1. +- type: integer +- format: uint64 +- x-omitempty: false +- DynamicIPsAvailable: +- description: > +- Number of IP addresses within the network's IPRange for the subnet +- that are available for allocation, saturating at 264 - 1. +- type: integer +- format: uint64 +- x-omitempty: false +- +- EndpointResource: +- type: "object" +- description: > +- contains network resources allocated and used for a +- container in a network. +- properties: +- Name: +- type: "string" +- x-omitempty: false +- example: "container_1" +- EndpointID: +- type: "string" +- x-omitempty: false +- example: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" +- MacAddress: +- type: "string" +- x-omitempty: false +- example: "02:42:ac:13:00:02" +- x-go-type: +- type: HardwareAddr +- IPv4Address: +- type: "string" +- x-omitempty: false +- example: "172.19.0.2/16" +- x-go-type: +- type: Prefix +- import: +- package: net/netip +- IPv6Address: +- type: "string" +- x-omitempty: false +- example: "" +- x-go-type: +- type: Prefix +- import: +- package: net/netip +- +- PeerInfo: +- description: > +- represents one peer of an overlay network. +- type: "object" +- x-nullable: false +- properties: +- Name: +- description: +- ID of the peer-node in the Swarm cluster. +- type: "string" +- x-omitempty: false +- example: "6869d7c1732b" +- IP: +- description: +- IP-address of the peer-node in the Swarm cluster. +- type: "string" +- x-omitempty: false +- example: "10.133.77.91" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- +- NetworkCreateResponse: +- description: "OK response to NetworkCreate operation" +- type: "object" +- title: "NetworkCreateResponse" +- x-go-name: "CreateResponse" +- required: [Id, Warning] +- properties: +- Id: +- description: "The ID of the created network." +- type: "string" +- x-nullable: false +- example: "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d" +- Warning: +- description: "Warnings encountered when creating the container" +- type: "string" +- x-nullable: false +- example: "" +- +- BuildInfo: +- type: "object" +- properties: +- id: +- type: "string" +- stream: +- type: "string" +- errorDetail: +- $ref: "#/definitions/ErrorDetail" +- status: +- type: "string" +- progressDetail: +- $ref: "#/definitions/ProgressDetail" +- aux: +- $ref: "#/definitions/ImageID" +- +- BuildCache: +- type: "object" +- description: | +- BuildCache contains information about a build cache record. +- properties: +- ID: +- type: "string" +- description: | +- Unique ID of the build cache record. +- example: "ndlpt0hhvkqcdfkputsk4cq9c" +- Parents: +- description: | +- List of parent build cache record IDs. +- type: "array" +- items: +- type: "string" +- x-nullable: true +- example: ["hw53o5aio51xtltp5xjp8v7fx"] +- Type: +- type: "string" +- description: | +- Cache record type. +- example: "regular" +- # see https://github.com/moby/buildkit/blob/fce4a32258dc9d9664f71a4831d5de10f0670677/client/diskusage.go#L75-L84 +- enum: +- - "internal" +- - "frontend" +- - "source.local" +- - "source.git.checkout" +- - "exec.cachemount" +- - "regular" +- Description: +- type: "string" +- description: | +- Description of the build-step that produced the build cache. +- example: "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" +- InUse: +- type: "boolean" +- description: | +- Indicates if the build cache is in use. +- example: false +- Shared: +- type: "boolean" +- description: | +- Indicates if the build cache is shared. +- example: true +- Size: +- description: | +- Amount of disk space used by the build cache (in bytes). +- type: "integer" +- example: 51 +- CreatedAt: +- description: | +- Date and time at which the build cache was created in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2016-08-18T10:44:24.496525531Z" +- LastUsedAt: +- description: | +- Date and time at which the build cache was last used in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- x-nullable: true +- example: "2017-08-09T07:09:37.632105588Z" +- UsageCount: +- type: "integer" +- example: 26 +- +- BuildCacheDiskUsage: +- type: "object" +- x-go-name: "DiskUsage" +- x-go-package: "github.com/moby/moby/api/types/build" +- description: | +- represents system data usage for build cache resources. +- properties: +- ActiveCount: +- description: | +- Count of active build cache records. +- type: "integer" +- format: "int64" +- example: 1 +- TotalCount: +- description: | +- Count of all build cache records. +- type: "integer" +- format: "int64" +- example: 4 +- Reclaimable: +- description: | +- Disk space that can be reclaimed by removing inactive build cache records. +- type: "integer" +- format: "int64" +- example: 12345678 +- TotalSize: +- description: | +- Disk space in use by build cache records. +- type: "integer" +- format: "int64" +- example: 98765432 +- Items: +- description: | +- List of build cache records. +- type: "array" +- x-omitempty: true +- items: +- x-go-type: +- type: CacheRecord +- +- ImageID: +- type: "object" +- description: "Image ID or Digest" +- properties: +- ID: +- type: "string" +- example: +- ID: "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" +- +- CreateImageInfo: +- type: "object" +- properties: +- id: +- type: "string" +- errorDetail: +- $ref: "#/definitions/ErrorDetail" +- status: +- type: "string" +- progressDetail: +- $ref: "#/definitions/ProgressDetail" +- +- PushImageInfo: +- type: "object" +- properties: +- errorDetail: +- $ref: "#/definitions/ErrorDetail" +- status: +- type: "string" +- progressDetail: +- $ref: "#/definitions/ProgressDetail" +- +- DeviceInfo: +- type: "object" +- description: | +- DeviceInfo represents a device that can be used by a container. +- properties: +- Source: +- type: "string" +- example: "cdi" +- description: | +- The origin device driver. +- ID: +- type: "string" +- example: "vendor.com/gpu=0" +- description: | +- The unique identifier for the device within its source driver. +- For CDI devices, this would be an FQDN like "vendor.com/gpu=0". +- +- NRIInfo: +- description: | +- Information about the Node Resource Interface (NRI). +- +- This field is only present if NRI is enabled. +- type: "object" +- x-nullable: true +- properties: +- Info: +- description: | +- Information about NRI, provided as "label" / "value" pairs. +- +-


+- +- > **Note**: The information returned in this field, including the +- > formatting of values and labels, should not be considered stable, +- > and may change without notice. +- type: "array" +- items: +- type: "array" +- items: +- type: "string" +- example: +- - ["plugin-path", "/opt/docker/nri/plugins"] +- +- ErrorDetail: +- type: "object" +- properties: +- code: +- type: "integer" +- message: +- type: "string" +- +- ProgressDetail: +- type: "object" +- properties: +- current: +- type: "integer" +- total: +- type: "integer" +- +- ErrorResponse: +- description: "Represents an error." +- type: "object" +- required: ["message"] +- properties: +- message: +- description: "The error message." +- type: "string" +- x-nullable: false +- example: +- message: "Something went wrong." +- +- IDResponse: +- description: "Response to an API call that returns just an Id" +- type: "object" +- x-go-name: "IDResponse" +- required: ["Id"] +- properties: +- Id: +- description: "The id of the newly created object." +- type: "string" +- x-nullable: false +- +- NetworkConnectRequest: +- description: | +- NetworkConnectRequest represents the data to be used to connect a container to a network. +- type: "object" +- x-go-name: "ConnectRequest" +- required: ["Container"] +- properties: +- Container: +- type: "string" +- description: "The ID or name of the container to connect to the network." +- x-nullable: false +- example: "3613f73ba0e4" +- EndpointConfig: +- $ref: "#/definitions/EndpointSettings" +- x-nullable: true +- +- NetworkDisconnectRequest: +- description: | +- NetworkDisconnectRequest represents the data to be used to disconnect a container from a network. +- type: "object" +- x-go-name: "DisconnectRequest" +- required: ["Container"] +- properties: +- Container: +- type: "string" +- description: "The ID or name of the container to disconnect from the network." +- x-nullable: false +- example: "3613f73ba0e4" +- Force: +- type: "boolean" +- description: "Force the container to disconnect from the network." +- default: false +- x-nullable: false +- x-omitempty: false +- example: false +- +- EndpointSettings: +- description: "Configuration for a network endpoint." +- type: "object" +- properties: +- # Configurations +- IPAMConfig: +- $ref: "#/definitions/EndpointIPAMConfig" +- Links: +- type: "array" +- items: +- type: "string" +- example: +- - "container_1" +- - "container_2" +- MacAddress: +- description: | +- MAC address for the endpoint on this network. The network driver might ignore this parameter. +- type: "string" +- example: "02:42:ac:11:00:04" +- x-go-type: +- type: HardwareAddr +- Aliases: +- type: "array" +- items: +- type: "string" +- example: +- - "server_x" +- - "server_y" +- DriverOpts: +- description: | +- DriverOpts is a mapping of driver options and values. These options +- are passed directly to the driver and are driver specific. +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- GwPriority: +- description: | +- This property determines which endpoint will provide the default +- gateway for a container. The endpoint with the highest priority will +- be used. If multiple endpoints have the same priority, endpoints are +- lexicographically sorted based on their network name, and the one +- that sorts first is picked. +- type: "integer" +- format: "int64" +- example: +- - 10 +- +- # Operational data +- NetworkID: +- description: | +- Unique ID of the network. +- type: "string" +- example: "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" +- EndpointID: +- description: | +- Unique ID for the service endpoint in a Sandbox. +- type: "string" +- example: "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" +- Gateway: +- description: | +- Gateway address for this network. +- type: "string" +- example: "172.17.0.1" +- IPAddress: +- description: | +- IPv4 address. +- type: "string" +- example: "172.17.0.4" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- IPPrefixLen: +- description: | +- Mask length of the IPv4 address. +- type: "integer" +- example: 16 +- IPv6Gateway: +- description: | +- IPv6 gateway address. +- type: "string" +- example: "2001:db8:2::100" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- GlobalIPv6Address: +- description: | +- Global IPv6 address. +- type: "string" +- example: "2001:db8::5689" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- GlobalIPv6PrefixLen: +- description: | +- Mask length of the global IPv6 address. +- type: "integer" +- format: "int64" +- example: 64 +- DNSNames: +- description: | +- List of all DNS names an endpoint has on a specific network. This +- list is based on the container name, network aliases, container short +- ID, and hostname. +- +- These DNS names are non-fully qualified but can contain several dots. +- You can get fully qualified DNS names by appending `.`. +- For instance, if container name is `my.ctr` and the network is named +- `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be +- `my.ctr.testnet`. +- type: array +- items: +- type: string +- example: ["foobar", "server_x", "server_y", "my.ctr"] +- +- EndpointIPAMConfig: +- description: | +- EndpointIPAMConfig represents an endpoint's IPAM configuration. +- type: "object" +- x-nullable: true +- properties: +- IPv4Address: +- type: "string" +- example: "172.20.30.33" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- IPv6Address: +- type: "string" +- example: "2001:db8:abcd::3033" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- LinkLocalIPs: +- type: "array" +- items: +- type: "string" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- example: +- - "169.254.34.68" +- - "fe80::3468" +- +- PluginMount: +- type: "object" +- x-go-name: "Mount" +- x-nullable: false +- required: [Name, Description, Settable, Source, Destination, Type, Options] +- properties: +- Name: +- type: "string" +- x-nullable: false +- example: "some-mount" +- Description: +- type: "string" +- x-nullable: false +- example: "This is a mount that's used by the plugin." +- Settable: +- type: "array" +- items: +- type: "string" +- Source: +- type: "string" +- example: "/var/lib/docker/plugins/" +- Destination: +- type: "string" +- x-nullable: false +- example: "/mnt/state" +- Type: +- type: "string" +- x-nullable: false +- example: "bind" +- Options: +- type: "array" +- items: +- type: "string" +- example: +- - "rbind" +- - "rw" +- +- PluginDevice: +- type: "object" +- x-go-name: "Device" +- required: [Name, Description, Settable, Path] +- x-nullable: false +- properties: +- Name: +- type: "string" +- x-nullable: false +- Description: +- type: "string" +- x-nullable: false +- Settable: +- type: "array" +- items: +- type: "string" +- Path: +- type: "string" +- example: "/dev/fuse" +- +- PluginEnv: +- type: "object" +- x-go-name: "Env" +- x-nullable: false +- required: [Name, Description, Settable, Value] +- properties: +- Name: +- x-nullable: false +- type: "string" +- Description: +- x-nullable: false +- type: "string" +- Settable: +- type: "array" +- items: +- type: "string" +- Value: +- type: "string" +- +- PluginPrivilege: +- description: | +- Describes a permission the user has to accept upon installing +- the plugin. +- type: "object" +- x-go-name: "Privilege" +- properties: +- Name: +- type: "string" +- example: "network" +- Description: +- type: "string" +- Value: +- type: "array" +- items: +- type: "string" +- example: +- - "host" +- +- Plugin: +- description: "A plugin for the Engine API" +- type: "object" +- x-go-name: "Plugin" +- required: [Settings, Enabled, Config, Name] +- properties: +- Id: +- type: "string" +- example: "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" +- Name: +- type: "string" +- x-nullable: false +- example: "tiborvass/sample-volume-plugin" +- Enabled: +- description: +- True if the plugin is running. False if the plugin is not running, +- only installed. +- type: "boolean" +- x-nullable: false +- example: true +- Settings: +- description: "user-configurable settings for the plugin." +- type: "object" +- x-go-name: "Settings" +- x-nullable: false +- required: [Args, Devices, Env, Mounts] +- properties: +- Mounts: +- type: "array" +- items: +- $ref: "#/definitions/PluginMount" +- Env: +- type: "array" +- items: +- type: "string" +- example: +- - "DEBUG=0" +- Args: +- type: "array" +- items: +- type: "string" +- Devices: +- type: "array" +- items: +- $ref: "#/definitions/PluginDevice" +- PluginReference: +- description: "plugin remote reference used to push/pull the plugin" +- type: "string" +- x-go-name: "PluginReference" +- x-nullable: false +- example: "localhost:5000/tiborvass/sample-volume-plugin:latest" +- Config: +- description: "The config of a plugin." +- type: "object" +- x-go-name: "Config" +- x-nullable: false +- required: +- - Description +- - Documentation +- - Interface +- - Entrypoint +- - WorkDir +- - Network +- - Linux +- - PidHost +- - PropagatedMount +- - IpcHost +- - Mounts +- - Env +- - Args +- properties: +- Description: +- type: "string" +- x-nullable: false +- example: "A sample volume plugin for Docker" +- Documentation: +- type: "string" +- x-nullable: false +- example: "https://docs.docker.com/engine/extend/plugins/" +- Interface: +- description: "The interface between Docker and the plugin" +- x-nullable: false +- type: "object" +- x-go-name: "Interface" +- required: [Types, Socket] +- properties: +- Types: +- type: "array" +- items: +- type: "string" +- x-go-type: +- type: "CapabilityID" +- example: +- - "docker.volumedriver/1.0" +- Socket: +- type: "string" +- x-nullable: false +- example: "plugins.sock" +- ProtocolScheme: +- type: "string" +- example: "some.protocol/v1.0" +- description: "Protocol to use for clients connecting to the plugin." +- enum: +- - "" +- - "moby.plugins.http/v1" +- Entrypoint: +- type: "array" +- items: +- type: "string" +- example: +- - "/usr/bin/sample-volume-plugin" +- - "/data" +- WorkDir: +- type: "string" +- x-nullable: false +- example: "/bin/" +- User: +- type: "object" +- x-go-name: "User" +- x-nullable: false +- properties: +- UID: +- type: "integer" +- format: "uint32" +- example: 1000 +- GID: +- type: "integer" +- format: "uint32" +- example: 1000 +- Network: +- type: "object" +- x-go-name: "NetworkConfig" +- x-nullable: false +- required: [Type] +- properties: +- Type: +- x-nullable: false +- type: "string" +- example: "host" +- Linux: +- type: "object" +- x-go-name: "LinuxConfig" +- x-nullable: false +- required: [Capabilities, AllowAllDevices, Devices] +- properties: +- Capabilities: +- type: "array" +- items: +- type: "string" +- example: +- - "CAP_SYS_ADMIN" +- - "CAP_SYSLOG" +- AllowAllDevices: +- type: "boolean" +- x-nullable: false +- example: false +- Devices: +- type: "array" +- items: +- $ref: "#/definitions/PluginDevice" +- PropagatedMount: +- type: "string" +- x-nullable: false +- example: "/mnt/volumes" +- IpcHost: +- type: "boolean" +- x-nullable: false +- example: false +- PidHost: +- type: "boolean" +- x-nullable: false +- example: false +- Mounts: +- type: "array" +- items: +- $ref: "#/definitions/PluginMount" +- Env: +- type: "array" +- items: +- $ref: "#/definitions/PluginEnv" +- example: +- - Name: "DEBUG" +- Description: "If set, prints debug messages" +- Settable: null +- Value: "0" +- Args: +- type: "object" +- x-go-name: "Args" +- x-nullable: false +- required: [Name, Description, Settable, Value] +- properties: +- Name: +- x-nullable: false +- type: "string" +- example: "args" +- Description: +- x-nullable: false +- type: "string" +- example: "command line arguments" +- Settable: +- type: "array" +- items: +- type: "string" +- Value: +- type: "array" +- items: +- type: "string" +- rootfs: +- type: "object" +- x-go-name: "RootFS" +- properties: +- type: +- type: "string" +- example: "layers" +- diff_ids: +- type: "array" +- items: +- type: "string" +- example: +- - "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887" +- - "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" +- +- ObjectVersion: +- description: | +- The version number of the object such as node, service, etc. This is needed +- to avoid conflicting writes. The client must send the version number along +- with the modified specification when updating these objects. +- +- This approach ensures safe concurrency and determinism in that the change +- on the object may not be applied if the version number has changed from the +- last read. In other words, if two update requests specify the same base +- version, only one of the requests can succeed. As a result, two separate +- update requests that happen at the same time will not unintentionally +- overwrite each other. +- type: "object" +- properties: +- Index: +- type: "integer" +- format: "uint64" +- example: 373531 +- +- NodeSpec: +- type: "object" +- properties: +- Name: +- description: "Name for the node." +- type: "string" +- example: "my-node" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- Role: +- description: "Role of the node." +- type: "string" +- enum: +- - "worker" +- - "manager" +- example: "manager" +- Availability: +- description: "Availability of the node." +- type: "string" +- enum: +- - "active" +- - "pause" +- - "drain" +- example: "active" +- example: +- Availability: "active" +- Name: "node-name" +- Role: "manager" +- Labels: +- foo: "bar" +- +- Node: +- type: "object" +- properties: +- ID: +- type: "string" +- example: "24ifsmvkjbyhk" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- description: | +- Date and time at which the node was added to the swarm in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2016-08-18T10:44:24.496525531Z" +- UpdatedAt: +- description: | +- Date and time at which the node was last updated in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2017-08-09T07:09:37.632105588Z" +- Spec: +- $ref: "#/definitions/NodeSpec" +- Description: +- $ref: "#/definitions/NodeDescription" +- Status: +- $ref: "#/definitions/NodeStatus" +- ManagerStatus: +- $ref: "#/definitions/ManagerStatus" +- +- NodeDescription: +- description: | +- NodeDescription encapsulates the properties of the Node as reported by the +- agent. +- type: "object" +- properties: +- Hostname: +- type: "string" +- example: "bf3067039e47" +- Platform: +- $ref: "#/definitions/Platform" +- Resources: +- $ref: "#/definitions/ResourceObject" +- Engine: +- $ref: "#/definitions/EngineDescription" +- TLSInfo: +- $ref: "#/definitions/TLSInfo" +- +- Platform: +- description: | +- Platform represents the platform (Arch/OS). +- type: "object" +- properties: +- Architecture: +- description: | +- Architecture represents the hardware architecture (for example, +- `x86_64`). +- type: "string" +- example: "x86_64" +- OS: +- description: | +- OS represents the Operating System (for example, `linux` or `windows`). +- type: "string" +- example: "linux" +- +- EngineDescription: +- description: "EngineDescription provides information about an engine." +- type: "object" +- properties: +- EngineVersion: +- type: "string" +- example: "17.06.0" +- Labels: +- type: "object" +- additionalProperties: +- type: "string" +- example: +- foo: "bar" +- Plugins: +- type: "array" +- items: +- type: "object" +- properties: +- Type: +- type: "string" +- Name: +- type: "string" +- example: +- - Type: "Log" +- Name: "awslogs" +- - Type: "Log" +- Name: "fluentd" +- - Type: "Log" +- Name: "gcplogs" +- - Type: "Log" +- Name: "gelf" +- - Type: "Log" +- Name: "journald" +- - Type: "Log" +- Name: "json-file" +- - Type: "Log" +- Name: "splunk" +- - Type: "Log" +- Name: "syslog" +- - Type: "Network" +- Name: "bridge" +- - Type: "Network" +- Name: "host" +- - Type: "Network" +- Name: "ipvlan" +- - Type: "Network" +- Name: "macvlan" +- - Type: "Network" +- Name: "null" +- - Type: "Network" +- Name: "overlay" +- - Type: "Volume" +- Name: "local" +- - Type: "Volume" +- Name: "localhost:5000/vieux/sshfs:latest" +- - Type: "Volume" +- Name: "vieux/sshfs:latest" +- +- TLSInfo: +- description: | +- Information about the issuer of leaf TLS certificates and the trusted root +- CA certificate. +- type: "object" +- properties: +- TrustRoot: +- description: | +- The root CA certificate(s) that are used to validate leaf TLS +- certificates. +- type: "string" +- CertIssuerSubject: +- description: +- The base64-url-safe-encoded raw subject bytes of the issuer. +- type: "string" +- CertIssuerPublicKey: +- description: | +- The base64-url-safe-encoded raw public key bytes of the issuer. +- type: "string" +- example: +- TrustRoot: | +- -----BEGIN CERTIFICATE----- +- MIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw +- EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0 +- MzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH +- A0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf +- 3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +- Af8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO +- PQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz +- pxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H +- -----END CERTIFICATE----- +- CertIssuerSubject: "MBMxETAPBgNVBAMTCHN3YXJtLWNh" +- CertIssuerPublicKey: "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" +- +- NodeStatus: +- description: | +- NodeStatus represents the status of a node. +- +- It provides the current status of the node, as seen by the manager. +- type: "object" +- properties: +- State: +- $ref: "#/definitions/NodeState" +- Message: +- type: "string" +- example: "" +- Addr: +- description: "IP address of the node." +- type: "string" +- example: "172.17.0.2" +- +- NodeState: +- description: "NodeState represents the state of a node." +- type: "string" +- enum: +- - "unknown" +- - "down" +- - "ready" +- - "disconnected" +- example: "ready" +- +- ManagerStatus: +- description: | +- ManagerStatus represents the status of a manager. +- +- It provides the current status of a node's manager component, if the node +- is a manager. +- x-nullable: true +- type: "object" +- properties: +- Leader: +- type: "boolean" +- default: false +- example: true +- Reachability: +- $ref: "#/definitions/Reachability" +- Addr: +- description: | +- The IP address and port at which the manager is reachable. +- type: "string" +- example: "10.0.0.46:2377" +- +- Reachability: +- description: "Reachability represents the reachability of a node." +- type: "string" +- enum: +- - "unknown" +- - "unreachable" +- - "reachable" +- example: "reachable" +- +- SwarmSpec: +- description: "User modifiable swarm configuration." +- type: "object" +- properties: +- Name: +- description: "Name of the swarm." +- type: "string" +- example: "default" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.corp.type: "production" +- com.example.corp.department: "engineering" +- Orchestration: +- description: "Orchestration configuration." +- type: "object" +- x-nullable: true +- properties: +- TaskHistoryRetentionLimit: +- description: | +- The number of historic tasks to keep per instance or node. If +- negative, never remove completed or failed tasks. +- type: "integer" +- format: "int64" +- example: 10 +- Raft: +- description: "Raft configuration." +- type: "object" +- properties: +- SnapshotInterval: +- description: "The number of log entries between snapshots." +- type: "integer" +- format: "uint64" +- example: 10000 +- KeepOldSnapshots: +- description: | +- The number of snapshots to keep beyond the current snapshot. +- type: "integer" +- format: "uint64" +- LogEntriesForSlowFollowers: +- description: | +- The number of log entries to keep around to sync up slow followers +- after a snapshot is created. +- type: "integer" +- format: "uint64" +- example: 500 +- ElectionTick: +- description: | +- The number of ticks that a follower will wait for a message from +- the leader before becoming a candidate and starting an election. +- `ElectionTick` must be greater than `HeartbeatTick`. +- +- A tick currently defaults to one second, so these translate +- directly to seconds currently, but this is NOT guaranteed. +- type: "integer" +- example: 3 +- HeartbeatTick: +- description: | +- The number of ticks between heartbeats. Every HeartbeatTick ticks, +- the leader will send a heartbeat to the followers. +- +- A tick currently defaults to one second, so these translate +- directly to seconds currently, but this is NOT guaranteed. +- type: "integer" +- example: 1 +- Dispatcher: +- description: "Dispatcher configuration." +- type: "object" +- x-nullable: true +- properties: +- HeartbeatPeriod: +- description: | +- The delay for an agent to send a heartbeat to the dispatcher. +- type: "integer" +- format: "int64" +- example: 5000000000 +- CAConfig: +- description: "CA configuration." +- type: "object" +- x-nullable: true +- properties: +- NodeCertExpiry: +- description: "The duration node certificates are issued for." +- type: "integer" +- format: "int64" +- example: 7776000000000000 +- ExternalCAs: +- description: | +- Configuration for forwarding signing requests to an external +- certificate authority. +- type: "array" +- items: +- type: "object" +- properties: +- Protocol: +- description: | +- Protocol for communication with the external CA (currently +- only `cfssl` is supported). +- type: "string" +- enum: +- - "cfssl" +- default: "cfssl" +- URL: +- description: | +- URL where certificate signing requests should be sent. +- type: "string" +- Options: +- description: | +- An object with key/value pairs that are interpreted as +- protocol-specific options for the external CA driver. +- type: "object" +- additionalProperties: +- type: "string" +- CACert: +- description: | +- The root CA certificate (in PEM format) this external CA uses +- to issue TLS certificates (assumed to be to the current swarm +- root CA certificate if not provided). +- type: "string" +- SigningCACert: +- description: | +- The desired signing CA certificate for all swarm node TLS leaf +- certificates, in PEM format. +- type: "string" +- SigningCAKey: +- description: | +- The desired signing CA key for all swarm node TLS leaf certificates, +- in PEM format. +- type: "string" +- ForceRotate: +- description: | +- An integer whose purpose is to force swarm to generate a new +- signing CA certificate and key, if none have been specified in +- `SigningCACert` and `SigningCAKey` +- format: "uint64" +- type: "integer" +- EncryptionConfig: +- description: "Parameters related to encryption-at-rest." +- type: "object" +- properties: +- AutoLockManagers: +- description: | +- If set, generate a key and use it to lock data stored on the +- managers. +- type: "boolean" +- example: false +- TaskDefaults: +- description: "Defaults for creating tasks in this cluster." +- type: "object" +- properties: +- LogDriver: +- description: | +- The log driver to use for tasks created in the orchestrator if +- unspecified by a service. +- +- Updating this value only affects new tasks. Existing tasks continue +- to use their previously configured log driver until recreated. +- type: "object" +- properties: +- Name: +- description: | +- The log driver to use as a default for new tasks. +- type: "string" +- example: "json-file" +- Options: +- description: | +- Driver-specific options for the selected log driver, specified +- as key/value pairs. +- type: "object" +- additionalProperties: +- type: "string" +- example: +- "max-file": "10" +- "max-size": "100m" +- +- # The Swarm information for `GET /info`. It is the same as `GET /swarm`, but +- # without `JoinTokens`. +- ClusterInfo: +- description: | +- ClusterInfo represents information about the swarm as is returned by the +- "/info" endpoint. Join-tokens are not included. +- x-nullable: true +- type: "object" +- properties: +- ID: +- description: "The ID of the swarm." +- type: "string" +- example: "abajmipo7b4xz5ip2nrla6b11" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- description: | +- Date and time at which the swarm was initialised in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2016-08-18T10:44:24.496525531Z" +- UpdatedAt: +- description: | +- Date and time at which the swarm was last updated in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2017-08-09T07:09:37.632105588Z" +- Spec: +- $ref: "#/definitions/SwarmSpec" +- TLSInfo: +- $ref: "#/definitions/TLSInfo" +- RootRotationInProgress: +- description: | +- Whether there is currently a root CA rotation in progress for the swarm +- type: "boolean" +- example: false +- DataPathPort: +- description: | +- DataPathPort specifies the data path port number for data traffic. +- Acceptable port range is 1024 to 49151. +- If no port is set or is set to 0, the default port (4789) is used. +- type: "integer" +- format: "uint32" +- default: 4789 +- example: 4789 +- DefaultAddrPool: +- description: | +- Default Address Pool specifies default subnet pools for global scope +- networks. +- type: "array" +- items: +- type: "string" +- format: "CIDR" +- example: ["10.10.0.0/16", "20.20.0.0/16"] +- SubnetSize: +- description: | +- SubnetSize specifies the subnet size of the networks created from the +- default subnet pool. +- type: "integer" +- format: "uint32" +- maximum: 29 +- default: 24 +- example: 24 +- +- JoinTokens: +- description: | +- JoinTokens contains the tokens workers and managers need to join the swarm. +- type: "object" +- properties: +- Worker: +- description: | +- The token workers can use to join the swarm. +- type: "string" +- example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" +- Manager: +- description: | +- The token managers can use to join the swarm. +- type: "string" +- example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" +- +- Swarm: +- type: "object" +- allOf: +- - $ref: "#/definitions/ClusterInfo" +- - type: "object" +- properties: +- JoinTokens: +- $ref: "#/definitions/JoinTokens" +- +- TaskSpec: +- description: "User modifiable task configuration." +- type: "object" +- properties: +- PluginSpec: +- type: "object" +- description: | +- Plugin spec for the service. *(Experimental release only.)* +- +-


+- +- > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are +- > mutually exclusive. PluginSpec is only used when the Runtime field +- > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime +- > field is set to `attachment`. +- properties: +- Name: +- description: "The name or 'alias' to use for the plugin." +- type: "string" +- Remote: +- description: "The plugin image reference to use." +- type: "string" +- Disabled: +- description: "Disable the plugin once scheduled." +- type: "boolean" +- PluginPrivilege: +- type: "array" +- items: +- $ref: "#/definitions/PluginPrivilege" +- ContainerSpec: +- type: "object" +- description: | +- Container spec for the service. +- +-


+- +- > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are +- > mutually exclusive. PluginSpec is only used when the Runtime field +- > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime +- > field is set to `attachment`. +- properties: +- Image: +- description: "The image name to use for the container" +- type: "string" +- Labels: +- description: "User-defined key/value data." +- type: "object" +- additionalProperties: +- type: "string" +- Command: +- description: "The command to be run in the image." +- type: "array" +- items: +- type: "string" +- Args: +- description: "Arguments to the command." +- type: "array" +- items: +- type: "string" +- Hostname: +- description: | +- The hostname to use for the container, as a valid +- [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. +- type: "string" +- Env: +- description: | +- A list of environment variables in the form `VAR=value`. +- type: "array" +- items: +- type: "string" +- Dir: +- description: "The working directory for commands to run in." +- type: "string" +- User: +- description: "The user inside the container." +- type: "string" +- Groups: +- type: "array" +- description: | +- A list of additional groups that the container process will run as. +- items: +- type: "string" +- Privileges: +- type: "object" +- description: "Security options for the container" +- properties: +- CredentialSpec: +- type: "object" +- description: "CredentialSpec for managed service account (Windows only)" +- properties: +- Config: +- type: "string" +- example: "0bt9dmxjvjiqermk6xrop3ekq" +- description: | +- Load credential spec from a Swarm Config with the given ID. +- The specified config must also be present in the Configs +- field with the Runtime property set. +- +-


+- +- +- > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, +- > and `CredentialSpec.Config` are mutually exclusive. +- File: +- type: "string" +- example: "spec.json" +- description: | +- Load credential spec from this file. The file is read by +- the daemon, and must be present in the `CredentialSpecs` +- subdirectory in the docker data directory, which defaults +- to `C:\ProgramData\Docker\` on Windows. +- +- For example, specifying `spec.json` loads +- `C:\ProgramData\Docker\CredentialSpecs\spec.json`. +- +-


+- +- > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, +- > and `CredentialSpec.Config` are mutually exclusive. +- Registry: +- type: "string" +- description: | +- Load credential spec from this value in the Windows +- registry. The specified registry value must be located in: +- +- `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` +- +-


+- +- +- > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, +- > and `CredentialSpec.Config` are mutually exclusive. +- SELinuxContext: +- type: "object" +- description: "SELinux labels of the container" +- properties: +- Disable: +- type: "boolean" +- description: "Disable SELinux" +- User: +- type: "string" +- description: "SELinux user label" +- Role: +- type: "string" +- description: "SELinux role label" +- Type: +- type: "string" +- description: "SELinux type label" +- Level: +- type: "string" +- description: "SELinux level label" +- Seccomp: +- type: "object" +- description: "Options for configuring seccomp on the container" +- properties: +- Mode: +- type: "string" +- enum: +- - "default" +- - "unconfined" +- - "custom" +- Profile: +- description: "The custom seccomp profile as a json object" +- type: "string" +- AppArmor: +- type: "object" +- description: "Options for configuring AppArmor on the container" +- properties: +- Mode: +- type: "string" +- enum: +- - "default" +- - "disabled" +- NoNewPrivileges: +- type: "boolean" +- description: "Configuration of the no_new_privs bit in the container" +- +- TTY: +- description: "Whether a pseudo-TTY should be allocated." +- type: "boolean" +- OpenStdin: +- description: "Open `stdin`" +- type: "boolean" +- ReadOnly: +- description: "Mount the container's root filesystem as read only." +- type: "boolean" +- Mounts: +- description: | +- Specification for mounts to be added to containers created as part +- of the service. +- type: "array" +- items: +- $ref: "#/definitions/Mount" +- StopSignal: +- description: "Signal to stop the container." +- type: "string" +- StopGracePeriod: +- description: | +- Amount of time to wait for the container to terminate before +- forcefully killing it. +- type: "integer" +- format: "int64" +- Healthcheck: +- $ref: "#/definitions/HealthConfig" +- Hosts: +- type: "array" +- description: | +- A list of hostname/IP mappings to add to the container's `hosts` +- file. The format of extra hosts is specified in the +- [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) +- man page: +- +- IP_address canonical_hostname [aliases...] +- items: +- type: "string" +- DNSConfig: +- description: | +- Specification for DNS related configurations in resolver configuration +- file (`resolv.conf`). +- type: "object" +- properties: +- Nameservers: +- description: "The IP addresses of the name servers." +- type: "array" +- items: +- type: "string" +- Search: +- description: "A search list for host-name lookup." +- type: "array" +- items: +- type: "string" +- Options: +- description: | +- A list of internal resolver variables to be modified (e.g., +- `debug`, `ndots:3`, etc.). +- type: "array" +- items: +- type: "string" +- Secrets: +- description: | +- Secrets contains references to zero or more secrets that will be +- exposed to the service. +- type: "array" +- items: +- type: "object" +- properties: +- File: +- description: | +- File represents a specific target that is backed by a file. +- type: "object" +- properties: +- Name: +- description: | +- Name represents the final filename in the filesystem. +- type: "string" +- UID: +- description: "UID represents the file UID." +- type: "string" +- GID: +- description: "GID represents the file GID." +- type: "string" +- Mode: +- description: "Mode represents the FileMode of the file." +- type: "integer" +- format: "uint32" +- SecretID: +- description: | +- SecretID represents the ID of the specific secret that we're +- referencing. +- type: "string" +- SecretName: +- description: | +- SecretName is the name of the secret that this references, +- but this is just provided for lookup/display purposes. The +- secret in the reference will be identified by its ID. +- type: "string" +- OomScoreAdj: +- type: "integer" +- format: "int64" +- description: | +- An integer value containing the score given to the container in +- order to tune OOM killer preferences. +- example: 0 +- Configs: +- description: | +- Configs contains references to zero or more configs that will be +- exposed to the service. +- type: "array" +- items: +- type: "object" +- properties: +- File: +- description: | +- File represents a specific target that is backed by a file. +- +-


+- +- > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive +- type: "object" +- properties: +- Name: +- description: | +- Name represents the final filename in the filesystem. +- type: "string" +- UID: +- description: "UID represents the file UID." +- type: "string" +- GID: +- description: "GID represents the file GID." +- type: "string" +- Mode: +- description: "Mode represents the FileMode of the file." +- type: "integer" +- format: "uint32" +- Runtime: +- description: | +- Runtime represents a target that is not mounted into the +- container but is used by the task +- +-


+- +- > **Note**: `Configs.File` and `Configs.Runtime` are mutually +- > exclusive +- type: "object" +- ConfigID: +- description: | +- ConfigID represents the ID of the specific config that we're +- referencing. +- type: "string" +- ConfigName: +- description: | +- ConfigName is the name of the config that this references, +- but this is just provided for lookup/display purposes. The +- config in the reference will be identified by its ID. +- type: "string" +- Isolation: +- type: "string" +- description: | +- Isolation technology of the containers running the service. +- (Windows only) +- enum: +- - "default" +- - "process" +- - "hyperv" +- - "" +- Init: +- description: | +- Run an init inside the container that forwards signals and reaps +- processes. This field is omitted if empty, and the default (as +- configured on the daemon) is used. +- type: "boolean" +- x-nullable: true +- Sysctls: +- description: | +- Set kernel namedspaced parameters (sysctls) in the container. +- The Sysctls option on services accepts the same sysctls as the +- are supported on containers. Note that while the same sysctls are +- supported, no guarantees or checks are made about their +- suitability for a clustered environment, and it's up to the user +- to determine whether a given sysctl will work properly in a +- Service. +- type: "object" +- additionalProperties: +- type: "string" +- # This option is not used by Windows containers +- CapabilityAdd: +- type: "array" +- description: | +- A list of kernel capabilities to add to the default set +- for the container. +- items: +- type: "string" +- example: +- - "CAP_NET_RAW" +- - "CAP_SYS_ADMIN" +- - "CAP_SYS_CHROOT" +- - "CAP_SYSLOG" +- CapabilityDrop: +- type: "array" +- description: | +- A list of kernel capabilities to drop from the default set +- for the container. +- items: +- type: "string" +- example: +- - "CAP_NET_RAW" +- Ulimits: +- description: | +- A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`" +- type: "array" +- items: +- type: "object" +- properties: +- Name: +- description: "Name of ulimit" +- type: "string" +- Soft: +- description: "Soft limit" +- type: "integer" +- Hard: +- description: "Hard limit" +- type: "integer" +- NetworkAttachmentSpec: +- description: | +- Read-only spec type for non-swarm containers attached to swarm overlay +- networks. +- +-


+- +- > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are +- > mutually exclusive. PluginSpec is only used when the Runtime field +- > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime +- > field is set to `attachment`. +- type: "object" +- properties: +- ContainerID: +- description: "ID of the container represented by this task" +- type: "string" +- Resources: +- description: | +- Resource requirements which apply to each individual container created +- as part of the service. +- type: "object" +- properties: +- Limits: +- description: "Define resources limits." +- $ref: "#/definitions/Limit" +- Reservations: +- description: "Define resources reservation." +- $ref: "#/definitions/ResourceObject" +- SwapBytes: +- description: | +- Amount of swap in bytes - can only be used together with a memory limit. +- If not specified, the default behaviour is to grant a swap space twice +- as big as the memory limit. +- Set to -1 to enable unlimited swap. +- type: "integer" +- format: "int64" +- minimum: -1 +- x-nullable: true +- x-omitempty: true +- MemorySwappiness: +- description: | +- Tune the service's containers' memory swappiness (0 to 100). +- If not specified, defaults to the containers' OS' default, generally 60, +- or whatever value was predefined in the image. +- Set to -1 to unset a previously set value. +- type: "integer" +- format: "int64" +- minimum: -1 +- maximum: 100 +- x-nullable: true +- x-omitempty: true +- RestartPolicy: +- description: | +- Specification for the restart policy which applies to containers +- created as part of this service. +- type: "object" +- properties: +- Condition: +- description: "Condition for restart." +- type: "string" +- enum: +- - "none" +- - "on-failure" +- - "any" +- Delay: +- description: "Delay between restart attempts." +- type: "integer" +- format: "int64" +- MaxAttempts: +- description: | +- Maximum attempts to restart a given container before giving up +- (default value is 0, which is ignored). +- type: "integer" +- format: "int64" +- default: 0 +- Window: +- description: | +- Windows is the time window used to evaluate the restart policy +- (default value is 0, which is unbounded). +- type: "integer" +- format: "int64" +- default: 0 +- Placement: +- type: "object" +- properties: +- Constraints: +- description: | +- An array of constraint expressions to limit the set of nodes where +- a task can be scheduled. Constraint expressions can either use a +- _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find +- nodes that satisfy every expression (AND match). Constraints can +- match node or Docker Engine labels as follows: +- +- node attribute | matches | example +- ---------------------|--------------------------------|----------------------------------------------- +- `node.id` | Node ID | `node.id==2ivku8v2gvtg4` +- `node.hostname` | Node hostname | `node.hostname!=node-2` +- `node.role` | Node role (`manager`/`worker`) | `node.role==manager` +- `node.platform.os` | Node operating system | `node.platform.os==windows` +- `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` +- `node.labels` | User-defined node labels | `node.labels.security==high` +- `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04` +- +- `engine.labels` apply to Docker Engine labels like operating system, +- drivers, etc. Swarm administrators add `node.labels` for operational +- purposes by using the [`node update endpoint`](#operation/NodeUpdate). +- +- type: "array" +- items: +- type: "string" +- example: +- - "node.hostname!=node3.corp.example.com" +- - "node.role!=manager" +- - "node.labels.type==production" +- - "node.platform.os==linux" +- - "node.platform.arch==x86_64" +- Preferences: +- description: | +- Preferences provide a way to make the scheduler aware of factors +- such as topology. They are provided in order from highest to +- lowest precedence. +- type: "array" +- items: +- type: "object" +- properties: +- Spread: +- type: "object" +- properties: +- SpreadDescriptor: +- description: | +- label descriptor, such as `engine.labels.az`. +- type: "string" +- example: +- - Spread: +- SpreadDescriptor: "node.labels.datacenter" +- - Spread: +- SpreadDescriptor: "node.labels.rack" +- MaxReplicas: +- description: | +- Maximum number of replicas for per node (default value is 0, which +- is unlimited) +- type: "integer" +- format: "int64" +- default: 0 +- Platforms: +- description: | +- Platforms stores all the platforms that the service's image can +- run on. This field is used in the platform filter for scheduling. +- If empty, then the platform filter is off, meaning there are no +- scheduling restrictions. +- type: "array" +- items: +- $ref: "#/definitions/Platform" +- ForceUpdate: +- description: | +- A counter that triggers an update even if no relevant parameters have +- been changed. +- type: "integer" +- format: "uint64" +- Runtime: +- description: | +- Runtime is the type of runtime specified for the task executor. +- type: "string" +- Networks: +- description: "Specifies which networks the service should attach to." +- type: "array" +- items: +- $ref: "#/definitions/NetworkAttachmentConfig" +- LogDriver: +- description: | +- Specifies the log driver to use for tasks created from this spec. If +- not present, the default one for the swarm will be used, finally +- falling back to the engine default if not specified. +- type: "object" +- properties: +- Name: +- type: "string" +- Options: +- type: "object" +- additionalProperties: +- type: "string" +- +- TaskState: +- type: "string" +- enum: +- - "new" +- - "allocated" +- - "pending" +- - "assigned" +- - "accepted" +- - "preparing" +- - "ready" +- - "starting" +- - "running" +- - "complete" +- - "shutdown" +- - "failed" +- - "rejected" +- - "remove" +- - "orphaned" +- +- ContainerStatus: +- type: "object" +- description: "represents the status of a container." +- properties: +- ContainerID: +- type: "string" +- PID: +- type: "integer" +- ExitCode: +- type: "integer" +- +- PortStatus: +- type: "object" +- description: "represents the port status of a task's host ports whose service has published host ports" +- properties: +- Ports: +- type: "array" +- items: +- $ref: "#/definitions/EndpointPortConfig" +- +- TaskStatus: +- type: "object" +- description: "represents the status of a task." +- properties: +- Timestamp: +- type: "string" +- format: "dateTime" +- State: +- $ref: "#/definitions/TaskState" +- Message: +- type: "string" +- Err: +- type: "string" +- ContainerStatus: +- $ref: "#/definitions/ContainerStatus" +- PortStatus: +- $ref: "#/definitions/PortStatus" +- +- NetworkAttachment: +- description: | +- Specifies how a task is attached to a network, and the addresses the +- task was assigned on that network. +- type: "object" +- properties: +- Network: +- $ref: "#/definitions/Network" +- Addresses: +- description: | +- The IP addresses (in CIDR notation) assigned to the task on this +- network. To maintain backward compatibility this field accepts CIDR +- notation, but only the IP address is used. +- type: "array" +- items: +- type: "string" +- format: "cidr" +- example: +- Network: +- ID: "4qvuz4ko70xaltuqbt8956gd1" +- Addresses: +- - "10.255.0.10/16" +- +- Task: +- type: "object" +- properties: +- ID: +- description: "The ID of the task." +- type: "string" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- type: "string" +- format: "dateTime" +- UpdatedAt: +- type: "string" +- format: "dateTime" +- Name: +- description: "Name of the task." +- type: "string" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- Spec: +- $ref: "#/definitions/TaskSpec" +- ServiceID: +- description: "The ID of the service this task is part of." +- type: "string" +- Slot: +- type: "integer" +- NodeID: +- description: "The ID of the node that this task is on." +- type: "string" +- AssignedGenericResources: +- $ref: "#/definitions/GenericResources" +- Status: +- $ref: "#/definitions/TaskStatus" +- DesiredState: +- $ref: "#/definitions/TaskState" +- JobIteration: +- description: | +- If the Service this Task belongs to is a job-mode service, contains +- the JobIteration of the Service this Task was created for. Absent if +- the Task was created for a Replicated or Global Service. +- $ref: "#/definitions/ObjectVersion" +- NetworksAttachments: +- description: | +- The networks that this task is attached to, and the addresses the +- task was assigned on each of them. +- type: "array" +- items: +- $ref: "#/definitions/NetworkAttachment" +- example: +- ID: "0kzzo1i0y4jz6027t0k7aezc7" +- Version: +- Index: 71 +- CreatedAt: "2016-06-07T21:07:31.171892745Z" +- UpdatedAt: "2016-06-07T21:07:31.376370513Z" +- Spec: +- ContainerSpec: +- Image: "redis" +- Resources: +- Limits: {} +- Reservations: {} +- RestartPolicy: +- Condition: "any" +- MaxAttempts: 0 +- Placement: {} +- ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" +- Slot: 1 +- NodeID: "60gvrl6tm78dmak4yl7srz94v" +- Status: +- Timestamp: "2016-06-07T21:07:31.290032978Z" +- State: "running" +- Message: "started" +- ContainerStatus: +- ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035" +- PID: 677 +- DesiredState: "running" +- NetworksAttachments: +- - Network: +- ID: "4qvuz4ko70xaltuqbt8956gd1" +- Version: +- Index: 18 +- CreatedAt: "2016-06-07T20:31:11.912919752Z" +- UpdatedAt: "2016-06-07T21:07:29.955277358Z" +- Spec: +- Name: "ingress" +- Labels: +- com.docker.swarm.internal: "true" +- DriverConfiguration: {} +- IPAMOptions: +- Driver: {} +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- DriverState: +- Name: "overlay" +- Options: +- com.docker.network.driver.overlay.vxlanid_list: "256" +- IPAMOptions: +- Driver: +- Name: "default" +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- Addresses: +- - "10.255.0.10/16" +- AssignedGenericResources: +- - DiscreteResourceSpec: +- Kind: "SSD" +- Value: 3 +- - NamedResourceSpec: +- Kind: "GPU" +- Value: "UUID1" +- - NamedResourceSpec: +- Kind: "GPU" +- Value: "UUID2" +- +- ServiceSpec: +- description: "User modifiable configuration for a service." +- type: object +- properties: +- Name: +- description: "Name of the service." +- type: "string" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- TaskTemplate: +- $ref: "#/definitions/TaskSpec" +- Mode: +- description: "Scheduling mode for the service." +- type: "object" +- properties: +- Replicated: +- type: "object" +- properties: +- Replicas: +- type: "integer" +- format: "int64" +- Global: +- type: "object" +- ReplicatedJob: +- description: | +- The mode used for services with a finite number of tasks that run +- to a completed state. +- type: "object" +- properties: +- MaxConcurrent: +- description: | +- The maximum number of replicas to run simultaneously. +- type: "integer" +- format: "int64" +- default: 1 +- TotalCompletions: +- description: | +- The total number of replicas desired to reach the Completed +- state. If unset, will default to the value of `MaxConcurrent` +- type: "integer" +- format: "int64" +- GlobalJob: +- description: | +- The mode used for services which run a task to the completed state +- on each valid node. +- type: "object" +- UpdateConfig: +- description: "Specification for the update strategy of the service." +- type: "object" +- properties: +- Parallelism: +- description: | +- Maximum number of tasks to be updated in one iteration (0 means +- unlimited parallelism). +- type: "integer" +- format: "int64" +- Delay: +- description: "Amount of time between updates, in nanoseconds." +- type: "integer" +- format: "int64" +- FailureAction: +- description: | +- Action to take if an updated task fails to run, or stops running +- during the update. +- type: "string" +- enum: +- - "continue" +- - "pause" +- - "rollback" +- Monitor: +- description: | +- Amount of time to monitor each updated task for failures, in +- nanoseconds. +- type: "integer" +- format: "int64" +- MaxFailureRatio: +- description: | +- The fraction of tasks that may fail during an update before the +- failure action is invoked, specified as a floating point number +- between 0 and 1. +- type: "number" +- default: 0 +- Order: +- description: | +- The order of operations when rolling out an updated task. Either +- the old task is shut down before the new task is started, or the +- new task is started before the old task is shut down. +- type: "string" +- enum: +- - "stop-first" +- - "start-first" +- RollbackConfig: +- description: "Specification for the rollback strategy of the service." +- type: "object" +- properties: +- Parallelism: +- description: | +- Maximum number of tasks to be rolled back in one iteration (0 means +- unlimited parallelism). +- type: "integer" +- format: "int64" +- Delay: +- description: | +- Amount of time between rollback iterations, in nanoseconds. +- type: "integer" +- format: "int64" +- FailureAction: +- description: | +- Action to take if an rolled back task fails to run, or stops +- running during the rollback. +- type: "string" +- enum: +- - "continue" +- - "pause" +- Monitor: +- description: | +- Amount of time to monitor each rolled back task for failures, in +- nanoseconds. +- type: "integer" +- format: "int64" +- MaxFailureRatio: +- description: | +- The fraction of tasks that may fail during a rollback before the +- failure action is invoked, specified as a floating point number +- between 0 and 1. +- type: "number" +- default: 0 +- Order: +- description: | +- The order of operations when rolling back a task. Either the old +- task is shut down before the new task is started, or the new task +- is started before the old task is shut down. +- type: "string" +- enum: +- - "stop-first" +- - "start-first" +- Networks: +- description: | +- Specifies which networks the service should attach to. +- +- Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. +- type: "array" +- items: +- $ref: "#/definitions/NetworkAttachmentConfig" +- +- EndpointSpec: +- $ref: "#/definitions/EndpointSpec" +- +- EndpointPortConfig: +- type: "object" +- properties: +- Name: +- type: "string" +- Protocol: +- type: "string" +- enum: +- - "tcp" +- - "udp" +- - "sctp" +- TargetPort: +- description: "The port inside the container." +- type: "integer" +- PublishedPort: +- description: "The port on the swarm hosts." +- type: "integer" +- PublishMode: +- description: | +- The mode in which port is published. +- +-


+- +- - "ingress" makes the target port accessible on every node, +- regardless of whether there is a task for the service running on +- that node or not. +- - "host" bypasses the routing mesh and publish the port directly on +- the swarm node where that service is running. +- +- type: "string" +- enum: +- - "ingress" +- - "host" +- default: "ingress" +- example: "ingress" +- +- EndpointSpec: +- description: "Properties that can be configured to access and load balance a service." +- type: "object" +- properties: +- Mode: +- description: | +- The mode of resolution to use for internal load balancing between tasks. +- type: "string" +- enum: +- - "vip" +- - "dnsrr" +- default: "vip" +- Ports: +- description: | +- List of exposed ports that this service is accessible on from the +- outside. Ports can only be provided if `vip` resolution mode is used. +- type: "array" +- items: +- $ref: "#/definitions/EndpointPortConfig" +- +- Service: +- type: "object" +- properties: +- ID: +- type: "string" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- type: "string" +- format: "dateTime" +- UpdatedAt: +- type: "string" +- format: "dateTime" +- Spec: +- $ref: "#/definitions/ServiceSpec" +- Endpoint: +- type: "object" +- properties: +- Spec: +- $ref: "#/definitions/EndpointSpec" +- Ports: +- type: "array" +- items: +- $ref: "#/definitions/EndpointPortConfig" +- VirtualIPs: +- type: "array" +- items: +- type: "object" +- properties: +- NetworkID: +- type: "string" +- Addr: +- type: "string" +- UpdateStatus: +- description: "The status of a service update." +- type: "object" +- properties: +- State: +- type: "string" +- enum: +- - "updating" +- - "paused" +- - "completed" +- StartedAt: +- type: "string" +- format: "dateTime" +- CompletedAt: +- type: "string" +- format: "dateTime" +- Message: +- type: "string" +- ServiceStatus: +- description: | +- The status of the service's tasks. Provided only when requested as +- part of a ServiceList operation. +- type: "object" +- properties: +- RunningTasks: +- description: | +- The number of tasks for the service currently in the Running state. +- type: "integer" +- format: "uint64" +- example: 7 +- DesiredTasks: +- description: | +- The number of tasks for the service desired to be running. +- For replicated services, this is the replica count from the +- service spec. For global services, this is computed by taking +- count of all tasks for the service with a Desired State other +- than Shutdown. +- type: "integer" +- format: "uint64" +- example: 10 +- CompletedTasks: +- description: | +- The number of tasks for a job that are in the Completed state. +- This field must be cross-referenced with the service type, as the +- value of 0 may mean the service is not in a job mode, or it may +- mean the job-mode service has no tasks yet Completed. +- type: "integer" +- format: "uint64" +- JobStatus: +- description: | +- The status of the service when it is in one of ReplicatedJob or +- GlobalJob modes. Absent on Replicated and Global mode services. The +- JobIteration is an ObjectVersion, but unlike the Service's version, +- does not need to be sent with an update request. +- type: "object" +- properties: +- JobIteration: +- description: | +- JobIteration is a value increased each time a Job is executed, +- successfully or otherwise. "Executed", in this case, means the +- job as a whole has been started, not that an individual Task has +- been launched. A job is "Executed" when its ServiceSpec is +- updated. JobIteration can be used to disambiguate Tasks belonging +- to different executions of a job. Though JobIteration will +- increase with each subsequent execution, it may not necessarily +- increase by 1, and so JobIteration should not be used to +- $ref: "#/definitions/ObjectVersion" +- LastExecution: +- description: | +- The last time, as observed by the server, that this job was +- started. +- type: "string" +- format: "dateTime" +- example: +- ID: "9mnpnzenvg8p8tdbtq4wvbkcz" +- Version: +- Index: 19 +- CreatedAt: "2016-06-07T21:05:51.880065305Z" +- UpdatedAt: "2016-06-07T21:07:29.962229872Z" +- Spec: +- Name: "hopeful_cori" +- TaskTemplate: +- ContainerSpec: +- Image: "redis" +- Resources: +- Limits: {} +- Reservations: {} +- RestartPolicy: +- Condition: "any" +- MaxAttempts: 0 +- Placement: {} +- ForceUpdate: 0 +- Mode: +- Replicated: +- Replicas: 1 +- UpdateConfig: +- Parallelism: 1 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- RollbackConfig: +- Parallelism: 1 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- EndpointSpec: +- Mode: "vip" +- Ports: +- - +- Protocol: "tcp" +- TargetPort: 6379 +- PublishedPort: 30001 +- Endpoint: +- Spec: +- Mode: "vip" +- Ports: +- - +- Protocol: "tcp" +- TargetPort: 6379 +- PublishedPort: 30001 +- Ports: +- - +- Protocol: "tcp" +- TargetPort: 6379 +- PublishedPort: 30001 +- VirtualIPs: +- - +- NetworkID: "4qvuz4ko70xaltuqbt8956gd1" +- Addr: "10.255.0.2/16" +- - +- NetworkID: "4qvuz4ko70xaltuqbt8956gd1" +- Addr: "10.255.0.3/16" +- +- ImageDeleteResponseItem: +- type: "object" +- x-go-name: "DeleteResponse" +- properties: +- Untagged: +- description: "The image ID of an image that was untagged" +- type: "string" +- Deleted: +- description: "The image ID of an image that was deleted" +- type: "string" +- +- ServiceCreateResponse: +- type: "object" +- description: | +- contains the information returned to a client on the +- creation of a new service. +- properties: +- ID: +- description: "The ID of the created service." +- type: "string" +- x-nullable: false +- example: "ak7w3gjqoa3kuz8xcpnyy0pvl" +- Warnings: +- description: | +- Optional warning message. +- +- FIXME(thaJeztah): this should have "omitempty" in the generated type. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: +- - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" +- +- ServiceUpdateResponse: +- type: "object" +- properties: +- Warnings: +- description: "Optional warning messages" +- type: "array" +- items: +- type: "string" +- example: +- Warnings: +- - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" +- +- ContainerInspectResponse: +- type: "object" +- title: "ContainerInspectResponse" +- x-go-name: "InspectResponse" +- properties: +- Id: +- description: |- +- The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). +- type: "string" +- x-go-name: "ID" +- minLength: 64 +- maxLength: 64 +- pattern: "^[0-9a-fA-F]{64}$" +- example: "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" +- Created: +- description: |- +- Date and time at which the container was created, formatted in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- x-nullable: true +- example: "2025-02-17T17:43:39.64001363Z" +- Path: +- description: |- +- The path to the command being run +- type: "string" +- example: "/bin/sh" +- Args: +- description: "The arguments to the command being run" +- type: "array" +- items: +- type: "string" +- example: +- - "-c" +- - "exit 9" +- State: +- $ref: "#/definitions/ContainerState" +- Image: +- description: |- +- The ID (digest) of the image that this container was created from. +- type: "string" +- example: "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" +- ResolvConfPath: +- description: |- +- Location of the `/etc/resolv.conf` generated for the container on the +- host. +- +- This file is managed through the docker daemon, and should not be +- accessed or modified by other tools. +- type: "string" +- example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf" +- HostnamePath: +- description: |- +- Location of the `/etc/hostname` generated for the container on the +- host. +- +- This file is managed through the docker daemon, and should not be +- accessed or modified by other tools. +- type: "string" +- example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname" +- HostsPath: +- description: |- +- Location of the `/etc/hosts` generated for the container on the +- host. +- +- This file is managed through the docker daemon, and should not be +- accessed or modified by other tools. +- type: "string" +- example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts" +- LogPath: +- description: |- +- Location of the file used to buffer the container's logs. Depending on +- the logging-driver used for the container, this field may be omitted. +- +- This file is managed through the docker daemon, and should not be +- accessed or modified by other tools. +- type: "string" +- x-nullable: true +- example: "/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log" +- Name: +- description: |- +- The name associated with this container. +- +- For historic reasons, the name may be prefixed with a forward-slash (`/`). +- type: "string" +- example: "/funny_chatelet" +- RestartCount: +- description: |- +- Number of times the container was restarted since it was created, +- or since daemon was started. +- type: "integer" +- example: 0 +- Driver: +- description: |- +- The storage-driver used for the container's filesystem (graph-driver +- or snapshotter). +- type: "string" +- example: "overlayfs" +- Platform: +- description: |- +- The platform (operating system) for which the container was created. +- +- This field was introduced for the experimental "LCOW" (Linux Containers +- On Windows) features, which has been removed. In most cases, this field +- is equal to the host's operating system (`linux` or `windows`). +- type: "string" +- example: "linux" +- ImageManifestDescriptor: +- $ref: "#/definitions/OCIDescriptor" +- description: |- +- OCI descriptor of the platform-specific manifest of the image +- the container was created from. +- +- Note: Only available if the daemon provides a multi-platform +- image store. +- MountLabel: +- description: |- +- SELinux mount label set for the container. +- type: "string" +- example: "" +- ProcessLabel: +- description: |- +- SELinux process label set for the container. +- type: "string" +- example: "" +- AppArmorProfile: +- description: |- +- The AppArmor profile set for the container. +- type: "string" +- example: "" +- ExecIDs: +- description: |- +- IDs of exec instances that are running in the container. +- type: "array" +- items: +- type: "string" +- x-nullable: true +- example: +- - "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca" +- - "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" +- HostConfig: +- $ref: "#/definitions/HostConfig" +- GraphDriver: +- $ref: "#/definitions/DriverData" +- x-nullable: true +- Storage: +- $ref: "#/definitions/Storage" +- x-nullable: true +- SizeRw: +- description: |- +- The size of files that have been created or changed by this container. +- +- This field is omitted by default, and only set when size is requested +- in the API request. +- type: "integer" +- format: "int64" +- x-nullable: true +- example: "122880" +- SizeRootFs: +- description: |- +- The total size of all files in the read-only layers from the image +- that the container uses. These layers can be shared between containers. +- +- This field is omitted by default, and only set when size is requested +- in the API request. +- type: "integer" +- format: "int64" +- x-nullable: true +- example: "1653948416" +- Mounts: +- description: |- +- List of mounts used by the container. +- type: "array" +- items: +- $ref: "#/definitions/MountPoint" +- Config: +- $ref: "#/definitions/ContainerConfig" +- NetworkSettings: +- $ref: "#/definitions/NetworkSettings" +- +- ContainerSummary: +- type: "object" +- properties: +- Id: +- description: |- +- The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). +- type: "string" +- x-go-name: "ID" +- minLength: 64 +- maxLength: 64 +- pattern: "^[0-9a-fA-F]{64}$" +- example: "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" +- Names: +- description: |- +- The names associated with this container. Most containers have a single +- name, but when using legacy "links", the container can have multiple +- names. +- +- For historic reasons, names are prefixed with a forward-slash (`/`). +- type: "array" +- items: +- type: "string" +- example: +- - "/funny_chatelet" +- Image: +- description: |- +- The name or ID of the image used to create the container. +- +- This field shows the image reference as was specified when creating the container, +- which can be in its canonical form (e.g., `docker.io/library/ubuntu:latest` +- or `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`), +- short form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`). +- +- The content of this field can be updated at runtime if the image used to +- create the container is untagged, in which case the field is updated to +- contain the the image ID (digest) it was resolved to in its canonical, +- non-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`). +- type: "string" +- example: "docker.io/library/ubuntu:latest" +- ImageID: +- description: |- +- The ID (digest) of the image that this container was created from. +- type: "string" +- example: "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" +- ImageManifestDescriptor: +- $ref: "#/definitions/OCIDescriptor" +- x-nullable: true +- description: | +- OCI descriptor of the platform-specific manifest of the image +- the container was created from. +- +- Note: Only available if the daemon provides a multi-platform +- image store. +- +- This field is not populated in the `GET /system/df` endpoint. +- Command: +- description: "Command to run when starting the container" +- type: "string" +- example: "/bin/bash" +- Created: +- description: |- +- Date and time at which the container was created as a Unix timestamp +- (number of seconds since EPOCH). +- type: "integer" +- format: "int64" +- example: "1739811096" +- Ports: +- description: |- +- Port-mappings for the container. +- type: "array" +- items: +- $ref: "#/definitions/PortSummary" +- SizeRw: +- description: |- +- The size of files that have been created or changed by this container. +- +- This field is omitted by default, and only set when size is requested +- in the API request. +- type: "integer" +- format: "int64" +- x-nullable: true +- example: "122880" +- SizeRootFs: +- description: |- +- The total size of all files in the read-only layers from the image +- that the container uses. These layers can be shared between containers. +- +- This field is omitted by default, and only set when size is requested +- in the API request. +- type: "integer" +- format: "int64" +- x-nullable: true +- example: "1653948416" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.vendor: "Acme" +- com.example.license: "GPL" +- com.example.version: "1.0" +- State: +- description: | +- The state of this container. +- type: "string" +- enum: +- - "created" +- - "running" +- - "paused" +- - "restarting" +- - "exited" +- - "removing" +- - "dead" +- example: "running" +- Status: +- description: |- +- Additional human-readable status of this container (e.g. `Exit 0`) +- type: "string" +- example: "Up 4 days" +- HostConfig: +- type: "object" +- description: |- +- Summary of host-specific runtime information of the container. This +- is a reduced set of information in the container's "HostConfig" as +- available in the container "inspect" response. +- properties: +- NetworkMode: +- description: |- +- Networking mode (`host`, `none`, `container:`) or name of the +- primary network the container is using. +- +- This field is primarily for backward compatibility. The container +- can be connected to multiple networks for which information can be +- found in the `NetworkSettings.Networks` field, which enumerates +- settings per network. +- type: "string" +- example: "mynetwork" +- Annotations: +- description: |- +- Arbitrary key-value metadata attached to the container. +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "string" +- example: +- io.kubernetes.docker.type: "container" +- io.kubernetes.sandbox.id: "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" +- NetworkSettings: +- description: |- +- Summary of the container's network settings +- type: "object" +- properties: +- Networks: +- type: "object" +- description: |- +- Summary of network-settings for each network the container is +- attached to. +- additionalProperties: +- $ref: "#/definitions/EndpointSettings" +- Mounts: +- type: "array" +- description: |- +- List of mounts used by the container. +- items: +- $ref: "#/definitions/MountPoint" +- Health: +- type: "object" +- description: |- +- Summary of health status +- +- Added in v1.52, before that version all container summary not include Health. +- After this attribute introduced, it includes containers with no health checks configured, +- or containers that are not running with none +- properties: +- Status: +- type: "string" +- description: |- +- the health status of the container +- enum: +- - "none" +- - "starting" +- - "healthy" +- - "unhealthy" +- example: "healthy" +- FailingStreak: +- description: "FailingStreak is the number of consecutive failures" +- type: "integer" +- example: 0 +- +- ContainersDiskUsage: +- type: "object" +- x-go-name: "DiskUsage" +- x-go-package: "github.com/moby/moby/api/types/container" +- description: | +- represents system data usage information for container resources. +- properties: +- ActiveCount: +- description: | +- Count of active containers. +- type: "integer" +- format: "int64" +- example: 1 +- TotalCount: +- description: | +- Count of all containers. +- type: "integer" +- format: "int64" +- example: 4 +- Reclaimable: +- description: | +- Disk space that can be reclaimed by removing inactive containers. +- type: "integer" +- format: "int64" +- example: 12345678 +- TotalSize: +- description: | +- Disk space in use by containers. +- type: "integer" +- format: "int64" +- example: 98765432 +- Items: +- description: | +- List of container summaries. +- type: "array" +- x-omitempty: true +- items: +- x-go-type: +- type: Summary +- +- Driver: +- description: "Driver represents a driver (network, logging, secrets)." +- type: "object" +- required: [Name] +- properties: +- Name: +- description: "Name of the driver." +- type: "string" +- x-nullable: false +- example: "some-driver" +- Options: +- description: "Key/value map of driver-specific options." +- type: "object" +- x-nullable: false +- additionalProperties: +- type: "string" +- example: +- OptionA: "value for driver-specific option A" +- OptionB: "value for driver-specific option B" +- +- SecretSpec: +- type: "object" +- properties: +- Name: +- description: "User-defined name of the secret." +- type: "string" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- Data: +- description: | +- Data is the data to store as a secret, formatted as a standard base64-encoded +- ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. +- It must be empty if the Driver field is set, in which case the data is +- loaded from an external secret store. The maximum allowed size is 500KB, +- as defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize). +- +- This field is only used to _create_ a secret, and is not returned by +- other endpoints. +- type: "string" +- example: "" +- Driver: +- description: | +- Name of the secrets driver used to fetch the secret's value from an +- external secret store. +- $ref: "#/definitions/Driver" +- Templating: +- description: | +- Templating driver, if applicable +- +- Templating controls whether and how to evaluate the config payload as +- a template. If no driver is set, no templating is used. +- $ref: "#/definitions/Driver" +- +- Secret: +- type: "object" +- properties: +- ID: +- type: "string" +- example: "blt1owaxmitz71s9v5zh81zun" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- type: "string" +- format: "dateTime" +- example: "2017-07-20T13:55:28.678958722Z" +- UpdatedAt: +- type: "string" +- format: "dateTime" +- example: "2017-07-20T13:55:28.678958722Z" +- Spec: +- $ref: "#/definitions/SecretSpec" +- +- ConfigSpec: +- type: "object" +- properties: +- Name: +- description: "User-defined name of the config." +- type: "string" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- Data: +- description: | +- Data is the data to store as a config, formatted as a standard base64-encoded +- ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. +- The maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize). +- type: "string" +- Templating: +- description: | +- Templating driver, if applicable +- +- Templating controls whether and how to evaluate the config payload as +- a template. If no driver is set, no templating is used. +- $ref: "#/definitions/Driver" +- +- Config: +- type: "object" +- properties: +- ID: +- type: "string" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- type: "string" +- format: "dateTime" +- UpdatedAt: +- type: "string" +- format: "dateTime" +- Spec: +- $ref: "#/definitions/ConfigSpec" +- +- ContainerState: +- description: | +- ContainerState stores container's running state. It's part of ContainerJSONBase +- and will be returned by the "inspect" command. +- type: "object" +- x-nullable: true +- properties: +- Status: +- description: | +- String representation of the container state. Can be one of "created", +- "running", "paused", "restarting", "removing", "exited", or "dead". +- type: "string" +- enum: ["created", "running", "paused", "restarting", "removing", "exited", "dead"] +- example: "running" +- Running: +- description: | +- Whether this container is running. +- +- Note that a running container can be _paused_. The `Running` and `Paused` +- booleans are not mutually exclusive: +- +- When pausing a container (on Linux), the freezer cgroup is used to suspend +- all processes in the container. Freezing the process requires the process to +- be running. As a result, paused containers are both `Running` _and_ `Paused`. +- +- Use the `Status` field instead to determine if a container's state is "running". +- type: "boolean" +- example: true +- Paused: +- description: "Whether this container is paused." +- type: "boolean" +- example: false +- Restarting: +- description: "Whether this container is restarting." +- type: "boolean" +- example: false +- OOMKilled: +- description: | +- Whether a process within this container has been killed because it ran +- out of memory since the container was last started. +- type: "boolean" +- example: false +- Dead: +- type: "boolean" +- example: false +- Pid: +- description: "The process ID of this container" +- type: "integer" +- example: 1234 +- ExitCode: +- description: "The last exit code of this container" +- type: "integer" +- example: 0 +- Error: +- type: "string" +- StartedAt: +- description: "The time when this container was last started." +- type: "string" +- example: "2020-01-06T09:06:59.461876391Z" +- FinishedAt: +- description: "The time when this container last exited." +- type: "string" +- example: "2020-01-06T09:07:59.461876391Z" +- Health: +- $ref: "#/definitions/Health" +- +- ContainerCreateResponse: +- description: "OK response to ContainerCreate operation" +- type: "object" +- title: "ContainerCreateResponse" +- x-go-name: "CreateResponse" +- required: [Id, Warnings] +- properties: +- Id: +- description: "The ID of the created container" +- type: "string" +- x-nullable: false +- example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" +- Warnings: +- description: "Warnings encountered when creating the container" +- type: "array" +- x-nullable: false +- items: +- type: "string" +- example: [] +- +- ContainerUpdateResponse: +- type: "object" +- title: "ContainerUpdateResponse" +- x-go-name: "UpdateResponse" +- description: |- +- Response for a successful container-update. +- properties: +- Warnings: +- type: "array" +- description: |- +- Warnings encountered when updating the container. +- items: +- type: "string" +- example: ["Published ports are discarded when using host network mode"] +- +- ContainerStatsResponse: +- description: | +- Statistics sample for a container. +- type: "object" +- x-go-name: "StatsResponse" +- title: "ContainerStatsResponse" +- properties: +- id: +- description: | +- ID of the container for which the stats were collected. +- type: "string" +- x-nullable: true +- example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" +- name: +- description: | +- Name of the container for which the stats were collected. +- type: "string" +- x-nullable: true +- example: "boring_wozniak" +- os_type: +- description: | +- OSType is the OS of the container ("linux" or "windows") to allow +- platform-specific handling of stats. +- type: "string" +- x-nullable: true +- example: "linux" +- read: +- description: | +- Date and time at which this sample was collected. +- The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) +- with nano-seconds. +- type: "string" +- format: "date-time" +- example: "2025-01-16T13:55:22.165243637Z" +- cpu_stats: +- $ref: "#/definitions/ContainerCPUStats" +- memory_stats: +- $ref: "#/definitions/ContainerMemoryStats" +- networks: +- description: | +- Network statistics for the container per interface. +- +- This field is omitted if the container has no networking enabled. +- x-nullable: true +- additionalProperties: +- $ref: "#/definitions/ContainerNetworkStats" +- example: +- eth0: +- rx_bytes: 5338 +- rx_dropped: 0 +- rx_errors: 0 +- rx_packets: 36 +- tx_bytes: 648 +- tx_dropped: 0 +- tx_errors: 0 +- tx_packets: 8 +- eth5: +- rx_bytes: 4641 +- rx_dropped: 0 +- rx_errors: 0 +- rx_packets: 26 +- tx_bytes: 690 +- tx_dropped: 0 +- tx_errors: 0 +- tx_packets: 9 +- pids_stats: +- $ref: "#/definitions/ContainerPidsStats" +- blkio_stats: +- $ref: "#/definitions/ContainerBlkioStats" +- num_procs: +- description: | +- The number of processors on the system. +- +- This field is Windows-specific and always zero for Linux containers. +- type: "integer" +- format: "uint32" +- example: 16 +- storage_stats: +- $ref: "#/definitions/ContainerStorageStats" +- preread: +- description: | +- Date and time at which this first sample was collected. This field +- is not propagated if the "one-shot" option is set. If the "one-shot" +- option is set, this field may be omitted, empty, or set to a default +- date (`0001-01-01T00:00:00Z`). +- +- The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) +- with nano-seconds. +- type: "string" +- format: "date-time" +- example: "2025-01-16T13:55:21.160452595Z" +- precpu_stats: +- $ref: "#/definitions/ContainerCPUStats" +- +- ContainerBlkioStats: +- description: | +- BlkioStats stores all IO service stats for data read and write. +- +- This type is Linux-specific and holds many fields that are specific to cgroups v1. +- On a cgroup v2 host, all fields other than `io_service_bytes_recursive` +- are omitted or `null`. +- +- This type is only populated on Linux and omitted for Windows containers. +- type: "object" +- x-go-name: "BlkioStats" +- x-nullable: true +- properties: +- io_service_bytes_recursive: +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_serviced_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_queue_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_service_time_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_wait_time_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_merged_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_time_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- sectors_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- example: +- io_service_bytes_recursive: [ +- {"major": 254, "minor": 0, "op": "read", "value": 7593984}, +- {"major": 254, "minor": 0, "op": "write", "value": 100} +- ] +- io_serviced_recursive: null +- io_queue_recursive: null +- io_service_time_recursive: null +- io_wait_time_recursive: null +- io_merged_recursive: null +- io_time_recursive: null +- sectors_recursive: null +- +- ContainerBlkioStatEntry: +- description: | +- Blkio stats entry. +- +- This type is Linux-specific and omitted for Windows containers. +- type: "object" +- x-go-name: "BlkioStatEntry" +- x-nullable: true +- properties: +- major: +- type: "integer" +- format: "uint64" +- example: 254 +- minor: +- type: "integer" +- format: "uint64" +- example: 0 +- op: +- type: "string" +- example: "read" +- value: +- type: "integer" +- format: "uint64" +- example: 7593984 +- +- ContainerCPUStats: +- description: | +- CPU related info of the container +- type: "object" +- x-go-name: "CPUStats" +- x-nullable: true +- properties: +- cpu_usage: +- $ref: "#/definitions/ContainerCPUUsage" +- system_cpu_usage: +- description: | +- System Usage. +- +- This field is Linux-specific and omitted for Windows containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 5 +- online_cpus: +- description: | +- Number of online CPUs. +- +- This field is Linux-specific and omitted for Windows containers. +- type: "integer" +- format: "uint32" +- x-nullable: true +- example: 5 +- throttling_data: +- $ref: "#/definitions/ContainerThrottlingData" +- +- ContainerCPUUsage: +- description: | +- All CPU stats aggregated since container inception. +- type: "object" +- x-go-name: "CPUUsage" +- x-nullable: true +- properties: +- total_usage: +- description: | +- Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows). +- type: "integer" +- format: "uint64" +- example: 29912000 +- percpu_usage: +- description: | +- Total CPU time (in nanoseconds) consumed per core (Linux). +- +- This field is Linux-specific when using cgroups v1. It is omitted +- when using cgroups v2 and Windows containers. +- type: "array" +- x-nullable: true +- items: +- type: "integer" +- format: "uint64" +- example: 29912000 +- +- usage_in_kernelmode: +- description: | +- Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux), +- or time spent (in 100's of nanoseconds) by all container processes in +- kernel mode (Windows). +- +- Not populated for Windows containers using Hyper-V isolation. +- type: "integer" +- format: "uint64" +- example: 21994000 +- usage_in_usermode: +- description: | +- Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux), +- or time spent (in 100's of nanoseconds) by all container processes in +- kernel mode (Windows). +- +- Not populated for Windows containers using Hyper-V isolation. +- type: "integer" +- format: "uint64" +- example: 7918000 +- +- ContainerPidsStats: +- description: | +- PidsStats contains Linux-specific stats of a container's process-IDs (PIDs). +- +- This type is Linux-specific and omitted for Windows containers. +- type: "object" +- x-go-name: "PidsStats" +- x-nullable: true +- properties: +- current: +- description: | +- Current is the number of PIDs in the cgroup. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 5 +- limit: +- description: | +- Limit is the hard limit on the number of pids in the cgroup. +- A "Limit" of 0 means that there is no limit. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: "18446744073709551615" +- +- ContainerThrottlingData: +- description: | +- CPU throttling stats of the container. +- +- This type is Linux-specific and omitted for Windows containers. +- type: "object" +- x-go-name: "ThrottlingData" +- x-nullable: true +- properties: +- periods: +- description: | +- Number of periods with throttling active. +- type: "integer" +- format: "uint64" +- example: 0 +- throttled_periods: +- description: | +- Number of periods when the container hit its throttling limit. +- type: "integer" +- format: "uint64" +- example: 0 +- throttled_time: +- description: | +- Aggregated time (in nanoseconds) the container was throttled for. +- type: "integer" +- format: "uint64" +- example: 0 +- +- ContainerMemoryStats: +- description: | +- Aggregates all memory stats since container inception on Linux. +- Windows returns stats for commit and private working set only. +- type: "object" +- x-go-name: "MemoryStats" +- properties: +- usage: +- description: | +- Current `res_counter` usage for memory. +- +- This field is Linux-specific and omitted for Windows containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- max_usage: +- description: | +- Maximum usage ever recorded. +- +- This field is Linux-specific and only supported on cgroups v1. +- It is omitted when using cgroups v2 and for Windows containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- stats: +- description: | +- All the stats exported via memory.stat. +- +- The fields in this object differ between cgroups v1 and v2. +- On cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available. +- On cgroups v2, fields such as `file`, `anon`, `inactive_file` are available. +- +- This field is Linux-specific and omitted for Windows containers. +- type: "object" +- additionalProperties: +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: +- { +- "active_anon": 1572864, +- "active_file": 5115904, +- "anon": 1572864, +- "anon_thp": 0, +- "file": 7626752, +- "file_dirty": 0, +- "file_mapped": 2723840, +- "file_writeback": 0, +- "inactive_anon": 0, +- "inactive_file": 2510848, +- "kernel_stack": 16384, +- "pgactivate": 0, +- "pgdeactivate": 0, +- "pgfault": 2042, +- "pglazyfree": 0, +- "pglazyfreed": 0, +- "pgmajfault": 45, +- "pgrefill": 0, +- "pgscan": 0, +- "pgsteal": 0, +- "shmem": 0, +- "slab": 1180928, +- "slab_reclaimable": 725576, +- "slab_unreclaimable": 455352, +- "sock": 0, +- "thp_collapse_alloc": 0, +- "thp_fault_alloc": 1, +- "unevictable": 0, +- "workingset_activate": 0, +- "workingset_nodereclaim": 0, +- "workingset_refault": 0 +- } +- failcnt: +- description: | +- Number of times memory usage hits limits. +- +- This field is Linux-specific and only supported on cgroups v1. +- It is omitted when using cgroups v2 and for Windows containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- limit: +- description: | +- This field is Linux-specific and omitted for Windows containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 8217579520 +- commitbytes: +- description: | +- Committed bytes. +- +- This field is Windows-specific and omitted for Linux containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- commitpeakbytes: +- description: | +- Peak committed bytes. +- +- This field is Windows-specific and omitted for Linux containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- privateworkingset: +- description: | +- Private working set. +- +- This field is Windows-specific and omitted for Linux containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- +- ContainerNetworkStats: +- description: | +- Aggregates the network stats of one container +- type: "object" +- x-go-name: "NetworkStats" +- x-nullable: true +- properties: +- rx_bytes: +- description: | +- Bytes received. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 5338 +- rx_packets: +- description: | +- Packets received. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 36 +- rx_errors: +- description: | +- Received errors. Not used on Windows. +- +- This field is Linux-specific and always zero for Windows containers. +- type: "integer" +- format: "uint64" +- example: 0 +- rx_dropped: +- description: | +- Incoming packets dropped. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 0 +- tx_bytes: +- description: | +- Bytes sent. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 1200 +- tx_packets: +- description: | +- Packets sent. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 12 +- tx_errors: +- description: | +- Sent errors. Not used on Windows. +- +- This field is Linux-specific and always zero for Windows containers. +- type: "integer" +- format: "uint64" +- example: 0 +- tx_dropped: +- description: | +- Outgoing packets dropped. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 0 +- endpoint_id: +- description: | +- Endpoint ID. Not used on Linux. +- +- This field is Windows-specific and omitted for Linux containers. +- type: "string" +- x-nullable: true +- instance_id: +- description: | +- Instance ID. Not used on Linux. +- +- This field is Windows-specific and omitted for Linux containers. +- type: "string" +- x-nullable: true +- +- ContainerStorageStats: +- description: | +- StorageStats is the disk I/O stats for read/write on Windows. +- +- This type is Windows-specific and omitted for Linux containers. +- type: "object" +- x-go-name: "StorageStats" +- x-nullable: true +- properties: +- read_count_normalized: +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 7593984 +- read_size_bytes: +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 7593984 +- write_count_normalized: +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 7593984 +- write_size_bytes: +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 7593984 +- +- ContainerTopResponse: +- type: "object" +- x-go-name: "TopResponse" +- title: "ContainerTopResponse" +- description: |- +- Container "top" response. +- properties: +- Titles: +- description: "The ps column titles" +- type: "array" +- items: +- type: "string" +- example: +- Titles: +- - "UID" +- - "PID" +- - "PPID" +- - "C" +- - "STIME" +- - "TTY" +- - "TIME" +- - "CMD" +- Processes: +- description: |- +- Each process running in the container, where each process +- is an array of values corresponding to the titles. +- type: "array" +- items: +- type: "array" +- items: +- type: "string" +- example: +- Processes: +- - +- - "root" +- - "13642" +- - "882" +- - "0" +- - "17:03" +- - "pts/0" +- - "00:00:00" +- - "/bin/bash" +- - +- - "root" +- - "13735" +- - "13642" +- - "0" +- - "17:06" +- - "pts/0" +- - "00:00:00" +- - "sleep 10" +- +- ContainerWaitResponse: +- description: "OK response to ContainerWait operation" +- type: "object" +- x-go-name: "WaitResponse" +- title: "ContainerWaitResponse" +- required: [StatusCode] +- properties: +- StatusCode: +- description: "Exit code of the container" +- type: "integer" +- format: "int64" +- x-nullable: false +- Error: +- $ref: "#/definitions/ContainerWaitExitError" +- +- ContainerWaitExitError: +- description: "container waiting error, if any" +- type: "object" +- x-go-name: "WaitExitError" +- properties: +- Message: +- description: "Details of an error" +- type: "string" +- +- SystemVersion: +- type: "object" +- description: | +- Response of Engine API: GET "/version" +- properties: +- Platform: +- type: "object" +- required: [Name] +- properties: +- Name: +- type: "string" +- Components: +- type: "array" +- description: | +- Information about system components +- items: +- type: "object" +- x-go-name: ComponentVersion +- required: [Name, Version] +- properties: +- Name: +- description: | +- Name of the component +- type: "string" +- example: "Engine" +- Version: +- description: | +- Version of the component +- type: "string" +- x-nullable: false +- example: "27.0.1" +- Details: +- description: | +- Key/value pairs of strings with additional information about the +- component. These values are intended for informational purposes +- only, and their content is not defined, and not part of the API +- specification. +- +- These messages can be printed by the client as information to the user. +- type: "object" +- x-nullable: true +- Version: +- description: "The version of the daemon" +- type: "string" +- example: "27.0.1" +- ApiVersion: +- description: | +- The default (and highest) API version that is supported by the daemon +- type: "string" +- example: "1.47" +- MinAPIVersion: +- description: | +- The minimum API version that is supported by the daemon +- type: "string" +- example: "1.24" +- GitCommit: +- description: | +- The Git commit of the source code that was used to build the daemon +- type: "string" +- example: "48a66213fe" +- GoVersion: +- description: | +- The version Go used to compile the daemon, and the version of the Go +- runtime in use. +- type: "string" +- example: "go1.22.7" +- Os: +- description: | +- The operating system that the daemon is running on ("linux" or "windows") +- type: "string" +- example: "linux" +- Arch: +- description: | +- Architecture of the daemon, as returned by the Go runtime (`GOARCH`). +- +- A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). +- type: "string" +- example: "amd64" +- KernelVersion: +- description: | +- The kernel version (`uname -r`) that the daemon is running on. +- +- This field is omitted when empty. +- type: "string" +- example: "6.8.0-31-generic" +- Experimental: +- description: | +- Indicates if the daemon is started with experimental features enabled. +- +- This field is omitted when empty / false. +- type: "boolean" +- example: true +- BuildTime: +- description: | +- The date and time that the daemon was compiled. +- type: "string" +- example: "2020-06-22T15:49:27.000000000+00:00" +- +- SystemInfo: +- type: "object" +- properties: +- ID: +- description: | +- Unique identifier of the daemon. +- +-


+- +- > **Note**: The format of the ID itself is not part of the API, and +- > should not be considered stable. +- type: "string" +- example: "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" +- Containers: +- description: "Total number of containers on the host." +- type: "integer" +- example: 14 +- ContainersRunning: +- description: | +- Number of containers with status `"running"`. +- type: "integer" +- example: 3 +- ContainersPaused: +- description: | +- Number of containers with status `"paused"`. +- type: "integer" +- example: 1 +- ContainersStopped: +- description: | +- Number of containers with status `"stopped"`. +- type: "integer" +- example: 10 +- Images: +- description: | +- Total number of images on the host. +- +- Both _tagged_ and _untagged_ (dangling) images are counted. +- type: "integer" +- example: 508 +- Driver: +- description: "Name of the storage driver in use." +- type: "string" +- example: "overlay2" +- DriverStatus: +- description: | +- Information specific to the storage driver, provided as +- "label" / "value" pairs. +- +- This information is provided by the storage driver, and formatted +- in a way consistent with the output of `docker info` on the command +- line. +- +-


+- +- > **Note**: The information returned in this field, including the +- > formatting of values and labels, should not be considered stable, +- > and may change without notice. +- type: "array" +- items: +- type: "array" +- items: +- type: "string" +- example: +- - ["Backing Filesystem", "extfs"] +- - ["Supports d_type", "true"] +- - ["Native Overlay Diff", "true"] +- DockerRootDir: +- description: | +- Root directory of persistent Docker state. +- +- Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` +- on Windows. +- type: "string" +- example: "/var/lib/docker" +- Plugins: +- $ref: "#/definitions/PluginsInfo" +- MemoryLimit: +- description: "Indicates if the host has memory limit support enabled." +- type: "boolean" +- example: true +- SwapLimit: +- description: "Indicates if the host has memory swap limit support enabled." +- type: "boolean" +- example: true +- CpuCfsPeriod: +- description: | +- Indicates if CPU CFS(Completely Fair Scheduler) period is supported by +- the host. +- type: "boolean" +- example: true +- CpuCfsQuota: +- description: | +- Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by +- the host. +- type: "boolean" +- example: true +- CPUShares: +- description: | +- Indicates if CPU Shares limiting is supported by the host. +- type: "boolean" +- example: true +- CPUSet: +- description: | +- Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. +- +- See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) +- type: "boolean" +- example: true +- PidsLimit: +- description: "Indicates if the host kernel has PID limit support enabled." +- type: "boolean" +- example: true +- OomKillDisable: +- description: "Indicates if OOM killer disable is supported on the host." +- type: "boolean" +- IPv4Forwarding: +- description: "Indicates IPv4 forwarding is enabled." +- type: "boolean" +- example: true +- Debug: +- description: | +- Indicates if the daemon is running in debug-mode / with debug-level +- logging enabled. +- type: "boolean" +- example: true +- NFd: +- description: | +- The total number of file Descriptors in use by the daemon process. +- +- This information is only returned if debug-mode is enabled. +- type: "integer" +- example: 64 +- NGoroutines: +- description: | +- The number of goroutines that currently exist. +- +- This information is only returned if debug-mode is enabled. +- type: "integer" +- example: 174 +- SystemTime: +- description: | +- Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) +- format with nano-seconds. +- type: "string" +- example: "2017-08-08T20:28:29.06202363Z" +- LoggingDriver: +- description: | +- The logging driver to use as a default for new containers. +- type: "string" +- CgroupDriver: +- description: | +- The driver to use for managing cgroups. +- type: "string" +- enum: ["cgroupfs", "systemd", "none"] +- default: "cgroupfs" +- example: "cgroupfs" +- CgroupVersion: +- description: | +- The version of the cgroup. +- type: "string" +- enum: ["1", "2"] +- default: "1" +- example: "1" +- NEventsListener: +- description: "Number of event listeners subscribed." +- type: "integer" +- example: 30 +- KernelVersion: +- description: | +- Kernel version of the host. +- +- On Linux, this information obtained from `uname`. On Windows this +- information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ +- registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. +- type: "string" +- example: "6.8.0-31-generic" +- OperatingSystem: +- description: | +- Name of the host's operating system, for example: "Ubuntu 24.04 LTS" +- or "Windows Server 2016 Datacenter" +- type: "string" +- example: "Ubuntu 24.04 LTS" +- OSVersion: +- description: | +- Version of the host's operating system +- +-


+- +- > **Note**: The information returned in this field, including its +- > very existence, and the formatting of values, should not be considered +- > stable, and may change without notice. +- type: "string" +- example: "24.04" +- OSType: +- description: | +- Generic type of the operating system of the host, as returned by the +- Go runtime (`GOOS`). +- +- Currently returned values are "linux" and "windows". A full list of +- possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). +- type: "string" +- example: "linux" +- Architecture: +- description: | +- Hardware architecture of the host, as returned by the operating system. +- This is equivalent to the output of `uname -m` on Linux. +- +- Unlike `Arch` (from `/version`), this reports the machine's native +- architecture, which can differ from the Go runtime architecture when +- running a binary compiled for a different architecture (for example, +- a 32-bit binary running on 64-bit hardware). +- type: "string" +- example: "x86_64" +- NCPU: +- description: | +- The number of logical CPUs usable by the daemon. +- +- The number of available CPUs is checked by querying the operating +- system when the daemon starts. Changes to operating system CPU +- allocation after the daemon is started are not reflected. +- type: "integer" +- example: 4 +- MemTotal: +- description: | +- Total amount of physical memory available on the host, in bytes. +- type: "integer" +- format: "int64" +- example: 2095882240 +- +- IndexServerAddress: +- description: | +- Address / URL of the index server that is used for image search, +- and as a default for user authentication for Docker Hub and Docker Cloud. +- default: "https://index.docker.io/v1/" +- type: "string" +- example: "https://index.docker.io/v1/" +- RegistryConfig: +- $ref: "#/definitions/RegistryServiceConfig" +- GenericResources: +- $ref: "#/definitions/GenericResources" +- HttpProxy: +- description: | +- HTTP-proxy configured for the daemon. This value is obtained from the +- [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. +- Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL +- are masked in the API response. +- +- Containers do not automatically inherit this configuration. +- type: "string" +- example: "http://xxxxx:xxxxx@proxy.corp.example.com:8080" +- HttpsProxy: +- description: | +- HTTPS-proxy configured for the daemon. This value is obtained from the +- [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. +- Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL +- are masked in the API response. +- +- Containers do not automatically inherit this configuration. +- type: "string" +- example: "https://xxxxx:xxxxx@proxy.corp.example.com:4443" +- NoProxy: +- description: | +- Comma-separated list of domain extensions for which no proxy should be +- used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) +- environment variable. +- +- Containers do not automatically inherit this configuration. +- type: "string" +- example: "*.local, 169.254/16" +- Name: +- description: "Hostname of the host." +- type: "string" +- example: "node5.corp.example.com" +- Labels: +- description: | +- User-defined labels (key/value metadata) as set on the daemon. +- +-


+- +- > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, +- > set through the daemon configuration, and _node_ labels, set from a +- > manager node in the Swarm. Node labels are not included in this +- > field. Node labels can be retrieved using the `/nodes/(id)` endpoint +- > on a manager node in the Swarm. +- type: "array" +- items: +- type: "string" +- example: ["storage=ssd", "production"] +- ExperimentalBuild: +- description: | +- Indicates if experimental features are enabled on the daemon. +- type: "boolean" +- example: true +- ServerVersion: +- description: | +- Version string of the daemon. +- type: "string" +- example: "27.0.1" +- Runtimes: +- description: | +- List of [OCI compliant](https://github.com/opencontainers/runtime-spec) +- runtimes configured on the daemon. Keys hold the "name" used to +- reference the runtime. +- +- The Docker daemon relies on an OCI compliant runtime (invoked via the +- `containerd` daemon) as its interface to the Linux kernel namespaces, +- cgroups, and SELinux. +- +- The default runtime is `runc`, and automatically configured. Additional +- runtimes can be configured by the user and will be listed here. +- type: "object" +- additionalProperties: +- $ref: "#/definitions/Runtime" +- default: +- runc: +- path: "runc" +- example: +- runc: +- path: "runc" +- runc-master: +- path: "/go/bin/runc" +- custom: +- path: "/usr/local/bin/my-oci-runtime" +- runtimeArgs: ["--debug", "--systemd-cgroup=false"] +- DefaultRuntime: +- description: | +- Name of the default OCI runtime that is used when starting containers. +- +- The default can be overridden per-container at create time. +- type: "string" +- default: "runc" +- example: "runc" +- Swarm: +- $ref: "#/definitions/SwarmInfo" +- LiveRestoreEnabled: +- description: | +- Indicates if live restore is enabled. +- +- If enabled, containers are kept running when the daemon is shutdown +- or upon daemon start if running containers are detected. +- type: "boolean" +- default: false +- example: false +- Isolation: +- description: | +- Represents the isolation technology to use as a default for containers. +- The supported values are platform-specific. +- +- If no isolation value is specified on daemon start, on Windows client, +- the default is `hyperv`, and on Windows server, the default is `process`. +- +- This option is currently not used on other platforms. +- default: "default" +- type: "string" +- enum: +- - "default" +- - "hyperv" +- - "process" +- - "" +- InitBinary: +- description: | +- Name and, optional, path of the `docker-init` binary. +- +- If the path is omitted, the daemon searches the host's `$PATH` for the +- binary and uses the first result. +- type: "string" +- example: "docker-init" +- ContainerdCommit: +- $ref: "#/definitions/Commit" +- RuncCommit: +- $ref: "#/definitions/Commit" +- InitCommit: +- $ref: "#/definitions/Commit" +- SecurityOptions: +- description: | +- List of security features that are enabled on the daemon, such as +- apparmor, seccomp, SELinux, user-namespaces (userns), rootless and +- no-new-privileges. +- +- Additional configuration options for each security feature may +- be present, and are included as a comma-separated list of key/value +- pairs. +- type: "array" +- items: +- type: "string" +- example: +- - "name=apparmor" +- - "name=seccomp,profile=default" +- - "name=selinux" +- - "name=userns" +- - "name=rootless" +- ProductLicense: +- description: | +- Reports a summary of the product license on the daemon. +- +- If a commercial license has been applied to the daemon, information +- such as number of nodes, and expiration are included. +- type: "string" +- example: "Community Engine" +- DefaultAddressPools: +- description: | +- List of custom default address pools for local networks, which can be +- specified in the daemon.json file or dockerd option. +- +- Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 +- 10.10.[0-255].0/24 address pools. +- type: "array" +- items: +- type: "object" +- properties: +- Base: +- description: "The network address in CIDR format" +- type: "string" +- example: "10.10.0.0/16" +- Size: +- description: "The network pool size" +- type: "integer" +- example: "24" +- FirewallBackend: +- $ref: "#/definitions/FirewallInfo" +- DiscoveredDevices: +- description: | +- List of devices discovered by device drivers. +- +- Each device includes information about its source driver, kind, name, +- and additional driver-specific attributes. +- type: "array" +- items: +- $ref: "#/definitions/DeviceInfo" +- NRI: +- $ref: "#/definitions/NRIInfo" +- Warnings: +- description: | +- List of warnings / informational messages about missing features, or +- issues related to the daemon configuration. +- +- These messages can be printed by the client as information to the user. +- type: "array" +- items: +- type: "string" +- example: +- - "WARNING: No memory limit support" +- CDISpecDirs: +- description: | +- List of directories where (Container Device Interface) CDI +- specifications are located. +- +- These specifications define vendor-specific modifications to an OCI +- runtime specification for a container being created. +- +- An empty list indicates that CDI device injection is disabled. +- +- Note that since using CDI device injection requires the daemon to have +- experimental enabled. For non-experimental daemons an empty list will +- always be returned. +- type: "array" +- items: +- type: "string" +- example: +- - "/etc/cdi" +- - "/var/run/cdi" +- Containerd: +- $ref: "#/definitions/ContainerdInfo" +- +- ContainerdInfo: +- description: | +- Information for connecting to the containerd instance that is used by the daemon. +- This is included for debugging purposes only. +- type: "object" +- x-nullable: true +- properties: +- Address: +- description: "The address of the containerd socket." +- type: "string" +- example: "/run/containerd/containerd.sock" +- Namespaces: +- description: | +- The namespaces that the daemon uses for running containers and +- plugins in containerd. These namespaces can be configured in the +- daemon configuration, and are considered to be used exclusively +- by the daemon, Tampering with the containerd instance may cause +- unexpected behavior. +- +- As these namespaces are considered to be exclusively accessed +- by the daemon, it is not recommended to change these values, +- or to change them to a value that is used by other systems, +- such as cri-containerd. +- type: "object" +- properties: +- Containers: +- description: | +- The default containerd namespace used for containers managed +- by the daemon. +- +- The default namespace for containers is "moby", but will be +- suffixed with the `.` of the remapped `root` if +- user-namespaces are enabled and the containerd image-store +- is used. +- type: "string" +- default: "moby" +- example: "moby" +- Plugins: +- description: | +- The default containerd namespace used for plugins managed by +- the daemon. +- +- The default namespace for plugins is "plugins.moby", but will be +- suffixed with the `.` of the remapped `root` if +- user-namespaces are enabled and the containerd image-store +- is used. +- type: "string" +- default: "plugins.moby" +- example: "plugins.moby" +- +- FirewallInfo: +- description: | +- Information about the daemon's firewalling configuration. +- +- This field is currently only used on Linux, and omitted on other platforms. +- type: "object" +- x-nullable: true +- properties: +- Driver: +- description: | +- The name of the firewall backend driver. +- type: "string" +- example: "nftables" +- Info: +- description: | +- Information about the firewall backend, provided as +- "label" / "value" pairs. +- +-


+- +- > **Note**: The information returned in this field, including the +- > formatting of values and labels, should not be considered stable, +- > and may change without notice. +- type: "array" +- items: +- type: "array" +- items: +- type: "string" +- example: +- - ["ReloadedAt", "2025-01-01T00:00:00Z"] +- +- # PluginsInfo is a temp struct holding Plugins name +- # registered with docker daemon. It is used by Info struct +- PluginsInfo: +- description: | +- Available plugins per type. +- +-


+- +- > **Note**: Only unmanaged (V1) plugins are included in this list. +- > V1 plugins are "lazily" loaded, and are not returned in this list +- > if there is no resource using the plugin. +- type: "object" +- properties: +- Volume: +- description: "Names of available volume-drivers, and network-driver plugins." +- type: "array" +- items: +- type: "string" +- example: ["local"] +- Network: +- description: "Names of available network-drivers, and network-driver plugins." +- type: "array" +- items: +- type: "string" +- example: ["bridge", "host", "ipvlan", "macvlan", "null", "overlay"] +- Authorization: +- description: "Names of available authorization plugins." +- type: "array" +- items: +- type: "string" +- example: ["img-authz-plugin", "hbm"] +- Log: +- description: "Names of available logging-drivers, and logging-driver plugins." +- type: "array" +- items: +- type: "string" +- example: ["awslogs", "fluentd", "gcplogs", "gelf", "journald", "json-file", "splunk", "syslog"] +- +- +- RegistryServiceConfig: +- description: | +- RegistryServiceConfig stores daemon registry services configuration. +- type: "object" +- x-nullable: true +- properties: +- InsecureRegistryCIDRs: +- description: | +- List of IP ranges of insecure registries, using the CIDR syntax +- ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries +- accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates +- from unknown CAs) communication. +- +- By default, local registries (`::1/128` and `127.0.0.0/8`) are configured as +- insecure. All other registries are secure. Communicating with an +- insecure registry is not possible if the daemon assumes that registry +- is secure. +- +- This configuration override this behavior, insecure communication with +- registries whose resolved IP address is within the subnet described by +- the CIDR syntax. +- +- Registries can also be marked insecure by hostname. Those registries +- are listed under `IndexConfigs` and have their `Secure` field set to +- `false`. +- +- > **Warning**: Using this option can be useful when running a local +- > registry, but introduces security vulnerabilities. This option +- > should therefore ONLY be used for testing purposes. For increased +- > security, users should add their CA to their system's list of trusted +- > CAs instead of enabling this option. +- type: "array" +- items: +- type: "string" +- example: ["::1/128", "127.0.0.0/8"] +- IndexConfigs: +- type: "object" +- additionalProperties: +- $ref: "#/definitions/IndexInfo" +- example: +- "127.0.0.1:5000": +- "Name": "127.0.0.1:5000" +- "Mirrors": [] +- "Secure": false +- "Official": false +- "[2001:db8:a0b:12f0::1]:80": +- "Name": "[2001:db8:a0b:12f0::1]:80" +- "Mirrors": [] +- "Secure": false +- "Official": false +- "docker.io": +- Name: "docker.io" +- Mirrors: ["https://hub-mirror.corp.example.com:5000/"] +- Secure: true +- Official: true +- "registry.internal.corp.example.com:3000": +- Name: "registry.internal.corp.example.com:3000" +- Mirrors: [] +- Secure: false +- Official: false +- Mirrors: +- description: | +- List of registry URLs that act as a mirror for the official +- (`docker.io`) registry. +- +- type: "array" +- items: +- type: "string" +- example: +- - "https://hub-mirror.corp.example.com:5000/" +- - "https://[2001:db8:a0b:12f0::1]/" +- +- IndexInfo: +- description: +- IndexInfo contains information about a registry. +- type: "object" +- x-nullable: true +- properties: +- Name: +- description: | +- Name of the registry, such as "docker.io". +- type: "string" +- example: "docker.io" +- Mirrors: +- description: | +- List of mirrors, expressed as URIs. +- type: "array" +- items: +- type: "string" +- example: +- - "https://hub-mirror.corp.example.com:5000/" +- - "https://registry-2.docker.io/" +- - "https://registry-3.docker.io/" +- Secure: +- description: | +- Indicates if the registry is part of the list of insecure +- registries. +- +- If `false`, the registry is insecure. Insecure registries accept +- un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from +- unknown CAs) communication. +- +- > **Warning**: Insecure registries can be useful when running a local +- > registry. However, because its use creates security vulnerabilities +- > it should ONLY be enabled for testing purposes. For increased +- > security, users should add their CA to their system's list of +- > trusted CAs instead of enabling this option. +- type: "boolean" +- example: true +- Official: +- description: | +- Indicates whether this is an official registry (i.e., Docker Hub / docker.io) +- type: "boolean" +- example: true +- +- Runtime: +- description: | +- Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec) +- runtime. +- +- The runtime is invoked by the daemon via the `containerd` daemon. OCI +- runtimes act as an interface to the Linux kernel namespaces, cgroups, +- and SELinux. +- type: "object" +- properties: +- path: +- description: | +- Name and, optional, path, of the OCI executable binary. +- +- If the path is omitted, the daemon searches the host's `$PATH` for the +- binary and uses the first result. +- type: "string" +- example: "/usr/local/bin/my-oci-runtime" +- runtimeArgs: +- description: | +- List of command-line arguments to pass to the runtime when invoked. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: ["--debug", "--systemd-cgroup=false"] +- status: +- description: | +- Information specific to the runtime. +- +- While this API specification does not define data provided by runtimes, +- the following well-known properties may be provided by runtimes: +- +- `org.opencontainers.runtime-spec.features`: features structure as defined +- in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), +- in a JSON string representation. +- +-


+- +- > **Note**: The information returned in this field, including the +- > formatting of values and labels, should not be considered stable, +- > and may change without notice. +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "string" +- example: +- "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" +- +- Commit: +- description: | +- Commit holds the Git-commit (SHA1) that a binary was built from, as +- reported in the version-string of external tools, such as `containerd`, +- or `runC`. +- type: "object" +- properties: +- ID: +- description: "Actual commit ID of external tool." +- type: "string" +- example: "cfb82a876ecc11b5ca0977d1733adbe58599088a" +- +- SwarmInfo: +- description: | +- Represents generic information about swarm. +- type: "object" +- properties: +- NodeID: +- description: "Unique identifier of for this node in the swarm." +- type: "string" +- default: "" +- example: "k67qz4598weg5unwwffg6z1m1" +- NodeAddr: +- description: | +- IP address at which this node can be reached by other nodes in the +- swarm. +- type: "string" +- default: "" +- example: "10.0.0.46" +- LocalNodeState: +- $ref: "#/definitions/LocalNodeState" +- ControlAvailable: +- type: "boolean" +- default: false +- example: true +- Error: +- type: "string" +- default: "" +- RemoteManagers: +- description: | +- List of ID's and addresses of other managers in the swarm. +- type: "array" +- default: null +- x-nullable: true +- items: +- $ref: "#/definitions/PeerNode" +- example: +- - NodeID: "71izy0goik036k48jg985xnds" +- Addr: "10.0.0.158:2377" +- - NodeID: "79y6h1o4gv8n120drcprv5nmc" +- Addr: "10.0.0.159:2377" +- - NodeID: "k67qz4598weg5unwwffg6z1m1" +- Addr: "10.0.0.46:2377" +- Nodes: +- description: "Total number of nodes in the swarm." +- type: "integer" +- x-nullable: true +- example: 4 +- Managers: +- description: "Total number of managers in the swarm." +- type: "integer" +- x-nullable: true +- example: 3 +- Cluster: +- $ref: "#/definitions/ClusterInfo" +- +- LocalNodeState: +- description: "Current local status of this node." +- type: "string" +- default: "" +- enum: +- - "" +- - "inactive" +- - "pending" +- - "active" +- - "error" +- - "locked" +- example: "active" +- +- PeerNode: +- description: "Represents a peer-node in the swarm" +- type: "object" +- properties: +- NodeID: +- description: "Unique identifier of for this node in the swarm." +- type: "string" +- Addr: +- description: | +- IP address and ports at which this node can be reached. +- type: "string" +- +- NetworkAttachmentConfig: +- description: | +- Specifies how a service should be attached to a particular network. +- type: "object" +- properties: +- Target: +- description: | +- The target network for attachment. Must be a network name or ID. +- type: "string" +- Aliases: +- description: | +- Discoverable alternate names for the service on this network. +- type: "array" +- items: +- type: "string" +- DriverOpts: +- description: | +- Driver attachment options for the network target. +- type: "object" +- additionalProperties: +- type: "string" +- +- EventActor: +- description: | +- Actor describes something that generates events, like a container, network, +- or a volume. +- type: "object" +- properties: +- ID: +- description: "The ID of the object emitting the event" +- type: "string" +- example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" +- Attributes: +- description: | +- Various key/value attributes of the object, depending on its type. +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-label-value" +- image: "alpine:latest" +- name: "my-container" +- +- EventMessage: +- description: | +- EventMessage represents the information an event contains. +- type: "object" +- title: "SystemEventsResponse" +- properties: +- Type: +- description: "The type of object emitting the event" +- type: "string" +- enum: ["builder", "config", "container", "daemon", "image", "network", "node", "plugin", "secret", "service", "volume"] +- example: "container" +- Action: +- description: "The type of event" +- type: "string" +- example: "create" +- Actor: +- $ref: "#/definitions/EventActor" +- scope: +- description: | +- Scope of the event. Engine events are `local` scope. Cluster (Swarm) +- events are `swarm` scope. +- type: "string" +- enum: ["local", "swarm"] +- time: +- description: "Timestamp of event" +- type: "integer" +- format: "int64" +- example: 1629574695 +- timeNano: +- description: "Timestamp of event, with nanosecond accuracy" +- type: "integer" +- format: "int64" +- example: 1629574695515050031 +- +- OCIDescriptor: +- type: "object" +- x-go-name: Descriptor +- description: | +- A descriptor struct containing digest, media type, and size, as defined in +- the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). +- properties: +- mediaType: +- description: | +- The media type of the object this schema refers to. +- type: "string" +- example: "application/vnd.oci.image.manifest.v1+json" +- digest: +- description: | +- The digest of the targeted content. +- type: "string" +- example: "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" +- size: +- description: | +- The size in bytes of the blob. +- type: "integer" +- format: "int64" +- example: 424 +- urls: +- description: |- +- List of URLs from which this object MAY be downloaded. +- type: "array" +- items: +- type: "string" +- format: "uri" +- x-nullable: true +- annotations: +- description: |- +- Arbitrary metadata relating to the targeted content. +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "string" +- example: +- "com.docker.official-images.bashbrew.arch": "amd64" +- "org.opencontainers.image.base.digest": "sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8" +- "org.opencontainers.image.base.name": "scratch" +- "org.opencontainers.image.created": "2025-01-27T00:00:00Z" +- "org.opencontainers.image.revision": "9fabb4bad5138435b01857e2fe9363e2dc5f6a79" +- "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base" +- "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu" +- "org.opencontainers.image.version": "24.04" +- data: +- type: string +- x-nullable: true +- description: |- +- Data is an embedding of the targeted content. This is encoded as a base64 +- string when marshalled to JSON (automatically, by encoding/json). If +- present, Data can be used directly to avoid fetching the targeted content. +- example: null +- platform: +- $ref: "#/definitions/OCIPlatform" +- artifactType: +- description: |- +- ArtifactType is the IANA media type of this artifact. +- type: "string" +- x-nullable: true +- example: null +- +- OCIPlatform: +- type: "object" +- x-go-name: Platform +- x-nullable: true +- description: | +- Describes the platform which the image in the manifest runs on, as defined +- in the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md). +- properties: +- architecture: +- description: | +- The CPU architecture, for example `amd64` or `ppc64`. +- type: "string" +- example: "arm" +- os: +- description: | +- The operating system, for example `linux` or `windows`. +- type: "string" +- example: "windows" +- os.version: +- description: | +- Optional field specifying the operating system version, for example on +- Windows `10.0.19041.1165`. +- type: "string" +- example: "10.0.19041.1165" +- os.features: +- description: | +- Optional field specifying an array of strings, each listing a required +- OS feature (for example on Windows `win32k`). +- type: "array" +- items: +- type: "string" +- example: +- - "win32k" +- variant: +- description: | +- Optional field specifying a variant of the CPU, for example `v7` to +- specify ARMv7 when architecture is `arm`. +- type: "string" +- example: "v7" +- +- DistributionInspect: +- type: "object" +- x-go-name: DistributionInspect +- title: "DistributionInspectResponse" +- required: [Descriptor, Platforms] +- description: | +- Describes the result obtained from contacting the registry to retrieve +- image metadata. +- properties: +- Descriptor: +- $ref: "#/definitions/OCIDescriptor" +- Platforms: +- type: "array" +- description: | +- An array containing all platforms supported by the image. +- items: +- $ref: "#/definitions/OCIPlatform" +- +- ClusterVolume: +- type: "object" +- description: | +- Options and information specific to, and only present on, Swarm CSI +- cluster volumes. +- properties: +- ID: +- type: "string" +- description: | +- The Swarm ID of this volume. Because cluster volumes are Swarm +- objects, they have an ID, unlike non-cluster volumes. This ID can +- be used to refer to the Volume instead of the name. +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- type: "string" +- format: "dateTime" +- UpdatedAt: +- type: "string" +- format: "dateTime" +- Spec: +- $ref: "#/definitions/ClusterVolumeSpec" +- Info: +- type: "object" +- description: | +- Information about the global status of the volume. +- properties: +- CapacityBytes: +- type: "integer" +- format: "int64" +- description: | +- The capacity of the volume in bytes. A value of 0 indicates that +- the capacity is unknown. +- VolumeContext: +- type: "object" +- description: | +- A map of strings to strings returned from the storage plugin when +- the volume is created. +- additionalProperties: +- type: "string" +- VolumeID: +- type: "string" +- description: | +- The ID of the volume as returned by the CSI storage plugin. This +- is distinct from the volume's ID as provided by Docker. This ID +- is never used by the user when communicating with Docker to refer +- to this volume. If the ID is blank, then the Volume has not been +- successfully created in the plugin yet. +- AccessibleTopology: +- type: "array" +- description: | +- The topology this volume is actually accessible from. +- items: +- $ref: "#/definitions/Topology" +- PublishStatus: +- type: "array" +- description: | +- The status of the volume as it pertains to its publishing and use on +- specific nodes +- items: +- type: "object" +- properties: +- NodeID: +- type: "string" +- description: | +- The ID of the Swarm node the volume is published on. +- State: +- type: "string" +- description: | +- The published state of the volume. +- * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. +- * `published` The volume is published successfully to the node. +- * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. +- * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. +- enum: +- - "pending-publish" +- - "published" +- - "pending-node-unpublish" +- - "pending-controller-unpublish" +- PublishContext: +- type: "object" +- description: | +- A map of strings to strings returned by the CSI controller +- plugin when a volume is published. +- additionalProperties: +- type: "string" +- +- ClusterVolumeSpec: +- type: "object" +- description: | +- Cluster-specific options used to create the volume. +- properties: +- Group: +- type: "string" +- description: | +- Group defines the volume group of this volume. Volumes belonging to +- the same group can be referred to by group name when creating +- Services. Referring to a volume by group instructs Swarm to treat +- volumes in that group interchangeably for the purpose of scheduling. +- Volumes with an empty string for a group technically all belong to +- the same, emptystring group. +- AccessMode: +- type: "object" +- description: | +- Defines how the volume is used by tasks. +- properties: +- Scope: +- type: "string" +- description: | +- The set of nodes this volume can be used on at one time. +- - `single` The volume may only be scheduled to one node at a time. +- - `multi` the volume may be scheduled to any supported number of nodes at a time. +- default: "single" +- enum: ["single", "multi"] +- x-nullable: false +- Sharing: +- type: "string" +- description: | +- The number and way that different tasks can use this volume +- at one time. +- - `none` The volume may only be used by one task at a time. +- - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly +- - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. +- - `all` The volume may have any number of readers and writers. +- default: "none" +- enum: ["none", "readonly", "onewriter", "all"] +- x-nullable: false +- MountVolume: +- type: "object" +- description: | +- Options for using this volume as a Mount-type volume. +- +- Either MountVolume or BlockVolume, but not both, must be +- present. +- properties: +- FsType: +- type: "string" +- description: | +- Specifies the filesystem type for the mount volume. +- Optional. +- MountFlags: +- type: "array" +- description: | +- Flags to pass when mounting the volume. Optional. +- items: +- type: "string" +- BlockVolume: +- type: "object" +- description: | +- Options for using this volume as a Block-type volume. +- Intentionally empty. +- Secrets: +- type: "array" +- description: | +- Swarm Secrets that are passed to the CSI storage plugin when +- operating on this volume. +- items: +- type: "object" +- description: | +- One cluster volume secret entry. Defines a key-value pair that +- is passed to the plugin. +- properties: +- Key: +- type: "string" +- description: | +- Key is the name of the key of the key-value pair passed to +- the plugin. +- Secret: +- type: "string" +- description: | +- Secret is the swarm Secret object from which to read data. +- This can be a Secret name or ID. The Secret data is +- retrieved by swarm and used as the value of the key-value +- pair passed to the plugin. +- AccessibilityRequirements: +- type: "object" +- description: | +- Requirements for the accessible topology of the volume. These +- fields are optional. For an in-depth description of what these +- fields mean, see the CSI specification. +- properties: +- Requisite: +- type: "array" +- description: | +- A list of required topologies, at least one of which the +- volume must be accessible from. +- items: +- $ref: "#/definitions/Topology" +- Preferred: +- type: "array" +- description: | +- A list of topologies that the volume should attempt to be +- provisioned in. +- items: +- $ref: "#/definitions/Topology" +- CapacityRange: +- type: "object" +- description: | +- The desired capacity that the volume should be created with. If +- empty, the plugin will decide the capacity. +- properties: +- RequiredBytes: +- type: "integer" +- format: "int64" +- description: | +- The volume must be at least this big. The value of 0 +- indicates an unspecified minimum +- LimitBytes: +- type: "integer" +- format: "int64" +- description: | +- The volume must not be bigger than this. The value of 0 +- indicates an unspecified maximum. +- Availability: +- type: "string" +- description: | +- The availability of the volume for use in tasks. +- - `active` The volume is fully available for scheduling on the cluster +- - `pause` No new workloads should use the volume, but existing workloads are not stopped. +- - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. +- default: "active" +- x-nullable: false +- enum: +- - "active" +- - "pause" +- - "drain" +- +- Topology: +- description: | +- A map of topological domains to topological segments. For in depth +- details, see documentation for the Topology object in the CSI +- specification. +- type: "object" +- properties: +- Segments: +- type: "object" +- additionalProperties: +- type: "string" +- +- AttestationStatement: +- x-go-name: "AttestationStatement" +- description: | +- AttestationStatement is a single in-toto statement attached to an image. +- type: "object" +- required: ["Descriptor", "PredicateType"] +- properties: +- Descriptor: +- $ref: "#/definitions/OCIDescriptor" +- PredicateType: +- description: The in-toto predicate type URI of this statement. +- type: "string" +- example: "https://slsa.dev/provenance/v0.2" +- Statement: +- description: | +- The verbatim in-toto statement JSON. Only included when the caller +- opts in via the `statement=true` query parameter; otherwise absent. +- type: "object" +- x-nullable: true +- ImageManifestSummary: +- x-go-name: "ManifestSummary" +- description: | +- ImageManifestSummary represents a summary of an image manifest. +- type: "object" +- required: ["ID", "Descriptor", "Available", "Size", "Kind"] +- properties: +- ID: +- description: | +- ID is the content-addressable ID of an image and is the same as the +- digest of the image manifest. +- type: "string" +- example: "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" +- Descriptor: +- $ref: "#/definitions/OCIDescriptor" +- Available: +- description: Indicates whether all the child content (image config, layers) is fully available locally. +- type: "boolean" +- example: true +- Size: +- type: "object" +- x-nullable: false +- required: ["Content", "Total"] +- properties: +- Total: +- type: "integer" +- format: "int64" +- example: 8213251 +- description: | +- Total is the total size (in bytes) of all the locally present +- data (both distributable and non-distributable) that's related to +- this manifest and its children. +- This equal to the sum of [Content] size AND all the sizes in the +- [Size] struct present in the Kind-specific data struct. +- For example, for an image kind (Kind == "image") +- this would include the size of the image content and unpacked +- image snapshots ([Size.Content] + [ImageData.Size.Unpacked]). +- Content: +- description: | +- Content is the size (in bytes) of all the locally present +- content in the content store (e.g. image config, layers) +- referenced by this manifest and its children. +- This only includes blobs in the content store. +- type: "integer" +- format: "int64" +- example: 3987495 +- Kind: +- type: "string" +- example: "image" +- enum: +- - "image" +- - "attestation" +- - "unknown" +- description: | +- The kind of the manifest. +- +- kind | description +- -------------|----------------------------------------------------------- +- image | Image manifest that can be used to start a container. +- attestation | Attestation manifest produced by the Buildkit builder for a specific image manifest. +- ImageData: +- description: | +- The image data for the image manifest. +- This field is only populated when Kind is "image". +- type: "object" +- x-nullable: true +- x-omitempty: true +- required: ["Platform", "Containers", "Size", "UnpackedSize"] +- properties: +- Platform: +- $ref: "#/definitions/OCIPlatform" +- description: | +- OCI platform of the image. This will be the platform specified in the +- manifest descriptor from the index/manifest list. +- If it's not available, it will be obtained from the image config. +- Identity: +- description: | +- Identity holds information about the identity and origin of this image. +- For image list responses, this can duplicate Build/Pull fields across +- image manifests, because those parts are image-level metadata. +- x-nullable: true +- $ref: "#/definitions/Identity" +- Containers: +- description: | +- The IDs of the containers that are using this image. +- type: "array" +- items: +- type: "string" +- example: ["ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430", "abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e"] +- Size: +- type: "object" +- x-nullable: false +- required: ["Unpacked"] +- properties: +- Unpacked: +- type: "integer" +- format: "int64" +- example: 3987495 +- description: | +- Unpacked is the size (in bytes) of the locally unpacked +- (uncompressed) image content that's directly usable by the containers +- running this image. +- It's independent of the distributable content - e.g. +- the image might still have an unpacked data that's still used by +- some container even when the distributable/compressed content is +- already gone. +- AttestationData: +- description: | +- The image data for the attestation manifest. +- This field is only populated when Kind is "attestation". +- type: "object" +- x-nullable: true +- x-omitempty: true +- required: ["For"] +- properties: +- For: +- description: | +- The digest of the image manifest that this attestation is for. +- type: "string" +- example: "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" +- ++ summary: Configs ++ kind: nav ++ - name: Plugin ++ summary: Plugins ++ kind: nav ++ description: Plugins reference. ++ - name: System ++ summary: System ++ kind: nav ++ description: System reference. ++ - name: Distribution ++ description: Distribution operations. ++ summary: Distribution ++ kind: nav ++ - name: Session ++ description: Session operations. ++ summary: Session ++ kind: nav + paths: + /containers/json: + get: +- summary: "List containers" ++ summary: List containers + description: | + Returns a list of containers. For details on the format, see the + [inspect endpoint](#operation/ContainerInspect). +@@ -8322,30 +172,31 @@ + Note that it uses a different, smaller representation of a container + than inspecting a single container. For example, the list of linked + containers is not propagated . +- operationId: "ContainerList" +- produces: +- - "application/json" ++ operationId: ContainerList + parameters: +- - name: "all" +- in: "query" ++ - name: all ++ in: query + description: | + Return all containers. By default, only running containers are shown. +- type: "boolean" +- default: false +- - name: "limit" +- in: "query" ++ schema: ++ type: boolean ++ default: false ++ - name: limit ++ in: query + description: | + Return this number of most recently created containers, including + non-running ones. +- type: "integer" +- - name: "size" +- in: "query" ++ schema: ++ type: integer ++ - name: size ++ in: query + description: | + Return the size of container as fields `SizeRw` and `SizeRootFs`. +- type: "boolean" +- default: false +- - name: "filters" +- in: "query" ++ schema: ++ type: boolean ++ default: false ++ - name: filters ++ in: query + description: | + Filters to process on the container list, encoded as JSON (a + `map[string][]string`). For example, `{"status": ["paused"]}` will +@@ -8368,42 +219,46 @@ + - `since`=(`` or ``) + - `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`) + - `volume`=(`` or ``) +- type: "string" +- responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/ContainerSummary" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Container"] ++ type: string ++ responses: ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/ContainerSummary" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Container + /containers/create: + post: +- summary: "Create a container" +- operationId: "ContainerCreate" +- consumes: +- - "application/json" +- - "application/octet-stream" +- produces: +- - "application/json" ++ summary: Create a container ++ operationId: ContainerCreate + parameters: +- - name: "name" +- in: "query" ++ - name: name ++ in: query + description: | + Assign the specified name to the container. Must match + `/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`. +- type: "string" +- pattern: "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$" +- - name: "platform" +- in: "query" ++ schema: ++ type: string ++ pattern: ^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$ ++ - name: platform ++ in: query + description: | + Platform in the format `os[/arch[/variant]]` used for image lookup. + +@@ -8421,323 +276,525 @@ + WARNING: The requested image's platform (linux/arm64/v8) does not + match the detected host platform (linux/amd64) and no + specific platform was requested +- +- type: "string" +- default: "" +- - name: "body" +- in: "body" +- description: "Container to create" +- schema: +- allOf: +- - $ref: "#/definitions/ContainerConfig" +- - type: "object" +- properties: +- HostConfig: +- $ref: "#/definitions/HostConfig" +- NetworkingConfig: +- $ref: "#/definitions/NetworkingConfig" +- example: +- Hostname: "" +- Domainname: "" +- User: "" +- AttachStdin: false +- AttachStdout: true +- AttachStderr: true +- Tty: false +- OpenStdin: false +- StdinOnce: false +- Env: +- - "FOO=bar" +- - "BAZ=quux" +- Cmd: +- - "date" +- Entrypoint: "" +- Image: "ubuntu" +- Labels: +- com.example.vendor: "Acme" +- com.example.license: "GPL" +- com.example.version: "1.0" +- Volumes: +- /volumes/data: {} +- WorkingDir: "" +- NetworkDisabled: false +- ExposedPorts: +- 22/tcp: {} +- StopSignal: "SIGTERM" +- StopTimeout: 10 +- HostConfig: +- Binds: +- - "/tmp:/tmp" +- Links: +- - "redis3:redis" +- Memory: 0 +- MemorySwap: 0 +- MemoryReservation: 0 +- NanoCpus: 500000 +- CpuPercent: 80 +- CpuShares: 512 +- CpuPeriod: 100000 +- CpuRealtimePeriod: 1000000 +- CpuRealtimeRuntime: 10000 +- CpuQuota: 50000 +- CpusetCpus: "0,1" +- CpusetMems: "0,1" +- MaximumIOps: 0 +- MaximumIOBps: 0 +- BlkioWeight: 300 +- BlkioWeightDevice: +- - {} +- BlkioDeviceReadBps: +- - {} +- BlkioDeviceReadIOps: +- - {} +- BlkioDeviceWriteBps: +- - {} +- BlkioDeviceWriteIOps: +- - {} +- DeviceRequests: +- - Driver: "nvidia" +- Count: -1 +- DeviceIDs": ["0", "1", "GPU-fef8089b-4820-abfc-e83e-94318197576e"] +- Capabilities: [["gpu", "nvidia", "compute"]] +- Options: +- property1: "string" +- property2: "string" +- MemorySwappiness: 60 +- OomKillDisable: false +- OomScoreAdj: 500 +- PidMode: "" +- PidsLimit: 0 +- PortBindings: +- 22/tcp: +- - HostPort: "11022" +- PublishAllPorts: false +- Privileged: false +- ReadonlyRootfs: false +- Dns: +- - "8.8.8.8" +- DnsOptions: +- - "" +- DnsSearch: +- - "" +- VolumesFrom: +- - "parent" +- - "other:ro" +- CapAdd: +- - "NET_ADMIN" +- CapDrop: +- - "MKNOD" +- GroupAdd: +- - "newgroup" +- RestartPolicy: +- Name: "" +- MaximumRetryCount: 0 +- AutoRemove: true +- NetworkMode: "bridge" +- Devices: [] +- Ulimits: +- - {} +- LogConfig: +- Type: "json-file" +- Config: {} +- SecurityOpt: [] +- StorageOpt: {} +- CgroupParent: "" +- VolumeDriver: "" +- ShmSize: 67108864 +- NetworkingConfig: +- EndpointsConfig: +- isolated_nw: +- IPAMConfig: +- IPv4Address: "172.20.30.33" +- IPv6Address: "2001:db8:abcd::3033" +- LinkLocalIPs: +- - "169.254.34.68" +- - "fe80::3468" +- Links: +- - "container_1" +- - "container_2" +- Aliases: +- - "server_x" +- - "server_y" +- database_nw: {} +- +- required: true +- responses: +- 201: +- description: "Container created successfully" +- schema: +- $ref: "#/definitions/ContainerCreateResponse" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such image: c2ada9df5af8" +- 409: +- description: "conflict" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Container"] ++ type: string ++ default: "" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/ContainerConfig" ++ - type: object ++ properties: ++ HostConfig: ++ $ref: "#/components/schemas/HostConfig" ++ NetworkingConfig: ++ $ref: "#/components/schemas/NetworkingConfig" ++ example: ++ Hostname: "" ++ Domainname: "" ++ User: "" ++ AttachStdin: false ++ AttachStdout: true ++ AttachStderr: true ++ Tty: false ++ OpenStdin: false ++ StdinOnce: false ++ Env: ++ - FOO=bar ++ - BAZ=quux ++ Cmd: ++ - date ++ Entrypoint: "" ++ Image: ubuntu ++ Labels: ++ com.example.vendor: Acme ++ com.example.license: GPL ++ com.example.version: "1.0" ++ Volumes: ++ /volumes/data: {} ++ WorkingDir: "" ++ NetworkDisabled: false ++ ExposedPorts: ++ 22/tcp: {} ++ StopSignal: SIGTERM ++ StopTimeout: 10 ++ HostConfig: ++ Binds: ++ - /tmp:/tmp ++ Links: ++ - redis3:redis ++ Memory: 0 ++ MemorySwap: 0 ++ MemoryReservation: 0 ++ NanoCpus: 500000 ++ CpuPercent: 80 ++ CpuShares: 512 ++ CpuPeriod: 100000 ++ CpuRealtimePeriod: 1000000 ++ CpuRealtimeRuntime: 10000 ++ CpuQuota: 50000 ++ CpusetCpus: 0,1 ++ CpusetMems: 0,1 ++ MaximumIOps: 0 ++ MaximumIOBps: 0 ++ BlkioWeight: 300 ++ BlkioWeightDevice: ++ - {} ++ BlkioDeviceReadBps: ++ - {} ++ BlkioDeviceReadIOps: ++ - {} ++ BlkioDeviceWriteBps: ++ - {} ++ BlkioDeviceWriteIOps: ++ - {} ++ DeviceRequests: ++ - Driver: nvidia ++ Count: -1 ++ DeviceIDs": ++ - "0" ++ - "1" ++ - GPU-fef8089b-4820-abfc-e83e-94318197576e ++ Capabilities: ++ - - gpu ++ - nvidia ++ - compute ++ Options: ++ property1: string ++ property2: string ++ MemorySwappiness: 60 ++ OomKillDisable: false ++ OomScoreAdj: 500 ++ PidMode: "" ++ PidsLimit: 0 ++ PortBindings: ++ 22/tcp: ++ - HostPort: "11022" ++ PublishAllPorts: false ++ Privileged: false ++ ReadonlyRootfs: false ++ Dns: ++ - 8.8.8.8 ++ DnsOptions: ++ - "" ++ DnsSearch: ++ - "" ++ VolumesFrom: ++ - parent ++ - other:ro ++ CapAdd: ++ - NET_ADMIN ++ CapDrop: ++ - MKNOD ++ GroupAdd: ++ - newgroup ++ RestartPolicy: ++ Name: "" ++ MaximumRetryCount: 0 ++ AutoRemove: true ++ NetworkMode: bridge ++ Devices: [] ++ Ulimits: ++ - {} ++ LogConfig: ++ Type: json-file ++ Config: {} ++ SecurityOpt: [] ++ StorageOpt: {} ++ CgroupParent: "" ++ VolumeDriver: "" ++ ShmSize: 67108864 ++ NetworkingConfig: ++ EndpointsConfig: ++ isolated_nw: ++ IPAMConfig: ++ IPv4Address: 172.20.30.33 ++ IPv6Address: 2001:db8:abcd::3033 ++ LinkLocalIPs: ++ - 169.254.34.68 ++ - fe80::3468 ++ Links: ++ - container_1 ++ - container_2 ++ Aliases: ++ - server_x ++ - server_y ++ database_nw: {} ++ application/octet-stream: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/ContainerConfig" ++ - type: object ++ properties: ++ HostConfig: ++ $ref: "#/components/schemas/HostConfig" ++ NetworkingConfig: ++ $ref: "#/components/schemas/NetworkingConfig" ++ example: ++ Hostname: "" ++ Domainname: "" ++ User: "" ++ AttachStdin: false ++ AttachStdout: true ++ AttachStderr: true ++ Tty: false ++ OpenStdin: false ++ StdinOnce: false ++ Env: ++ - FOO=bar ++ - BAZ=quux ++ Cmd: ++ - date ++ Entrypoint: "" ++ Image: ubuntu ++ Labels: ++ com.example.vendor: Acme ++ com.example.license: GPL ++ com.example.version: "1.0" ++ Volumes: ++ /volumes/data: {} ++ WorkingDir: "" ++ NetworkDisabled: false ++ ExposedPorts: ++ 22/tcp: {} ++ StopSignal: SIGTERM ++ StopTimeout: 10 ++ HostConfig: ++ Binds: ++ - /tmp:/tmp ++ Links: ++ - redis3:redis ++ Memory: 0 ++ MemorySwap: 0 ++ MemoryReservation: 0 ++ NanoCpus: 500000 ++ CpuPercent: 80 ++ CpuShares: 512 ++ CpuPeriod: 100000 ++ CpuRealtimePeriod: 1000000 ++ CpuRealtimeRuntime: 10000 ++ CpuQuota: 50000 ++ CpusetCpus: 0,1 ++ CpusetMems: 0,1 ++ MaximumIOps: 0 ++ MaximumIOBps: 0 ++ BlkioWeight: 300 ++ BlkioWeightDevice: ++ - {} ++ BlkioDeviceReadBps: ++ - {} ++ BlkioDeviceReadIOps: ++ - {} ++ BlkioDeviceWriteBps: ++ - {} ++ BlkioDeviceWriteIOps: ++ - {} ++ DeviceRequests: ++ - Driver: nvidia ++ Count: -1 ++ DeviceIDs": ++ - "0" ++ - "1" ++ - GPU-fef8089b-4820-abfc-e83e-94318197576e ++ Capabilities: ++ - - gpu ++ - nvidia ++ - compute ++ Options: ++ property1: string ++ property2: string ++ MemorySwappiness: 60 ++ OomKillDisable: false ++ OomScoreAdj: 500 ++ PidMode: "" ++ PidsLimit: 0 ++ PortBindings: ++ 22/tcp: ++ - HostPort: "11022" ++ PublishAllPorts: false ++ Privileged: false ++ ReadonlyRootfs: false ++ Dns: ++ - 8.8.8.8 ++ DnsOptions: ++ - "" ++ DnsSearch: ++ - "" ++ VolumesFrom: ++ - parent ++ - other:ro ++ CapAdd: ++ - NET_ADMIN ++ CapDrop: ++ - MKNOD ++ GroupAdd: ++ - newgroup ++ RestartPolicy: ++ Name: "" ++ MaximumRetryCount: 0 ++ AutoRemove: true ++ NetworkMode: bridge ++ Devices: [] ++ Ulimits: ++ - {} ++ LogConfig: ++ Type: json-file ++ Config: {} ++ SecurityOpt: [] ++ StorageOpt: {} ++ CgroupParent: "" ++ VolumeDriver: "" ++ ShmSize: 67108864 ++ NetworkingConfig: ++ EndpointsConfig: ++ isolated_nw: ++ IPAMConfig: ++ IPv4Address: 172.20.30.33 ++ IPv6Address: 2001:db8:abcd::3033 ++ LinkLocalIPs: ++ - 169.254.34.68 ++ - fe80::3468 ++ Links: ++ - container_1 ++ - container_2 ++ Aliases: ++ - server_x ++ - server_y ++ database_nw: {} ++ description: Container to create ++ required: true ++ responses: ++ "201": ++ description: Container created successfully ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ContainerCreateResponse" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such image: c2ada9df5af8" ++ "409": ++ description: conflict ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Container ++ description: Create a container. + /containers/{id}/json: + get: +- summary: "Inspect a container" +- description: "Return low-level information about a container." +- operationId: "ContainerInspect" +- produces: +- - "application/json" +- responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/ContainerInspectResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "size" +- in: "query" +- type: "boolean" +- default: false +- description: "Return the size of container as fields `SizeRw` and `SizeRootFs`" +- tags: ["Container"] ++ summary: Inspect a container ++ description: Return low-level information about a container. ++ operationId: ContainerInspect ++ responses: ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ContainerInspectResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: size ++ in: query ++ description: Return the size of container as fields `SizeRw` and `SizeRootFs` ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Container + /containers/{id}/top: + get: +- summary: "List processes running inside a container" ++ summary: List processes running inside a container + description: | + On Unix systems, this is done by running the `ps` command. This endpoint + is not supported on Windows. +- operationId: "ContainerTop" ++ operationId: ContainerTop + responses: +- 200: +- description: "no error" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ContainerTopResponse" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/ContainerTopResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: ps_args ++ in: query ++ description: The arguments to pass to `ps`. For example, `aux` + schema: +- $ref: "#/definitions/ContainerTopResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "ps_args" +- in: "query" +- description: "The arguments to pass to `ps`. For example, `aux`" +- type: "string" +- default: "-ef" +- tags: ["Container"] ++ type: string ++ default: -ef ++ tags: ++ - Container + /containers/{id}/logs: + get: +- summary: "Get container logs" ++ summary: Get container logs + description: | + Get `stdout` and `stderr` logs from a container. + + Note: This endpoint works only for containers with the `json-file` or + `journald` logging driver. +- produces: +- - "application/vnd.docker.raw-stream" +- - "application/vnd.docker.multiplexed-stream" +- operationId: "ContainerLogs" ++ operationId: ContainerLogs + responses: +- 200: ++ "200": + description: | + logs returned as a stream in response body. + For the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach). + Note that unlike the attach endpoint, the logs endpoint does not + upgrade the connection and does not set Content-Type. ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ type: string ++ format: binary ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ type: string ++ format: binary ++ "404": ++ description: no such container ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container + schema: +- type: "string" +- format: "binary" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "follow" +- in: "query" +- description: "Keep connection after returning logs." +- type: "boolean" +- default: false +- - name: "stdout" +- in: "query" +- description: "Return logs from `stdout`" +- type: "boolean" +- default: false +- - name: "stderr" +- in: "query" +- description: "Return logs from `stderr`" +- type: "boolean" +- default: false +- - name: "since" +- in: "query" +- description: "Only return logs since this time, as a UNIX timestamp" +- type: "integer" +- default: 0 +- - name: "until" +- in: "query" +- description: "Only return logs before this time, as a UNIX timestamp" +- type: "integer" +- default: 0 +- - name: "timestamps" +- in: "query" +- description: "Add timestamps to every log line" +- type: "boolean" +- default: false +- - name: "tail" +- in: "query" ++ type: string ++ - name: follow ++ in: query ++ description: Keep connection after returning logs. ++ schema: ++ type: boolean ++ default: false ++ - name: stdout ++ in: query ++ description: Return logs from `stdout` ++ schema: ++ type: boolean ++ default: false ++ - name: stderr ++ in: query ++ description: Return logs from `stderr` ++ schema: ++ type: boolean ++ default: false ++ - name: since ++ in: query ++ description: Only return logs since this time, as a UNIX timestamp ++ schema: ++ type: integer ++ default: 0 ++ - name: until ++ in: query ++ description: Only return logs before this time, as a UNIX timestamp ++ schema: ++ type: integer ++ default: 0 ++ - name: timestamps ++ in: query ++ description: Add timestamps to every log line ++ schema: ++ type: boolean ++ default: false ++ - name: tail ++ in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. +- type: "string" +- default: "all" +- tags: ["Container"] ++ schema: ++ type: string ++ default: all ++ tags: ++ - Container + /containers/{id}/changes: + get: +- summary: "Get changes on a container’s filesystem" ++ summary: Get changes on a container’s filesystem + description: | + Returns which files in a container's filesystem have been added, deleted, + or modified. The `Kind` of modification can be one of: +@@ -8745,72 +802,87 @@ + - `0`: Modified ("C") + - `1`: Added ("A") + - `2`: Deleted ("D") +- operationId: "ContainerChanges" +- produces: ["application/json"] ++ operationId: ContainerChanges + responses: +- 200: +- description: "The list of changes" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/FilesystemChange" +- examples: ++ "200": ++ description: The list of changes ++ content: + application/json: +- - Path: "/dev" +- Kind: 0 +- - Path: "/dev/kmsg" +- Kind: 1 +- - Path: "/test" +- Kind: 1 +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- tags: ["Container"] ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/FilesystemChange" ++ examples: ++ response: ++ value: ++ - Path: /dev ++ Kind: 0 ++ - Path: /dev/kmsg ++ Kind: 1 ++ - Path: /test ++ Kind: 1 ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ tags: ++ - Container + /containers/{id}/export: + get: +- summary: "Export a container" +- description: "Export the contents of a container as a tarball." +- operationId: "ContainerExport" +- produces: +- - "application/octet-stream" +- responses: +- 200: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- tags: ["Container"] ++ summary: Export a container ++ description: Export the contents of a container as a tarball. ++ operationId: ContainerExport ++ responses: ++ "200": ++ description: no error ++ "404": ++ description: no such container ++ content: ++ application/octet-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ tags: ++ - Container + /containers/{id}/stats: + get: +- summary: "Get container stats based on resource usage" ++ summary: Get container stats based on resource usage + description: | + This endpoint returns a live stream of a container’s resource usage + statistics. +@@ -8839,328 +911,405 @@ + * system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage` + * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus` + * CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0` +- operationId: "ContainerStats" +- produces: ["application/json"] ++ operationId: ContainerStats + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/ContainerStatsResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "200": ++ description: no error ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ContainerStatsResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- description: "ID or name of the container" +- type: "string" +- - name: "stream" +- in: "query" ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: stream ++ in: query + description: | + Stream the output. If false, the stats will be output once and then + it will disconnect. +- type: "boolean" +- default: true +- - name: "one-shot" +- in: "query" ++ schema: ++ type: boolean ++ default: true ++ - name: one-shot ++ in: query + description: | + Only get a single stat instead of waiting for 2 cycles. Must be used + with `stream=false`. +- type: "boolean" +- default: false +- tags: ["Container"] ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Container + /containers/{id}/resize: + post: +- summary: "Resize a container TTY" +- description: "Resize the TTY for a container." +- operationId: "ContainerResize" +- consumes: +- - "application/octet-stream" +- produces: +- - "text/plain" +- responses: +- 200: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "cannot resize container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "h" +- in: "query" +- required: true +- description: "Height of the TTY session in characters" +- type: "integer" +- - name: "w" +- in: "query" +- required: true +- description: "Width of the TTY session in characters" +- type: "integer" +- tags: ["Container"] ++ summary: Resize a container TTY ++ description: Resize the TTY for a container. ++ operationId: ContainerResize ++ responses: ++ "200": ++ description: no error ++ "404": ++ description: no such container ++ content: ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: cannot resize container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: h ++ in: query ++ required: true ++ description: Height of the TTY session in characters ++ schema: ++ type: integer ++ - name: w ++ in: query ++ required: true ++ description: Width of the TTY session in characters ++ schema: ++ type: integer ++ tags: ++ - Container + /containers/{id}/start: + post: +- summary: "Start a container" +- operationId: "ContainerStart" ++ summary: Start a container ++ operationId: ContainerStart + responses: +- 204: +- description: "no error" +- 304: +- description: "container already started" +- 400: +- description: "bad parameter, including an invalid checkpoint ID" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "detachKeys" +- in: "query" ++ "204": ++ description: no error ++ "304": ++ description: container already started ++ "400": ++ description: bad parameter, including an invalid checkpoint ID ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: detachKeys ++ in: query + description: | + Override the key sequence for detaching a container. Format is a + single character `[a-Z]` or `ctrl-` where `` is one + of: `a-z`, `@`, `^`, `[`, `,` or `_`. +- type: "string" +- tags: ["Container"] ++ schema: ++ type: string ++ tags: ++ - Container ++ description: Start a container. + /containers/{id}/stop: + post: +- summary: "Stop a container" +- operationId: "ContainerStop" ++ summary: Stop a container ++ operationId: ContainerStop + responses: +- 204: +- description: "no error" +- 304: +- description: "container already stopped" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "signal" +- in: "query" ++ "204": ++ description: no error ++ "304": ++ description: container already stopped ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: signal ++ in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). +- type: "string" +- - name: "t" +- in: "query" +- description: "Number of seconds to wait before killing the container" +- type: "integer" +- tags: ["Container"] ++ schema: ++ type: string ++ - name: t ++ in: query ++ description: Number of seconds to wait before killing the container ++ schema: ++ type: integer ++ tags: ++ - Container ++ description: Stop a container. + /containers/{id}/restart: + post: +- summary: "Restart a container" +- operationId: "ContainerRestart" ++ summary: Restart a container ++ operationId: ContainerRestart + responses: +- 204: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "signal" +- in: "query" ++ "204": ++ description: no error ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: signal ++ in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). +- type: "string" +- - name: "t" +- in: "query" +- description: "Number of seconds to wait before killing the container" +- type: "integer" +- tags: ["Container"] ++ schema: ++ type: string ++ - name: t ++ in: query ++ description: Number of seconds to wait before killing the container ++ schema: ++ type: integer ++ tags: ++ - Container ++ description: Restart a container. + /containers/{id}/kill: + post: +- summary: "Kill a container" ++ summary: Kill a container + description: | + Send a POSIX signal to a container, defaulting to killing to the + container. +- operationId: "ContainerKill" ++ operationId: ContainerKill + responses: +- 204: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "204": ++ description: no error ++ "404": ++ description: no such container ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 409: +- description: "container is not running" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "409": ++ description: container is not running ++ content: + application/json: +- message: "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- description: "ID or name of the container" +- type: "string" +- - name: "signal" +- in: "query" ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: signal ++ in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). +- type: "string" +- default: "SIGKILL" +- tags: ["Container"] ++ schema: ++ type: string ++ default: SIGKILL ++ tags: ++ - Container + /containers/{id}/update: + post: +- summary: "Update a container" ++ summary: Update a container + description: | + Change various configuration options of a container without having to + recreate it. +- operationId: "ContainerUpdate" +- consumes: ["application/json"] +- produces: ["application/json"] ++ operationId: ContainerUpdate + responses: +- 200: +- description: "The container has been updated." +- schema: +- $ref: "#/definitions/ContainerUpdateResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "200": ++ description: The container has been updated. ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ContainerUpdateResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "update" +- in: "body" ++ - name: id ++ in: path + required: true ++ description: ID or name of the container + schema: +- allOf: +- - $ref: "#/definitions/Resources" +- - type: "object" +- properties: +- RestartPolicy: +- $ref: "#/definitions/RestartPolicy" +- example: +- BlkioWeight: 300 +- CpuShares: 512 +- CpuPeriod: 100000 +- CpuQuota: 50000 +- CpuRealtimePeriod: 1000000 +- CpuRealtimeRuntime: 10000 +- CpusetCpus: "0,1" +- CpusetMems: "0" +- Memory: 314572800 +- MemorySwap: 514288000 +- MemoryReservation: 209715200 +- RestartPolicy: +- MaximumRetryCount: 4 +- Name: "on-failure" +- tags: ["Container"] ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/Resources" ++ - type: object ++ properties: ++ RestartPolicy: ++ $ref: "#/components/schemas/RestartPolicy" ++ example: ++ BlkioWeight: 300 ++ CpuShares: 512 ++ CpuPeriod: 100000 ++ CpuQuota: 50000 ++ CpuRealtimePeriod: 1000000 ++ CpuRealtimeRuntime: 10000 ++ CpusetCpus: 0,1 ++ CpusetMems: "0" ++ Memory: 314572800 ++ MemorySwap: 514288000 ++ MemoryReservation: 209715200 ++ RestartPolicy: ++ MaximumRetryCount: 4 ++ Name: on-failure ++ required: true ++ tags: ++ - Container + /containers/{id}/rename: + post: +- summary: "Rename a container" +- operationId: "ContainerRename" ++ summary: Rename a container ++ operationId: ContainerRename + responses: +- 204: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 409: +- description: "name already in use" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "name" +- in: "query" +- required: true +- description: "New name for the container" +- type: "string" +- tags: ["Container"] ++ "204": ++ description: no error ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "409": ++ description: name already in use ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: name ++ in: query ++ required: true ++ description: New name for the container ++ schema: ++ type: string ++ tags: ++ - Container ++ description: Rename a container. + /containers/{id}/pause: + post: +- summary: "Pause a container" ++ summary: Pause a container + description: | + Use the freezer cgroup to suspend all processes in a container. + +@@ -9168,57 +1317,71 @@ + which is observable by the process being suspended. With the freezer + cgroup the process is unaware, and unable to capture, that it is being + suspended, and subsequently resumed. +- operationId: "ContainerPause" ++ operationId: ContainerPause + responses: +- 204: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "204": ++ description: no error ++ "404": ++ description: no such container ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- description: "ID or name of the container" +- type: "string" +- tags: ["Container"] ++ description: ID or name of the container ++ schema: ++ type: string ++ tags: ++ - Container + /containers/{id}/unpause: + post: +- summary: "Unpause a container" +- description: "Resume a container which has been paused." +- operationId: "ContainerUnpause" +- responses: +- 204: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- tags: ["Container"] ++ summary: Unpause a container ++ description: Resume a container which has been paused. ++ operationId: ContainerUnpause ++ responses: ++ "204": ++ description: no error ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ tags: ++ - Container + /containers/{id}/attach: + post: +- summary: "Attach to a container" ++ summary: Attach to a container + description: | + Attach to a container to read its output or send it input. You can attach + to the same container multiple times and you can reattach to containers +@@ -9314,46 +1477,55 @@ + the stream is not multiplexed. The data exchanged over the hijacked + connection is simply the raw data from the process PTY and client's + `stdin`. +- +- operationId: "ContainerAttach" +- produces: +- - "application/vnd.docker.raw-stream" +- - "application/vnd.docker.multiplexed-stream" +- responses: +- 101: +- description: "no error, hints proxy about hijacking" +- 200: +- description: "no error, no upgrade header found" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "detachKeys" +- in: "query" ++ operationId: ContainerAttach ++ responses: ++ "101": ++ description: no error, hints proxy about hijacking ++ "200": ++ description: no error, no upgrade header found ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such container ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: detachKeys ++ in: query + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,` or `_`. +- type: "string" +- - name: "logs" +- in: "query" ++ schema: ++ type: string ++ - name: logs ++ in: query + description: | + Replay previous logs from the container. + +@@ -9363,401 +1535,484 @@ + If `stream` is also enabled, once all the previous output has been + returned, it will seamlessly transition into streaming current + output. +- type: "boolean" +- default: false +- - name: "stream" +- in: "query" ++ schema: ++ type: boolean ++ default: false ++ - name: stream ++ in: query + description: | + Stream attached streams from the time the request was made onwards. +- type: "boolean" +- default: false +- - name: "stdin" +- in: "query" +- description: "Attach to `stdin`" +- type: "boolean" +- default: false +- - name: "stdout" +- in: "query" +- description: "Attach to `stdout`" +- type: "boolean" +- default: false +- - name: "stderr" +- in: "query" +- description: "Attach to `stderr`" +- type: "boolean" +- default: false +- tags: ["Container"] ++ schema: ++ type: boolean ++ default: false ++ - name: stdin ++ in: query ++ description: Attach to `stdin` ++ schema: ++ type: boolean ++ default: false ++ - name: stdout ++ in: query ++ description: Attach to `stdout` ++ schema: ++ type: boolean ++ default: false ++ - name: stderr ++ in: query ++ description: Attach to `stderr` ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Container + /containers/{id}/attach/ws: + get: +- summary: "Attach to a container via a websocket" +- operationId: "ContainerAttachWebsocket" ++ summary: Attach to a container via a websocket ++ operationId: ContainerAttachWebsocket + responses: +- 101: +- description: "no error, hints proxy about hijacking" +- 200: +- description: "no error, no upgrade header found" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "detachKeys" +- in: "query" ++ "101": ++ description: no error, hints proxy about hijacking ++ "200": ++ description: no error, no upgrade header found ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: detachKeys ++ in: query + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,`, or `_`. +- type: "string" +- - name: "logs" +- in: "query" +- description: "Return logs" +- type: "boolean" +- default: false +- - name: "stream" +- in: "query" +- description: "Return stream" +- type: "boolean" +- default: false +- - name: "stdin" +- in: "query" +- description: "Attach to `stdin`" +- type: "boolean" +- default: false +- - name: "stdout" +- in: "query" +- description: "Attach to `stdout`" +- type: "boolean" +- default: false +- - name: "stderr" +- in: "query" +- description: "Attach to `stderr`" +- type: "boolean" +- default: false +- tags: ["Container"] ++ schema: ++ type: string ++ - name: logs ++ in: query ++ description: Return logs ++ schema: ++ type: boolean ++ default: false ++ - name: stream ++ in: query ++ description: Return stream ++ schema: ++ type: boolean ++ default: false ++ - name: stdin ++ in: query ++ description: Attach to `stdin` ++ schema: ++ type: boolean ++ default: false ++ - name: stdout ++ in: query ++ description: Attach to `stdout` ++ schema: ++ type: boolean ++ default: false ++ - name: stderr ++ in: query ++ description: Attach to `stderr` ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Container ++ description: Attach to a container via a websocket. + /containers/{id}/wait: + post: +- summary: "Wait for a container" +- description: "Block until a container stops, then returns the exit code." +- operationId: "ContainerWait" +- produces: ["application/json"] +- responses: +- 200: +- description: "The container has exit." +- schema: +- $ref: "#/definitions/ContainerWaitResponse" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "condition" +- in: "query" ++ summary: Wait for a container ++ description: Block until a container stops, then returns the exit code. ++ operationId: ContainerWait ++ responses: ++ "200": ++ description: The container has exit. ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ContainerWaitResponse" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: condition ++ in: query + description: | + Wait until a container state reaches the given condition. + + Defaults to `not-running` if omitted or empty. +- type: "string" +- enum: +- - "not-running" +- - "next-exit" +- - "removed" +- default: "not-running" +- tags: ["Container"] ++ schema: ++ type: string ++ enum: ++ - not-running ++ - next-exit ++ - removed ++ default: not-running ++ tags: ++ - Container + /containers/{id}: + delete: +- summary: "Remove a container" +- operationId: "ContainerDelete" ++ summary: Remove a container ++ operationId: ContainerDelete + responses: +- 204: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 409: +- description: "conflict" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: | +- You cannot remove a running container: c2ada9df5af8. Stop the +- container before attempting removal or force remove +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "v" +- in: "query" +- description: "Remove anonymous volumes associated with the container." +- type: "boolean" +- default: false +- - name: "force" +- in: "query" +- description: "If the container is running, kill it before removing it." +- type: "boolean" +- default: false +- - name: "link" +- in: "query" +- description: "Remove the specified link associated with the container." +- type: "boolean" +- default: false +- tags: ["Container"] ++ "204": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "409": ++ description: conflict ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: | ++ You cannot remove a running container: c2ada9df5af8. Stop the ++ container before attempting removal or force remove ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: v ++ in: query ++ description: Remove anonymous volumes associated with the container. ++ schema: ++ type: boolean ++ default: false ++ - name: force ++ in: query ++ description: If the container is running, kill it before removing it. ++ schema: ++ type: boolean ++ default: false ++ - name: link ++ in: query ++ description: Remove the specified link associated with the container. ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Container ++ description: Remove a container. + /containers/{id}/archive: + head: +- summary: "Get information about files in a container" ++ summary: Get information about files in a container + description: | + A response header `X-Docker-Container-Path-Stat` is returned, containing + a base64 - encoded JSON object with some filesystem header information + about the path. +- operationId: "ContainerArchiveInfo" ++ operationId: ContainerArchiveInfo + responses: +- 200: +- description: "no error" ++ "200": ++ description: no error + headers: + X-Docker-Container-Path-Stat: +- type: "string" + description: | + A base64 - encoded JSON object with some filesystem header + information about the path +- 400: +- description: "Bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "Container or path does not exist" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" ++ schema: ++ type: string ++ "400": ++ description: Bad parameter ++ "404": ++ description: Container or path does not exist ++ "500": ++ description: Server error ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: path ++ in: query + required: true +- description: "ID or name of the container" +- type: "string" +- - name: "path" +- in: "query" +- required: true +- description: "Resource in the container’s filesystem to archive." +- type: "string" +- tags: ["Container"] +- get: +- summary: "Get an archive of a filesystem resource in a container" +- description: "Get a tar archive of a resource in the filesystem of container id." +- operationId: "ContainerArchive" +- produces: ["application/x-tar"] +- responses: +- 200: +- description: "no error" +- 400: +- description: "Bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "Container or path does not exist" ++ description: Resource in the container’s filesystem to archive. + schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ type: string ++ tags: ++ - Container ++ get: ++ summary: Get an archive of a filesystem resource in a container ++ description: Get a tar archive of a resource in the filesystem of container id. ++ operationId: ContainerArchive ++ responses: ++ "200": ++ description: no error ++ content: ++ application/x-tar: {} ++ "400": ++ description: Bad parameter ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: Container or path does not exist ++ content: ++ application/x-tar: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- description: "ID or name of the container" +- type: "string" +- - name: "path" +- in: "query" ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: path ++ in: query + required: true +- description: "Resource in the container’s filesystem to archive." +- type: "string" +- tags: ["Container"] ++ description: Resource in the container’s filesystem to archive. ++ schema: ++ type: string ++ tags: ++ - Container + put: +- summary: "Extract an archive of files or folders to a directory in a container" ++ summary: Extract an archive of files or folders to a directory in a container + description: | + Upload a tar archive to be extracted to a path in the filesystem of container id. + `path` parameter is asserted to be a directory. If it exists as a file, 400 error + will be returned with message "not a directory". +- operationId: "PutContainerArchive" +- consumes: ["application/x-tar", "application/octet-stream"] ++ operationId: PutContainerArchive + responses: +- 200: +- description: "The content was extracted successfully" +- 400: +- description: "Bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "200": ++ description: The content was extracted successfully ++ "400": ++ description: Bad parameter ++ content: + application/json: +- message: "not a directory" +- 403: +- description: "Permission denied, the volume or container rootfs is marked as read-only." +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "No such container or path does not exist inside the container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: not a directory ++ "403": ++ description: Permission denied, the volume or container rootfs is marked as read-only. ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: No such container or path does not exist inside the container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- description: "ID or name of the container" +- type: "string" +- - name: "path" +- in: "query" ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: path ++ in: query + required: true + description: "Path to a directory in the container to extract the archive’s contents into. " +- type: "string" +- - name: "noOverwriteDirNonDir" +- in: "query" ++ schema: ++ type: string ++ - name: noOverwriteDirNonDir ++ in: query + description: | + If `1`, `true`, or `True` then it will be an error if unpacking the + given content would cause an existing directory to be replaced with + a non-directory and vice versa. +- type: "string" +- - name: "copyUIDGID" +- in: "query" ++ schema: ++ type: string ++ - name: copyUIDGID ++ in: query + description: | + If `1`, `true`, then it will copy UID/GID maps to the dest file or + dir +- type: "string" +- - name: "inputStream" +- in: "body" +- required: true +- description: | +- The input stream must be a tar archive compressed with one of the +- following algorithms: `identity` (no compression), `gzip`, `bzip2`, +- or `xz`. +- schema: +- type: "string" +- format: "binary" +- tags: ["Container"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/x-tar: ++ schema: ++ type: string ++ format: binary ++ application/octet-stream: ++ schema: ++ type: string ++ format: binary ++ description: | ++ The input stream must be a tar archive compressed with one of the ++ following algorithms: `identity` (no compression), `gzip`, `bzip2`, ++ or `xz`. ++ required: true ++ tags: ++ - Container + /containers/prune: + post: +- summary: "Delete stopped containers" +- produces: +- - "application/json" +- operationId: "ContainerPrune" ++ summary: Delete stopped containers ++ operationId: ContainerPrune + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels. +- type: "string" +- responses: +- 200: +- description: "No error" +- schema: +- type: "object" +- title: "ContainerPruneResponse" +- properties: +- ContainersDeleted: +- description: "Container IDs that were deleted" +- type: "array" +- items: +- type: "string" +- SpaceReclaimed: +- description: "Disk space reclaimed in bytes" +- type: "integer" +- format: "int64" +- 500: +- description: "Server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Container"] ++ type: string ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: ContainerPruneResponse ++ properties: ++ ContainersDeleted: ++ description: Container IDs that were deleted ++ type: array ++ items: ++ type: string ++ SpaceReclaimed: ++ description: Disk space reclaimed in bytes ++ type: integer ++ format: int64 ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Container ++ description: Delete stopped containers. + /images/json: + get: +- summary: "List Images" +- description: "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image." +- operationId: "ImageList" +- produces: +- - "application/json" +- responses: +- 200: +- description: "Summary image data for the images matching the query" ++ summary: List Images ++ description: Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image. ++ operationId: ImageList ++ responses: ++ "200": ++ description: Summary image data for the images matching the query ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/ImageSummary" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: all ++ in: query ++ description: Show all images. Only images from a final layer (no children) are shown by default. + schema: +- type: "array" +- items: +- $ref: "#/definitions/ImageSummary" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "all" +- in: "query" +- description: "Show all images. Only images from a final layer (no children) are shown by default." +- type: "boolean" +- default: false +- - name: "filters" +- in: "query" ++ type: boolean ++ default: false ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the images list. +@@ -9770,31 +2025,37 @@ + - `reference`=(`[:]`) + - `since`=(`[:]`, `` or ``) + - `until=` +- type: "string" +- - name: "shared-size" +- in: "query" +- description: "Compute and show shared size as a `SharedSize` field on each image." +- type: "boolean" +- default: false +- - name: "digests" +- in: "query" +- description: "Show digest information as a `RepoDigests` field on each image." +- type: "boolean" +- default: false +- - name: "manifests" +- in: "query" +- description: "Include `Manifests` in the image summary." +- type: "boolean" +- default: false +- - name: "identity" +- in: "query" +- description: "Include `Identity` in each manifest summary. Requires `manifests=1`." +- type: "boolean" +- default: false +- tags: ["Image"] ++ schema: ++ type: string ++ - name: shared-size ++ in: query ++ description: Compute and show shared size as a `SharedSize` field on each image. ++ schema: ++ type: boolean ++ default: false ++ - name: digests ++ in: query ++ description: Show digest information as a `RepoDigests` field on each image. ++ schema: ++ type: boolean ++ default: false ++ - name: manifests ++ in: query ++ description: Include `Manifests` in the image summary. ++ schema: ++ type: boolean ++ default: false ++ - name: identity ++ in: query ++ description: Include `Identity` in each manifest summary. Requires `manifests=1`. ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Image + /build: + post: +- summary: "Build an image" ++ summary: Build an image + description: | + Build an image from a tar archive with a `Dockerfile` in it. + +@@ -9803,136 +2064,142 @@ + The Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output. + + The build is canceled if the client drops the connection by quitting or being killed. +- operationId: "ImageBuild" +- consumes: +- - "application/octet-stream" +- produces: +- - "application/json" +- parameters: +- - name: "inputStream" +- in: "body" +- description: "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." +- schema: +- type: "string" +- format: "binary" +- - name: "dockerfile" +- in: "query" +- description: "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`." +- type: "string" +- default: "Dockerfile" +- - name: "t" +- in: "query" +- description: "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters." +- type: "string" +- - name: "extrahosts" +- in: "query" +- description: "Extra hosts to add to /etc/hosts" +- type: "string" +- - name: "remote" +- in: "query" +- description: "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball." +- type: "string" +- - name: "q" +- in: "query" +- description: "Suppress verbose build output." +- type: "boolean" +- default: false +- - name: "nocache" +- in: "query" +- description: "Do not use the cache when building the image." +- type: "boolean" +- default: false +- - name: "cachefrom" +- in: "query" +- description: "JSON array of images used for build cache resolution." +- type: "string" +- - name: "pull" +- in: "query" +- description: "Attempt to pull the image even if an older image exists locally." +- type: "string" +- - name: "rm" +- in: "query" +- description: "Remove intermediate containers after a successful build." +- type: "boolean" +- default: true +- - name: "forcerm" +- in: "query" +- description: "Always remove intermediate containers, even upon failure." +- type: "boolean" +- default: false +- - name: "memory" +- in: "query" +- description: "Set memory limit for build." +- type: "integer" +- format: "int64" +- - name: "memswap" +- in: "query" +- description: "Total memory (memory + swap). Set as `-1` to disable swap." +- type: "integer" +- format: "int64" +- - name: "cpushares" +- in: "query" +- description: "CPU shares (relative weight)." +- type: "integer" +- format: "int64" +- - name: "cpusetcpus" +- in: "query" +- description: "CPUs in which to allow execution (e.g., `0-3`, `0,1`)." +- type: "string" +- - name: "cpuperiod" +- in: "query" +- description: "The length of a CPU period in microseconds." +- type: "integer" +- format: "int64" +- - name: "cpuquota" +- in: "query" +- description: "Microseconds of CPU time that the container can get in a CPU period." +- type: "integer" +- format: "int64" +- - name: "buildargs" +- in: "query" +- description: > +- JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker +- uses the buildargs as the environment context for commands run via the `Dockerfile` RUN +- instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for +- passing secret values. +- +- +- For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the +- query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded. ++ operationId: ImageBuild ++ parameters: ++ - name: dockerfile ++ in: query ++ description: Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`. ++ schema: ++ type: string ++ default: Dockerfile ++ - name: t ++ in: query ++ description: A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters. ++ schema: ++ type: string ++ - name: extrahosts ++ in: query ++ description: Extra hosts to add to /etc/hosts ++ schema: ++ type: string ++ - name: remote ++ in: query ++ description: A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball. ++ schema: ++ type: string ++ - name: q ++ in: query ++ description: Suppress verbose build output. ++ schema: ++ type: boolean ++ default: false ++ - name: nocache ++ in: query ++ description: Do not use the cache when building the image. ++ schema: ++ type: boolean ++ default: false ++ - name: cachefrom ++ in: query ++ description: JSON array of images used for build cache resolution. ++ schema: ++ type: string ++ - name: pull ++ in: query ++ description: Attempt to pull the image even if an older image exists locally. ++ schema: ++ type: string ++ - name: rm ++ in: query ++ description: Remove intermediate containers after a successful build. ++ schema: ++ type: boolean ++ default: true ++ - name: forcerm ++ in: query ++ description: Always remove intermediate containers, even upon failure. ++ schema: ++ type: boolean ++ default: false ++ - name: memory ++ in: query ++ description: Set memory limit for build. ++ schema: ++ type: integer ++ format: int64 ++ - name: memswap ++ in: query ++ description: Total memory (memory + swap). Set as `-1` to disable swap. ++ schema: ++ type: integer ++ format: int64 ++ - name: cpushares ++ in: query ++ description: CPU shares (relative weight). ++ schema: ++ type: integer ++ format: int64 ++ - name: cpusetcpus ++ in: query ++ description: CPUs in which to allow execution (e.g., `0-3`, `0,1`). ++ schema: ++ type: string ++ - name: cpuperiod ++ in: query ++ description: The length of a CPU period in microseconds. ++ schema: ++ type: integer ++ format: int64 ++ - name: cpuquota ++ in: query ++ description: Microseconds of CPU time that the container can get in a CPU period. ++ schema: ++ type: integer ++ format: int64 ++ - name: buildargs ++ in: query ++ description: | ++ JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values. + ++ For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded. + + [Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg) +- type: "string" +- - name: "shmsize" +- in: "query" +- description: "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB." +- type: "integer" +- format: "int64" +- - name: "squash" +- in: "query" +- description: "Squash the resulting images layers into a single layer. *(Experimental release only.)*" +- type: "boolean" +- - name: "labels" +- in: "query" +- description: "Arbitrary key/value labels to set on the image, as a JSON map of string pairs." +- type: "string" +- - name: "networkmode" +- in: "query" ++ schema: ++ type: string ++ - name: shmsize ++ in: query ++ description: Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. ++ schema: ++ type: integer ++ format: int64 ++ - name: squash ++ in: query ++ description: Squash the resulting images layers into a single layer. *(Experimental release only.)* ++ schema: ++ type: boolean ++ - name: labels ++ in: query ++ description: Arbitrary key/value labels to set on the image, as a JSON map of string pairs. ++ schema: ++ type: string ++ - name: networkmode ++ in: query + description: | + Sets the networking mode for the run commands during build. Supported + standard values are: `bridge`, `host`, `none`, and `container:`. + Any other value is taken as a custom network's name or ID to which this + container should connect to. +- type: "string" +- - name: "Content-type" +- in: "header" +- type: "string" +- enum: +- - "application/x-tar" +- default: "application/x-tar" +- - name: "X-Registry-Config" +- in: "header" ++ schema: ++ type: string ++ - name: Content-type ++ in: header ++ schema: ++ type: string ++ enum: ++ - application/x-tar ++ default: application/x-tar ++ - name: X-Registry-Config ++ in: header + description: | + This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to. + +@@ -9952,19 +2219,22 @@ + ``` + + Only the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API. +- type: "string" +- - name: "platform" +- in: "query" +- description: "Platform in the format os[/arch[/variant]]" +- type: "string" +- default: "" +- - name: "target" +- in: "query" +- description: "Target build stage" +- type: "string" +- default: "" +- - name: "outputs" +- in: "query" ++ schema: ++ type: string ++ - name: platform ++ in: query ++ description: Platform in the format os[/arch[/variant]] ++ schema: ++ type: string ++ default: "" ++ - name: target ++ in: query ++ description: Target build stage ++ schema: ++ type: string ++ default: "" ++ - name: outputs ++ in: query + description: | + BuildKit output configuration in the format of a stringified JSON array of objects. + Each object must have two top-level properties: `Type` and `Attrs`. +@@ -9977,59 +2247,76 @@ + ``` + [{"Type":"moby","Attrs":{"type":"image","force-compression":"true","compression":"zstd"}}] + ``` +- type: "string" +- default: "" +- - name: "version" +- in: "query" +- type: "string" +- default: "1" +- enum: ["1", "2"] ++ schema: ++ type: string ++ default: "" ++ - name: version ++ in: query + description: | + Version of the builder backend to use. + + - `1` is the first generation classic (deprecated) builder in the Docker daemon (default) + - `2` is [BuildKit](https://github.com/moby/buildkit) +- responses: +- 200: +- description: "no error" +- 400: +- description: "Bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Image"] ++ type: string ++ enum: ++ - "1" ++ - "2" ++ default: "1" ++ requestBody: ++ content: ++ application/octet-stream: ++ schema: ++ type: string ++ format: binary ++ description: "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." ++ responses: ++ "200": ++ description: no error ++ "400": ++ description: Bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Image + /build/prune: + post: +- summary: "Delete builder cache" +- produces: +- - "application/json" +- operationId: "BuildPrune" +- parameters: +- - name: "reserved-space" +- in: "query" +- description: "Amount of disk space in bytes to keep for cache" +- type: "integer" +- format: "int64" +- - name: "max-used-space" +- in: "query" +- description: "Maximum amount of disk space allowed to keep for cache" +- type: "integer" +- format: "int64" +- - name: "min-free-space" +- in: "query" +- description: "Target amount of free disk space after pruning" +- type: "integer" +- format: "int64" +- - name: "all" +- in: "query" +- type: "boolean" +- description: "Remove all types of build cache" +- - name: "filters" +- in: "query" +- type: "string" ++ summary: Delete builder cache ++ operationId: BuildPrune ++ parameters: ++ - name: reserved-space ++ in: query ++ description: Amount of disk space in bytes to keep for cache ++ schema: ++ type: integer ++ format: int64 ++ - name: max-used-space ++ in: query ++ description: Maximum amount of disk space allowed to keep for cache ++ schema: ++ type: integer ++ format: int64 ++ - name: min-free-space ++ in: query ++ description: Target amount of free disk space after pruning ++ schema: ++ type: integer ++ format: int64 ++ - name: all ++ in: query ++ description: Remove all types of build cache ++ schema: ++ type: boolean ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the list of build cache objects. +@@ -10044,51 +2331,58 @@ + - `inuse` + - `shared` + - `private` +- responses: +- 200: +- description: "No error" + schema: +- type: "object" +- title: "BuildPruneResponse" +- properties: +- CachesDeleted: +- type: "array" +- items: +- description: "ID of build cache object" +- type: "string" +- SpaceReclaimed: +- description: "Disk space reclaimed in bytes" +- type: "integer" +- format: "int64" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Image"] ++ type: string ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: BuildPruneResponse ++ properties: ++ CachesDeleted: ++ type: array ++ items: ++ description: ID of build cache object ++ type: string ++ SpaceReclaimed: ++ description: Disk space reclaimed in bytes ++ type: integer ++ format: int64 ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Image ++ description: Delete builder cache. + /images/create: + post: +- summary: "Create an image" +- description: "Pull or import an image." +- operationId: "ImageCreate" +- consumes: +- - "text/plain" +- - "application/octet-stream" +- produces: +- - "application/json" +- responses: +- 200: +- description: "no error" +- 404: +- description: "repository does not exist or no read access" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ summary: Create an image ++ description: Pull or import an image. ++ operationId: ImageCreate ++ responses: ++ "200": ++ description: no error ++ "404": ++ description: repository does not exist or no read access ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "fromImage" +- in: "query" ++ - name: fromImage ++ in: query + description: | + Name of the image to pull. If the name includes a tag or digest, specific behavior applies: + +@@ -10096,39 +2390,39 @@ + - If both `fromImage` and `tag` are provided, `tag` takes precedence. + - If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored. + - If neither a tag nor digest is specified, all tags are pulled. +- type: "string" +- - name: "fromSrc" +- in: "query" +- description: "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image." +- type: "string" +- - name: "repo" +- in: "query" +- description: "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image." +- type: "string" +- - name: "tag" +- in: "query" +- description: "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled." +- type: "string" +- - name: "message" +- in: "query" +- description: "Set commit message for imported image." +- type: "string" +- - name: "inputImage" +- in: "body" +- description: "Image content if the value `-` has been specified in fromSrc query parameter" + schema: +- type: "string" +- required: false +- - name: "X-Registry-Auth" +- in: "header" ++ type: string ++ - name: fromSrc ++ in: query ++ description: Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image. ++ schema: ++ type: string ++ - name: repo ++ in: query ++ description: Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image. ++ schema: ++ type: string ++ - name: tag ++ in: query ++ description: Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled. ++ schema: ++ type: string ++ - name: message ++ in: query ++ description: Set commit message for imported image. ++ schema: ++ type: string ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" +- - name: "changes" +- in: "query" ++ schema: ++ type: string ++ - name: changes ++ in: query + description: | + Apply `Dockerfile` instructions to the image that is created, + for example: `changes=ENV DEBUG=true`. +@@ -10136,11 +2430,14 @@ + + Supported `Dockerfile` instructions: + `CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR` +- type: "array" +- items: +- type: "string" +- - name: "platform" +- in: "query" ++ style: form ++ explode: false ++ schema: ++ type: array ++ items: ++ type: string ++ - name: platform ++ in: query + description: | + Platform in the format os[/arch[/variant]]. + +@@ -10157,51 +2454,68 @@ + this option sets the platform information for the imported image. If + the option is not set, the host's native OS and Architecture are used + for the imported image. +- type: "string" +- default: "" +- tags: ["Image"] ++ schema: ++ type: string ++ default: "" ++ requestBody: ++ content: ++ text/plain: ++ schema: ++ type: string ++ application/octet-stream: ++ schema: ++ type: string ++ description: Image content if the value `-` has been specified in fromSrc query parameter ++ tags: ++ - Image + /images/{name}/json: + get: +- summary: "Inspect an image" +- description: "Return low-level information about an image." +- operationId: "ImageInspect" +- produces: +- - "application/json" +- responses: +- 200: +- description: "No error" +- schema: +- $ref: "#/definitions/ImageInspect" +- 404: +- description: "No such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such image: someimage (tag: latest)" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "Image name or id" +- type: "string" ++ summary: Inspect an image ++ description: Return low-level information about an image. ++ operationId: ImageInspect ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ImageInspect" ++ "404": ++ description: No such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such image: someimage (tag: latest)" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: Image name or id + required: true +- - name: "manifests" +- in: "query" ++ schema: ++ type: string ++ - name: manifests ++ in: query + description: |- + Include Manifests in the image summary. + + The `manifests` and `platform` options are mutually exclusive, and + an error is produced if both are set. +- type: "boolean" +- default: false + required: false +- - name: "platform" +- type: "string" +- in: "query" ++ schema: ++ type: boolean ++ default: false ++ - name: platform ++ in: query + description: |- + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, +@@ -10216,10 +2530,13 @@ + an error is produced if both are set. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- tags: ["Image"] ++ schema: ++ type: string ++ tags: ++ - Image + /images/{name}/attestations: + get: +- summary: "Get attestation statements for an image" ++ summary: Get attestation statements for an image + description: | + Return the in-toto attestation statements attached to the image for the + given platform. The daemon locates the attestation manifest(s) that +@@ -10228,47 +2545,52 @@ + metadata. + + If the image has no attestations an empty array is returned. +- operationId: "ImageAttestations" +- produces: +- - "application/json" ++ operationId: ImageAttestations + responses: +- 200: +- description: "No error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/AttestationStatement" +- 400: +- description: "Bad parameter (e.g. malformed `platform` value)" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "No such image, or no manifest found for the requested platform" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 501: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/AttestationStatement" ++ "400": ++ description: Bad parameter (e.g. malformed `platform` value) ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: No such image, or no manifest found for the requested platform ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "501": + description: | + The daemon's image backend does not support attestations. This + is returned by the legacy (graphdriver) image store, which does + not preserve OCI image indexes. +- schema: +- $ref: "#/definitions/ErrorResponse" ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" +- description: "Image name or id" +- type: "string" +- required: true +- - name: "platform" +- type: "array" +- items: +- type: "string" +- collectionFormat: "multi" +- in: "query" ++ - name: name ++ in: path ++ description: Image name or id ++ required: true ++ schema: ++ type: string ++ - name: platform ++ in: query + description: |- + JSON-encoded OCI platform to select the image variant whose + attestations to return. +@@ -10281,12 +2603,13 @@ + + Example: `{"os": "linux", "architecture": "amd64"}` + required: false +- - name: "type" +- type: "array" +- items: +- type: "string" +- collectionFormat: "multi" +- in: "query" ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ - name: type ++ in: query + description: |- + In-toto predicate type URI to filter returned statements. May be + repeated to accept any of several predicate types. If omitted, all +@@ -10294,71 +2617,84 @@ + + Example: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document` + required: false +- - name: "statement" +- type: "boolean" +- in: "query" ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ - name: statement ++ in: query + description: |- + Include the verbatim in-toto statement body in each returned + entry. Defaults to false; when omitted or false, only the + descriptor and predicate type are returned and statement blobs + are not read. +- default: false + required: false +- tags: ["Image"] ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Image + /images/{name}/history: + get: +- summary: "Get the history of an image" +- description: "Return parent layers of an image." +- operationId: "ImageHistory" +- produces: ["application/json"] +- responses: +- 200: +- description: "List of image layers" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/ImageHistoryResponseItem" +- examples: ++ summary: Get the history of an image ++ description: Return parent layers of an image. ++ operationId: ImageHistory ++ responses: ++ "200": ++ description: List of image layers ++ content: + application/json: +- - Id: "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710" +- Created: 1398108230 +- CreatedBy: "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /" +- Tags: +- - "ubuntu:lucid" +- - "ubuntu:10.04" +- Size: 182964289 +- Comment: "" +- - Id: "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8" +- Created: 1398108222 +- CreatedBy: "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/" +- Tags: [] +- Size: 0 +- Comment: "" +- - Id: "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158" +- Created: 1371157430 +- CreatedBy: "" +- Tags: +- - "scratch12:latest" +- - "scratch:latest" +- Size: 0 +- Comment: "Imported from -" +- 404: +- description: "No such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "Image name or ID" +- type: "string" +- required: true +- - name: "platform" +- type: "string" +- in: "query" ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/ImageHistoryResponseItem" ++ examples: ++ response: ++ value: ++ - Id: 3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710 ++ Created: 1398108230 ++ CreatedBy: "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /" ++ Tags: ++ - ubuntu:lucid ++ - ubuntu:10.04 ++ Size: 182964289 ++ Comment: "" ++ - Id: 6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8 ++ Created: 1398108222 ++ CreatedBy: "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/" ++ Tags: [] ++ Size: 0 ++ Comment: "" ++ - Id: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158 ++ Created: 1371157430 ++ CreatedBy: "" ++ Tags: ++ - scratch12:latest ++ - scratch:latest ++ Size: 0 ++ Comment: Imported from - ++ "404": ++ description: No such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: Image name or ID ++ required: true ++ schema: ++ type: string ++ - name: platform ++ in: query + description: | + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, +@@ -10370,10 +2706,13 @@ + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- tags: ["Image"] ++ schema: ++ type: string ++ tags: ++ - Image + /images/{name}/push: + post: +- summary: "Push an image" ++ summary: Push an image + description: | + Push an image to a registry. + +@@ -10382,23 +2721,25 @@ + `registry.example.com/myimage:latest`. + + The push is cancelled if the HTTP connection is closed. +- operationId: "ImagePush" +- consumes: +- - "application/octet-stream" +- responses: +- 200: +- description: "No error" +- 404: +- description: "No such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ operationId: ImagePush ++ responses: ++ "200": ++ description: No error ++ "404": ++ description: No such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + Name of the image to push. For example, `registry.example.com/myimage`. + The image must be present in the local image store with the same name. +@@ -10408,18 +2749,19 @@ + considered equivalent to `registry.example.com/myimage`. + + Use the `tag` parameter to specify the tag to push. +- type: "string" + required: true +- - name: "tag" +- in: "query" ++ schema: ++ type: string ++ - name: tag ++ in: query + description: | + Tag of the image to push. For example, `latest`. If no tag is provided, + all tags of the given image that are present in the local image store + are pushed. +- type: "string" +- - name: "platform" +- type: "string" +- in: "query" ++ schema: ++ type: string ++ - name: platform ++ in: query + description: | + JSON-encoded OCI platform to select the platform-variant to push. + If not provided, all available variants will attempt to be pushed. +@@ -10430,206 +2772,242 @@ + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- - name: "X-Registry-Auth" +- in: "header" ++ schema: ++ type: string ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" + required: true +- tags: ["Image"] ++ schema: ++ type: string ++ tags: ++ - Image + /images/{name}/tag: + post: +- summary: "Tag an image" ++ summary: Tag an image + description: | + Create a tag that refers to a source image. + + This creates an additional reference (tag) to the source image. The tag + can include a different repository name and/or tag. If the repository + or tag already exists, it will be overwritten. +- operationId: "ImageTag" ++ operationId: ImageTag + responses: +- 201: +- description: "No error" +- 400: +- description: "Bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "No such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 409: +- description: "Conflict" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "Image name or ID to tag." +- type: "string" +- required: true +- - name: "repo" +- in: "query" +- description: "The repository to tag in. For example, `someuser/someimage`." +- type: "string" +- - name: "tag" +- in: "query" +- description: "The name of the new tag." +- type: "string" +- tags: ["Image"] ++ "201": ++ description: No error ++ "400": ++ description: Bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: No such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "409": ++ description: Conflict ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: Image name or ID to tag. ++ required: true ++ schema: ++ type: string ++ - name: repo ++ in: query ++ description: The repository to tag in. For example, `someuser/someimage`. ++ schema: ++ type: string ++ - name: tag ++ in: query ++ description: The name of the new tag. ++ schema: ++ type: string ++ tags: ++ - Image + /images/{name}: + delete: +- summary: "Remove an image" ++ summary: Remove an image + description: | + Remove an image, along with any untagged parent images that were + referenced by that image. + + Images can't be removed if they have descendant images, are being + used by a running container or are being used by a build. +- operationId: "ImageDelete" +- produces: ["application/json"] ++ operationId: ImageDelete + responses: +- 200: +- description: "The image was deleted successfully" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/ImageDeleteResponseItem" +- examples: ++ "200": ++ description: The image was deleted successfully ++ content: + application/json: +- - Untagged: "3e2f21a89f" +- - Deleted: "3e2f21a89f" +- - Deleted: "53b4f83ac9" +- 404: +- description: "No such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 409: +- description: "Conflict" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "Image name or ID" +- type: "string" +- required: true +- - name: "force" +- in: "query" +- description: "Remove the image even if it is being used by stopped containers or has other tags" +- type: "boolean" +- default: false +- - name: "noprune" +- in: "query" +- description: "Do not delete untagged parent images" +- type: "boolean" +- default: false +- - name: "platforms" +- in: "query" ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/ImageDeleteResponseItem" ++ examples: ++ response: ++ value: ++ - Untagged: 3e2f21a89f ++ - Deleted: 3e2f21a89f ++ - Deleted: 53b4f83ac9 ++ "404": ++ description: No such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "409": ++ description: Conflict ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: Image name or ID ++ required: true ++ schema: ++ type: string ++ - name: force ++ in: query ++ description: Remove the image even if it is being used by stopped containers or has other tags ++ schema: ++ type: boolean ++ default: false ++ - name: noprune ++ in: query ++ description: Do not delete untagged parent images ++ schema: ++ type: boolean ++ default: false ++ - name: platforms ++ in: query + description: | + Select platform-specific content to delete. + Multiple values are accepted. + Each platform is a OCI platform encoded as a JSON string. +- type: "array" +- items: +- # This should be OCIPlatform +- # but $ref is not supported for array in query in Swagger 2.0 +- # $ref: "#/definitions/OCIPlatform" +- type: "string" +- tags: ["Image"] +- /images/search: +- get: +- summary: "Search images" +- description: "Search for an image on Docker Hub." +- operationId: "ImageSearch" +- produces: +- - "application/json" +- responses: +- 200: +- description: "No error" ++ style: form ++ explode: false + schema: +- type: "array" ++ type: array + items: +- type: "object" +- title: "ImageSearchResponseItem" +- properties: +- description: +- type: "string" +- is_official: +- type: "boolean" +- is_automated: +- description: | +- Whether this repository has automated builds enabled. ++ type: string ++ tags: ++ - Image ++ /images/search: ++ get: ++ summary: Search images ++ description: Search for an image on Docker Hub. ++ operationId: ImageSearch ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ type: object ++ title: ImageSearchResponseItem ++ properties: ++ description: ++ type: string ++ is_official: ++ type: boolean ++ is_automated: ++ description: | ++ Whether this repository has automated builds enabled. + +-


+ +- > **Deprecated**: This field is deprecated and will always be "false". +- type: "boolean" +- example: false +- name: +- type: "string" +- star_count: +- type: "integer" +- examples: +- application/json: +- - description: "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!" +- is_official: true +- is_automated: false +- name: "alpine" +- star_count: 10093 +- - description: "Busybox base image." +- is_official: true +- is_automated: false +- name: "Busybox base image." +- star_count: 3037 +- - description: "The PostgreSQL object-relational database system provides reliability and data integrity." +- is_official: true +- is_automated: false +- name: "postgres" +- star_count: 12408 +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "term" +- in: "query" +- description: "Term to search" +- type: "string" +- required: true +- - name: "limit" +- in: "query" +- description: "Maximum number of results to return" +- type: "integer" +- - name: "filters" +- in: "query" ++ ++ ++ ++ ++ > **Deprecated**: This field is deprecated and will always be "false". ++ type: boolean ++ example: false ++ name: ++ type: string ++ star_count: ++ type: integer ++ examples: ++ response: ++ value: ++ - description: A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size! ++ is_official: true ++ is_automated: false ++ name: alpine ++ star_count: 10093 ++ - description: Busybox base image. ++ is_official: true ++ is_automated: false ++ name: Busybox base image. ++ star_count: 3037 ++ - description: The PostgreSQL object-relational database system provides reliability and data integrity. ++ is_official: true ++ is_automated: false ++ name: postgres ++ star_count: 12408 ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: term ++ in: query ++ description: Term to search ++ required: true ++ schema: ++ type: string ++ - name: limit ++ in: query ++ description: Maximum number of results to return ++ schema: ++ type: integer ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters: + + - `is-official=(true|false)` + - `stars=` Matches images that has at least 'number' stars. +- type: "string" +- tags: ["Image"] ++ schema: ++ type: string ++ tags: ++ - Image + /images/prune: + post: +- summary: "Delete unused images" +- produces: +- - "application/json" +- operationId: "ImagePrune" ++ summary: Delete unused images ++ operationId: ImagePrune + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters: + +@@ -10638,109 +3016,125 @@ + (or `0`), all unused images are pruned. + - `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels. +- type: "string" +- responses: +- 200: +- description: "No error" +- schema: +- type: "object" +- title: "ImagePruneResponse" +- properties: +- ImagesDeleted: +- description: "Images that were deleted" +- type: "array" +- items: +- $ref: "#/definitions/ImageDeleteResponseItem" +- SpaceReclaimed: +- description: "Disk space reclaimed in bytes" +- type: "integer" +- format: "int64" +- 500: +- description: "Server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Image"] ++ type: string ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: ImagePruneResponse ++ properties: ++ ImagesDeleted: ++ description: Images that were deleted ++ type: array ++ items: ++ $ref: "#/components/schemas/ImageDeleteResponseItem" ++ SpaceReclaimed: ++ description: Disk space reclaimed in bytes ++ type: integer ++ format: int64 ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Image ++ description: Delete unused images. + /auth: + post: +- summary: "Check auth configuration" ++ summary: Check auth configuration + description: | + Validate credentials for a registry and, if available, get an identity + token for accessing the registry without password. +- operationId: "SystemAuth" +- consumes: ["application/json"] +- produces: ["application/json"] +- responses: +- 200: +- description: "An identity token was generated successfully." +- schema: +- $ref: "#/definitions/AuthResponse" +- 204: +- description: "No error" +- 401: +- description: "Auth error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "authConfig" +- in: "body" +- description: "Authentication to check" +- schema: +- $ref: "#/definitions/AuthConfig" +- tags: ["System"] ++ operationId: SystemAuth ++ responses: ++ "200": ++ description: An identity token was generated successfully. ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/AuthResponse" ++ "204": ++ description: No error ++ "401": ++ description: Auth error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/AuthConfig" ++ description: Authentication to check ++ tags: ++ - System + /info: + get: +- summary: "Get system information" +- operationId: "SystemInfo" +- produces: +- - "application/json" +- responses: +- 200: +- description: "No error" +- schema: +- $ref: "#/definitions/SystemInfo" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["System"] ++ summary: Get system information ++ operationId: SystemInfo ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/SystemInfo" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - System ++ description: Get system information. + /version: + get: +- summary: "Get version" +- description: "Returns the version of Docker that is running and various information about the system that Docker is running on." +- operationId: "SystemVersion" +- produces: ["application/json"] +- responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/SystemVersion" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["System"] ++ summary: Get version ++ description: Returns the version of Docker that is running and various information about the system that Docker is running on. ++ operationId: SystemVersion ++ responses: ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/SystemVersion" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - System + /_ping: + get: +- summary: "Ping" +- description: "This is a dummy endpoint you can use to test if the server is accessible." +- operationId: "SystemPing" +- produces: ["text/plain"] ++ summary: Ping ++ description: This is a dummy endpoint you can use to test if the server is accessible. ++ operationId: SystemPing + responses: +- 200: +- description: "no error" +- schema: +- type: "string" +- example: "OK" ++ "200": ++ description: no error + headers: + Api-Version: +- type: "string" +- description: "Max API Version the server supports" ++ description: Max API Version the server supports ++ schema: ++ type: string + Builder-Version: +- type: "string" + description: | + Default version of docker image builder + +@@ -10751,137 +3145,179 @@ + + This value is a recommendation as advertised by the daemon, and + it is up to the client to choose which builder to use. +- default: "2" ++ schema: ++ type: string ++ default: "2" + Docker-Experimental: +- type: "boolean" +- description: "If the server is running with experimental mode enabled" ++ description: If the server is running with experimental mode enabled ++ schema: ++ type: boolean + Swarm: +- type: "string" +- enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"] + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. +- default: "inactive" ++ schema: ++ type: string ++ enum: ++ - inactive ++ - pending ++ - error ++ - locked ++ - active/worker ++ - active/manager ++ default: inactive + Cache-Control: +- type: "string" +- default: "no-cache, no-store, must-revalidate" ++ schema: ++ type: string ++ default: no-cache, no-store, must-revalidate + Pragma: +- type: "string" +- default: "no-cache" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ type: string ++ default: no-cache ++ content: ++ text/plain: ++ schema: ++ type: string ++ example: OK ++ "500": ++ description: server error + headers: + Cache-Control: +- type: "string" +- default: "no-cache, no-store, must-revalidate" ++ schema: ++ type: string ++ default: no-cache, no-store, must-revalidate + Pragma: +- type: "string" +- default: "no-cache" +- tags: ["System"] ++ schema: ++ type: string ++ default: no-cache ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - System + head: +- summary: "Ping" +- description: "This is a dummy endpoint you can use to test if the server is accessible." +- operationId: "SystemPingHead" +- produces: ["text/plain"] ++ summary: Ping ++ description: This is a dummy endpoint you can use to test if the server is accessible. ++ operationId: SystemPingHead + responses: +- 200: +- description: "no error" +- schema: +- type: "string" +- example: "(empty)" ++ "200": ++ description: no error + headers: + Api-Version: +- type: "string" +- description: "Max API Version the server supports" ++ description: Max API Version the server supports ++ schema: ++ type: string + Builder-Version: +- type: "string" +- description: "Default version of docker image builder" ++ description: Default version of docker image builder ++ schema: ++ type: string + Docker-Experimental: +- type: "boolean" +- description: "If the server is running with experimental mode enabled" ++ description: If the server is running with experimental mode enabled ++ schema: ++ type: boolean + Swarm: +- type: "string" +- enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"] + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. +- default: "inactive" ++ schema: ++ type: string ++ enum: ++ - inactive ++ - pending ++ - error ++ - locked ++ - active/worker ++ - active/manager ++ default: inactive + Cache-Control: +- type: "string" +- default: "no-cache, no-store, must-revalidate" ++ schema: ++ type: string ++ default: no-cache, no-store, must-revalidate + Pragma: +- type: "string" +- default: "no-cache" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["System"] ++ schema: ++ type: string ++ default: no-cache ++ "500": ++ description: server error ++ tags: ++ - System + /commit: + post: +- summary: "Create a new image from a container" +- operationId: "ImageCommit" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- responses: +- 201: +- description: "no error" +- schema: +- $ref: "#/definitions/IDResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "containerConfig" +- in: "body" +- description: "The container configuration" +- schema: +- $ref: "#/definitions/ContainerConfig" +- - name: "container" +- in: "query" +- description: "The ID or name of the container to commit" +- type: "string" +- - name: "repo" +- in: "query" +- description: "Repository name for the created image" +- type: "string" +- - name: "tag" +- in: "query" +- description: "Tag name for the create image" +- type: "string" +- - name: "comment" +- in: "query" +- description: "Commit message" +- type: "string" +- - name: "author" +- in: "query" +- description: "Author of the image (e.g., `John Hannibal Smith `)" +- type: "string" +- - name: "pause" +- in: "query" +- description: "Whether to pause the container before committing" +- type: "boolean" +- default: true +- - name: "changes" +- in: "query" ++ summary: Create a new image from a container ++ operationId: ImageCommit ++ responses: ++ "201": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/IDResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: container ++ in: query ++ description: The ID or name of the container to commit ++ schema: ++ type: string ++ - name: repo ++ in: query ++ description: Repository name for the created image ++ schema: ++ type: string ++ - name: tag ++ in: query ++ description: Tag name for the create image ++ schema: ++ type: string ++ - name: comment ++ in: query ++ description: Commit message ++ schema: ++ type: string ++ - name: author ++ in: query ++ description: Author of the image (e.g., `John Hannibal Smith `) ++ schema: ++ type: string ++ - name: pause ++ in: query ++ description: Whether to pause the container before committing ++ schema: ++ type: boolean ++ default: true ++ - name: changes ++ in: query + description: "`Dockerfile` instructions to apply while committing" +- type: "string" +- tags: ["Image"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ContainerConfig" ++ description: The container configuration ++ tags: ++ - Image ++ description: Create a new image from a container. + /events: + get: +- summary: "Monitor events" ++ summary: Monitor events + description: | + Stream real-time events from the server. + +@@ -10906,36 +3342,45 @@ + Configs report these events: `create`, `update`, and `remove` + + The Builder reports `prune` events +- +- operationId: "SystemEvents" +- produces: +- - "application/jsonl" +- - "application/x-ndjson" +- - "application/json-seq" +- responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/EventMessage" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "since" +- in: "query" +- description: "Show events created since this timestamp then stream new events." +- type: "string" +- - name: "until" +- in: "query" +- description: "Show events created until this timestamp then stop streaming." +- type: "string" +- - name: "filters" +- in: "query" ++ operationId: SystemEvents ++ responses: ++ "200": ++ description: no error ++ content: ++ application/jsonl: ++ schema: ++ $ref: "#/components/schemas/EventMessage" ++ application/x-ndjson: ++ schema: ++ $ref: "#/components/schemas/EventMessage" ++ application/json-seq: ++ schema: ++ $ref: "#/components/schemas/EventMessage" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: since ++ in: query ++ description: Show events created since this timestamp then stream new events. ++ schema: ++ type: string ++ - name: until ++ in: query ++ description: Show events created until this timestamp then stop streaming. ++ schema: ++ type: string ++ - name: filters ++ in: query + description: | + A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters: + +@@ -10953,51 +3398,78 @@ + - `service=` service name or ID + - `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config` + - `volume=` volume name +- type: "string" +- tags: ["System"] ++ schema: ++ type: string ++ tags: ++ - System + /system/df: + get: +- summary: "Get data usage information" +- operationId: "SystemDataUsage" ++ summary: Get data usage information ++ operationId: SystemDataUsage + responses: +- 200: +- description: "no error" +- schema: +- type: "object" +- title: "SystemDataUsageResponse" +- properties: +- ImageUsage: +- $ref: "#/definitions/ImagesDiskUsage" +- ContainerUsage: +- $ref: "#/definitions/ContainersDiskUsage" +- VolumeUsage: +- $ref: "#/definitions/VolumesDiskUsage" +- BuildCacheUsage: +- $ref: "#/definitions/BuildCacheDiskUsage" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: SystemDataUsageResponse ++ properties: ++ ImageUsage: ++ $ref: "#/components/schemas/ImagesDiskUsage" ++ ContainerUsage: ++ $ref: "#/components/schemas/ContainersDiskUsage" ++ VolumeUsage: ++ $ref: "#/components/schemas/VolumesDiskUsage" ++ BuildCacheUsage: ++ $ref: "#/components/schemas/BuildCacheDiskUsage" ++ text/plain: ++ schema: ++ type: object ++ title: SystemDataUsageResponse ++ properties: ++ ImageUsage: ++ $ref: "#/components/schemas/ImagesDiskUsage" ++ ContainerUsage: ++ $ref: "#/components/schemas/ContainersDiskUsage" ++ VolumeUsage: ++ $ref: "#/components/schemas/VolumesDiskUsage" ++ BuildCacheUsage: ++ $ref: "#/components/schemas/BuildCacheDiskUsage" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "type" +- in: "query" ++ - name: type ++ in: query + description: | + Object types, for which to compute and return data. +- type: "array" +- collectionFormat: multi +- items: +- type: "string" +- enum: ["container", "image", "volume", "build-cache"] +- - name: "verbose" +- in: "query" ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ enum: ++ - container ++ - image ++ - volume ++ - build-cache ++ - name: verbose ++ in: query + description: | + Show detailed information on space usage. +- type: "boolean" +- default: false +- tags: ["System"] ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - System ++ description: Get data usage information. + /images/{name}/get: + get: +- summary: "Export an image" ++ summary: Export an image + description: | + Get a tarball containing all images and metadata for a repository. + +@@ -11018,31 +3490,30 @@ + } + } + ``` +- operationId: "ImageGet" +- produces: +- - "application/x-tar" +- responses: +- 200: +- description: "no error" +- schema: +- type: "string" +- format: "binary" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "Image name or ID" +- type: "string" +- required: true +- - name: "platform" +- type: "array" +- items: +- type: "string" +- collectionFormat: "multi" +- in: "query" ++ operationId: ImageGet ++ responses: ++ "200": ++ description: no error ++ content: ++ application/x-tar: ++ schema: ++ type: string ++ format: binary ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: Image name or ID ++ required: true ++ schema: ++ type: string ++ - name: platform ++ in: query + description: | + JSON encoded OCI platform describing a platform which will be used + to select a platform-specific image to be saved if the image is +@@ -11050,10 +3521,16 @@ + If not provided, the full multi-platform image will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- tags: ["Image"] ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ tags: ++ - Image + /images/get: + get: +- summary: "Export several images" ++ summary: Export several images + description: | + Get a tarball containing all images and metadata for several image + repositories. +@@ -11065,32 +3542,33 @@ + file for this image ID. + + For details on the format, see the [export image endpoint](#operation/ImageGet). +- operationId: "ImageGetAll" +- produces: +- - "application/x-tar" +- responses: +- 200: +- description: "no error" +- schema: +- type: "string" +- format: "binary" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "names" +- in: "query" +- description: "Image names to filter by" +- type: "array" +- items: +- type: "string" +- - name: "platform" +- type: "array" +- items: +- type: "string" +- collectionFormat: "multi" +- in: "query" ++ operationId: ImageGetAll ++ responses: ++ "200": ++ description: no error ++ content: ++ application/x-tar: ++ schema: ++ type: string ++ format: binary ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: names ++ in: query ++ description: Image names to filter by ++ style: form ++ explode: false ++ schema: ++ type: array ++ items: ++ type: string ++ - name: platform ++ in: query + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to be saved if the image is +@@ -11098,44 +3576,39 @@ + will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- tags: ["Image"] ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ tags: ++ - Image + /images/load: + post: +- summary: "Import images" ++ summary: Import images + description: | + Load a set of images and tags into a repository. + + For details on the format, see the [export image endpoint](#operation/ImageGet). +- operationId: "ImageLoad" +- consumes: +- - "application/x-tar" +- produces: +- - "application/json" +- responses: +- 200: +- description: "no error" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "imagesTarball" +- in: "body" +- description: "Tar archive containing images" +- schema: +- type: "string" +- format: "binary" +- - name: "quiet" +- in: "query" +- description: "Suppress progress details during load." +- type: "boolean" +- default: false +- - name: "platform" +- type: "array" +- items: +- type: "string" +- collectionFormat: "multi" +- in: "query" ++ operationId: ImageLoad ++ responses: ++ "200": ++ description: no error ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: quiet ++ in: query ++ description: Suppress progress details during load. ++ schema: ++ type: boolean ++ default: false ++ - name: platform ++ in: query + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to load if the image is +@@ -11143,299 +3616,347 @@ + will be loaded. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- tags: ["Image"] ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ requestBody: ++ content: ++ application/x-tar: ++ schema: ++ type: string ++ format: binary ++ description: Tar archive containing images ++ tags: ++ - Image + /containers/{id}/exec: + post: +- summary: "Create an exec instance" +- description: "Run a command inside a running container." +- operationId: "ContainerExec" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- responses: +- 201: +- description: "no error" +- schema: +- $ref: "#/definitions/IDResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 409: +- description: "container is paused" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "execConfig" +- in: "body" +- description: "Exec configuration" +- schema: +- type: "object" +- title: "ExecConfig" +- properties: +- AttachStdin: +- type: "boolean" +- description: "Attach to `stdin` of the exec command." +- AttachStdout: +- type: "boolean" +- description: "Attach to `stdout` of the exec command." +- AttachStderr: +- type: "boolean" +- description: "Attach to `stderr` of the exec command." +- ConsoleSize: +- type: "array" +- description: "Initial console size, as an `[height, width]` array." +- x-nullable: true +- minItems: 2 +- maxItems: 2 +- items: +- type: "integer" +- minimum: 0 +- example: [80, 64] +- DetachKeys: +- type: "string" +- description: | +- Override the key sequence for detaching a container. Format is +- a single character `[a-Z]` or `ctrl-` where `` +- is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. +- Tty: +- type: "boolean" +- description: "Allocate a pseudo-TTY." +- Env: +- description: | +- A list of environment variables in the form `["VAR=value", ...]`. +- type: "array" +- items: +- type: "string" +- Cmd: +- type: "array" +- description: "Command to run, as a string or array of strings." +- items: +- type: "string" +- Privileged: +- type: "boolean" +- description: "Runs the exec process with extended privileges." +- default: false +- User: +- type: "string" +- description: | +- The user, and optionally, group to run the exec process inside +- the container. Format is one of: `user`, `user:group`, `uid`, +- or `uid:gid`. +- WorkingDir: +- type: "string" +- description: | +- The working directory for the exec process inside the container. +- example: +- AttachStdin: false +- AttachStdout: true +- AttachStderr: true +- DetachKeys: "ctrl-p,ctrl-q" +- Tty: false +- Cmd: +- - "date" +- Env: +- - "FOO=bar" +- - "BAZ=quux" +- required: true +- - name: "id" +- in: "path" +- description: "ID or name of container" +- type: "string" ++ summary: Create an exec instance ++ description: Run a command inside a running container. ++ operationId: ContainerExec ++ responses: ++ "201": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/IDResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "409": ++ description: container is paused ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: ID or name of container + required: true +- tags: ["Exec"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: ExecConfig ++ properties: ++ AttachStdin: ++ type: boolean ++ description: Attach to `stdin` of the exec command. ++ AttachStdout: ++ type: boolean ++ description: Attach to `stdout` of the exec command. ++ AttachStderr: ++ type: boolean ++ description: Attach to `stderr` of the exec command. ++ ConsoleSize: ++ type: ++ - array ++ - "null" ++ description: Initial console size, as an `[height, width]` array. ++ minItems: 2 ++ maxItems: 2 ++ items: ++ type: integer ++ minimum: 0 ++ example: ++ - 80 ++ - 64 ++ DetachKeys: ++ type: string ++ description: | ++ Override the key sequence for detaching a container. Format is ++ a single character `[a-Z]` or `ctrl-` where `` ++ is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. ++ Tty: ++ type: boolean ++ description: Allocate a pseudo-TTY. ++ Env: ++ description: | ++ A list of environment variables in the form `["VAR=value", ...]`. ++ type: array ++ items: ++ type: string ++ Cmd: ++ type: array ++ description: Command to run, as a string or array of strings. ++ items: ++ type: string ++ Privileged: ++ type: boolean ++ description: Runs the exec process with extended privileges. ++ default: false ++ User: ++ type: string ++ description: | ++ The user, and optionally, group to run the exec process inside ++ the container. Format is one of: `user`, `user:group`, `uid`, ++ or `uid:gid`. ++ WorkingDir: ++ type: string ++ description: | ++ The working directory for the exec process inside the container. ++ example: ++ AttachStdin: false ++ AttachStdout: true ++ AttachStderr: true ++ DetachKeys: ctrl-p,ctrl-q ++ Tty: false ++ Cmd: ++ - date ++ Env: ++ - FOO=bar ++ - BAZ=quux ++ description: Exec configuration ++ required: true ++ tags: ++ - Exec + /exec/{id}/start: + post: +- summary: "Start an exec instance" ++ summary: Start an exec instance + description: | + Starts a previously set up exec instance. If detach is true, this endpoint + returns immediately after starting the command. Otherwise, it sets up an + interactive session with the command. +- operationId: "ExecStart" +- consumes: +- - "application/json" +- produces: +- - "application/vnd.docker.raw-stream" +- - "application/vnd.docker.multiplexed-stream" +- responses: +- 200: +- description: "No error" +- 404: +- description: "No such exec instance" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 409: +- description: "Container is stopped or paused" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ operationId: ExecStart ++ responses: ++ "200": ++ description: No error ++ "404": ++ description: No such exec instance ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "409": ++ description: Container is stopped or paused ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "execStartConfig" +- in: "body" +- schema: +- type: "object" +- title: "ExecStartConfig" +- properties: +- Detach: +- type: "boolean" +- description: "Detach from the command." +- example: false +- Tty: +- type: "boolean" +- description: "Allocate a pseudo-TTY." +- example: true +- ConsoleSize: +- type: "array" +- description: "Initial console size, as an `[height, width]` array." +- x-nullable: true +- minItems: 2 +- maxItems: 2 +- items: +- type: "integer" +- minimum: 0 +- example: [80, 64] +- - name: "id" +- in: "path" +- description: "Exec instance ID" ++ - name: id ++ in: path ++ description: Exec instance ID + required: true +- type: "string" +- tags: ["Exec"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: ExecStartConfig ++ properties: ++ Detach: ++ type: boolean ++ description: Detach from the command. ++ example: false ++ Tty: ++ type: boolean ++ description: Allocate a pseudo-TTY. ++ example: true ++ ConsoleSize: ++ type: ++ - array ++ - "null" ++ description: Initial console size, as an `[height, width]` array. ++ minItems: 2 ++ maxItems: 2 ++ items: ++ type: integer ++ minimum: 0 ++ example: ++ - 80 ++ - 64 ++ tags: ++ - Exec + /exec/{id}/resize: + post: +- summary: "Resize an exec instance" ++ summary: Resize an exec instance + description: | + Resize the TTY session used by an exec instance. This endpoint only works + if `tty` was specified as part of creating and starting the exec instance. +- operationId: "ExecResize" ++ operationId: ExecResize + responses: +- 200: +- description: "No error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "No such exec instance" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "Exec instance ID" +- required: true +- type: "string" +- - name: "h" +- in: "query" +- required: true +- description: "Height of the TTY session in characters" +- type: "integer" +- - name: "w" +- in: "query" +- required: true +- description: "Width of the TTY session in characters" +- type: "integer" +- tags: ["Exec"] ++ "200": ++ description: No error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: No such exec instance ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: Exec instance ID ++ required: true ++ schema: ++ type: string ++ - name: h ++ in: query ++ required: true ++ description: Height of the TTY session in characters ++ schema: ++ type: integer ++ - name: w ++ in: query ++ required: true ++ description: Width of the TTY session in characters ++ schema: ++ type: integer ++ tags: ++ - Exec + /exec/{id}/json: + get: +- summary: "Inspect an exec instance" +- description: "Return low-level information about an exec instance." +- operationId: "ExecInspect" +- produces: +- - "application/json" +- responses: +- 200: +- description: "No error" +- schema: +- type: "object" +- title: "ExecInspectResponse" +- properties: +- CanRemove: +- type: "boolean" +- DetachKeys: +- type: "string" +- ID: +- type: "string" +- Running: +- type: "boolean" +- ExitCode: +- type: "integer" +- ProcessConfig: +- $ref: "#/definitions/ProcessConfig" +- OpenStdin: +- type: "boolean" +- OpenStderr: +- type: "boolean" +- OpenStdout: +- type: "boolean" +- ContainerID: +- type: "string" +- Pid: +- type: "integer" +- description: "The system process ID for the exec process." +- examples: +- application/json: +- CanRemove: false +- ContainerID: "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126" +- DetachKeys: "" +- ExitCode: 2 +- ID: "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b" +- OpenStderr: true +- OpenStdin: true +- OpenStdout: true +- ProcessConfig: +- arguments: +- - "-c" +- - "exit 2" +- entrypoint: "sh" +- privileged: false +- tty: true +- user: "1000" +- Running: false +- Pid: 42000 +- 404: +- description: "No such exec instance" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "Exec instance ID" ++ summary: Inspect an exec instance ++ description: Return low-level information about an exec instance. ++ operationId: ExecInspect ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: ExecInspectResponse ++ properties: ++ CanRemove: ++ type: boolean ++ DetachKeys: ++ type: string ++ ID: ++ type: string ++ Running: ++ type: boolean ++ ExitCode: ++ type: integer ++ ProcessConfig: ++ $ref: "#/components/schemas/ProcessConfig" ++ OpenStdin: ++ type: boolean ++ OpenStderr: ++ type: boolean ++ OpenStdout: ++ type: boolean ++ ContainerID: ++ type: string ++ Pid: ++ type: integer ++ description: The system process ID for the exec process. ++ examples: ++ response: ++ value: ++ CanRemove: false ++ ContainerID: b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126 ++ DetachKeys: "" ++ ExitCode: 2 ++ ID: f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b ++ OpenStderr: true ++ OpenStdin: true ++ OpenStdout: true ++ ProcessConfig: ++ arguments: ++ - -c ++ - exit 2 ++ entrypoint: sh ++ privileged: false ++ tty: true ++ user: "1000" ++ Running: false ++ Pid: 42000 ++ "404": ++ description: No such exec instance ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: Exec instance ID + required: true +- type: "string" +- tags: ["Exec"] +- ++ schema: ++ type: string ++ tags: ++ - Exec + /volumes: + get: +- summary: "List volumes" +- operationId: "VolumeList" +- produces: ["application/json"] ++ summary: List volumes ++ operationId: VolumeList + responses: +- 200: +- description: "Summary volume data that matches the query" +- schema: +- $ref: "#/definitions/VolumeListResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: Summary volume data that matches the query ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/VolumeListResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + JSON encoded value of the filters (a `map[string][]string`) to + process on the volumes list. Available filters: +@@ -11448,190 +3969,222 @@ + - `label=` or `label=:` Matches volumes based on + the presence of a `label` alone or a `label` and a value. + - `name=` Matches all or part of a volume name. +- type: "string" +- format: "json" +- tags: ["Volume"] +- ++ schema: ++ type: string ++ format: json ++ tags: ++ - Volume ++ description: List volumes. + /volumes/create: + post: +- summary: "Create a volume" +- operationId: "VolumeCreate" +- consumes: ["application/json"] +- produces: ["application/json"] ++ summary: Create a volume ++ operationId: VolumeCreate + responses: +- 201: +- description: "The volume was created successfully" +- schema: +- $ref: "#/definitions/Volume" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "volumeConfig" +- in: "body" +- required: true +- description: "Volume configuration" +- schema: +- $ref: "#/definitions/VolumeCreateRequest" +- tags: ["Volume"] +- ++ "201": ++ description: The volume was created successfully ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Volume" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/VolumeCreateRequest" ++ description: Volume configuration ++ required: true ++ tags: ++ - Volume ++ description: Create a volume. + /volumes/{name}: + get: +- summary: "Inspect a volume" +- operationId: "VolumeInspect" +- produces: ["application/json"] ++ summary: Inspect a volume ++ operationId: VolumeInspect + responses: +- 200: +- description: "No error" +- schema: +- $ref: "#/definitions/Volume" +- 404: +- description: "No such volume" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Volume" ++ "404": ++ description: No such volume ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + required: true +- description: "Volume name or ID" +- type: "string" +- tags: ["Volume"] +- ++ description: Volume name or ID ++ schema: ++ type: string ++ tags: ++ - Volume ++ description: Inspect a volume. + put: + summary: | + "Update a volume. Valid only for Swarm cluster volumes" +- operationId: "VolumeUpdate" +- consumes: ["application/json"] +- produces: ["application/json"] +- responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such volume" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "The name or ID of the volume" +- type: "string" +- required: true +- - name: "body" +- in: "body" +- schema: +- # though the schema for is an object that contains only a +- # ClusterVolumeSpec, wrapping the ClusterVolumeSpec in this object +- # means that if, later on, we support things like changing the +- # labels, we can do so without duplicating that information to the +- # ClusterVolumeSpec. +- type: "object" +- description: "Volume configuration" +- properties: +- Spec: +- $ref: "#/definitions/ClusterVolumeSpec" +- description: | +- The spec of the volume to update. Currently, only Availability may +- change. All other fields must remain unchanged. +- - name: "version" +- in: "query" ++ operationId: VolumeUpdate ++ responses: ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such volume ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: The name or ID of the volume ++ required: true ++ schema: ++ type: string ++ - name: version ++ in: query + description: | + The version number of the volume being updated. This is required to + avoid conflicting writes. Found in the volume's `ClusterVolume` + field. +- type: "integer" +- format: "int64" + required: true +- tags: ["Volume"] +- ++ schema: ++ type: integer ++ format: int64 ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ description: Volume configuration ++ properties: ++ Spec: ++ $ref: "#/components/schemas/ClusterVolumeSpec" ++ description: | ++ The spec of the volume to update. Currently, only Availability may ++ change. All other fields must remain unchanged. ++ tags: ++ - Volume ++ description: |- ++ "Update a volume. Valid only for Swarm cluster volumes" ++ . + delete: +- summary: "Remove a volume" +- description: "Instruct the driver to remove the volume." +- operationId: "VolumeDelete" +- responses: +- 204: +- description: "The volume was removed" +- 404: +- description: "No such volume or volume driver" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 409: +- description: "Volume is in use and cannot be removed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- required: true +- description: "Volume name or ID" +- type: "string" +- - name: "force" +- in: "query" +- description: "Force the removal of the volume" +- type: "boolean" +- default: false +- tags: ["Volume"] +- ++ summary: Remove a volume ++ description: Instruct the driver to remove the volume. ++ operationId: VolumeDelete ++ responses: ++ "204": ++ description: The volume was removed ++ "404": ++ description: No such volume or volume driver ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "409": ++ description: Volume is in use and cannot be removed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ required: true ++ description: Volume name or ID ++ schema: ++ type: string ++ - name: force ++ in: query ++ description: Force the removal of the volume ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Volume + /volumes/prune: + post: +- summary: "Delete unused volumes" +- produces: +- - "application/json" +- operationId: "VolumePrune" ++ summary: Delete unused volumes ++ operationId: VolumePrune + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels. + - `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes. +- type: "string" +- responses: +- 200: +- description: "No error" + schema: +- type: "object" +- title: "VolumePruneResponse" +- properties: +- VolumesDeleted: +- description: "Volumes that were deleted" +- type: "array" +- items: +- type: "string" +- SpaceReclaimed: +- description: "Disk space reclaimed in bytes" +- type: "integer" +- format: "int64" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Volume"] ++ type: string ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: VolumePruneResponse ++ properties: ++ VolumesDeleted: ++ description: Volumes that were deleted ++ type: array ++ items: ++ type: string ++ SpaceReclaimed: ++ description: Disk space reclaimed in bytes ++ type: integer ++ format: int64 ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Volume ++ description: Delete unused volumes. + /networks: + get: +- summary: "List networks" ++ summary: List networks + description: | + Returns a list of networks. For details on the format, see the + [network inspect endpoint](#operation/NetworkInspect). +@@ -11639,77 +4192,79 @@ + Note that it uses a different, smaller representation of a network than + inspecting a single network. For example, the list of containers attached + to the network is not propagated in API versions 1.28 and up. +- operationId: "NetworkList" +- produces: +- - "application/json" ++ operationId: NetworkList + responses: +- 200: +- description: "No error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/NetworkSummary" +- examples: ++ "200": ++ description: No error ++ content: + application/json: +- - Name: "bridge" +- Id: "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566" +- Created: "2016-10-19T06:21:00.416543526Z" +- Scope: "local" +- Driver: "bridge" +- EnableIPv4: true +- EnableIPv6: false +- Internal: false +- Attachable: false +- Ingress: false +- IPAM: +- Driver: "default" +- Config: +- - +- Subnet: "172.17.0.0/16" +- Options: +- com.docker.network.bridge.default_bridge: "true" +- com.docker.network.bridge.enable_icc: "true" +- com.docker.network.bridge.enable_ip_masquerade: "true" +- com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" +- com.docker.network.bridge.name: "docker0" +- com.docker.network.driver.mtu: "1500" +- - Name: "none" +- Id: "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794" +- Created: "0001-01-01T00:00:00Z" +- Scope: "local" +- Driver: "null" +- EnableIPv4: false +- EnableIPv6: false +- Internal: false +- Attachable: false +- Ingress: false +- IPAM: +- Driver: "default" +- Config: [] +- Containers: {} +- Options: {} +- - Name: "host" +- Id: "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e" +- Created: "0001-01-01T00:00:00Z" +- Scope: "local" +- Driver: "host" +- EnableIPv4: false +- EnableIPv6: false +- Internal: false +- Attachable: false +- Ingress: false +- IPAM: +- Driver: "default" +- Config: [] +- Containers: {} +- Options: {} +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/NetworkSummary" ++ examples: ++ response: ++ value: ++ - Name: bridge ++ Id: f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566 ++ Created: 2016-10-19T06:21:00.416543526Z ++ Scope: local ++ Driver: bridge ++ EnableIPv4: true ++ EnableIPv6: false ++ Internal: false ++ Attachable: false ++ Ingress: false ++ IPAM: ++ Driver: default ++ Config: ++ - Subnet: 172.17.0.0/16 ++ Options: ++ com.docker.network.bridge.default_bridge: "true" ++ com.docker.network.bridge.enable_icc: "true" ++ com.docker.network.bridge.enable_ip_masquerade: "true" ++ com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 ++ com.docker.network.bridge.name: docker0 ++ com.docker.network.driver.mtu: "1500" ++ - Name: none ++ Id: e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794 ++ Created: 0001-01-01T00:00:00Z ++ Scope: local ++ Driver: "null" ++ EnableIPv4: false ++ EnableIPv6: false ++ Internal: false ++ Attachable: false ++ Ingress: false ++ IPAM: ++ Driver: default ++ Config: [] ++ Containers: {} ++ Options: {} ++ - Name: host ++ Id: 13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e ++ Created: 0001-01-01T00:00:00Z ++ Scope: local ++ Driver: host ++ EnableIPv4: false ++ EnableIPv6: false ++ Internal: false ++ Attachable: false ++ Ingress: false ++ IPAM: ++ Driver: default ++ Config: [] ++ Containers: {} ++ Options: {} ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + JSON encoded value of the filters (a `map[string][]string`) to process + on the networks list. +@@ -11726,315 +4281,365 @@ + - `name=` Matches all or part of a network name. + - `scope=["swarm"|"global"|"local"]` Filters networks by scope (`swarm`, `global`, or `local`). + - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. +- type: "string" +- tags: ["Network"] +- ++ schema: ++ type: string ++ tags: ++ - Network + /networks/{id}: + get: +- summary: "Inspect a network" +- operationId: "NetworkInspect" +- produces: +- - "application/json" +- responses: +- 200: +- description: "No error" +- schema: +- $ref: "#/definitions/NetworkInspect" +- 404: +- description: "Network not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "Network ID or name" +- required: true +- type: "string" +- - name: "verbose" +- in: "query" +- description: "Detailed inspect output for troubleshooting" +- type: "boolean" +- default: false +- - name: "scope" +- in: "query" +- description: "Filter the network by scope (swarm, global, or local)" +- type: "string" +- tags: ["Network"] +- +- delete: +- summary: "Remove a network" +- operationId: "NetworkDelete" ++ summary: Inspect a network ++ operationId: NetworkInspect + responses: +- 204: +- description: "No error" +- 403: +- description: "operation not supported for pre-defined networks" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such network" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "Network ID or name" ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/NetworkInspect" ++ "404": ++ description: Network not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: Network ID or name + required: true +- type: "string" +- tags: ["Network"] +- +- /networks/create: +- post: +- summary: "Create a network" +- operationId: "NetworkCreate" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- responses: +- 201: +- description: "Network created successfully" +- schema: +- $ref: "#/definitions/NetworkCreateResponse" +- 400: +- description: "bad parameter" + schema: +- $ref: "#/definitions/ErrorResponse" +- 403: +- description: | +- Forbidden operation. This happens when trying to create a network named after a pre-defined network, +- or when trying to create an overlay network on a daemon which is not part of a Swarm cluster. ++ type: string ++ - name: verbose ++ in: query ++ description: Detailed inspect output for troubleshooting + schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "plugin not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" ++ type: boolean ++ default: false ++ - name: scope ++ in: query ++ description: Filter the network by scope (swarm, global, or local) + schema: +- $ref: "#/definitions/ErrorResponse" ++ type: string ++ tags: ++ - Network ++ description: Inspect a network. ++ delete: ++ summary: Remove a network ++ operationId: NetworkDelete ++ responses: ++ "204": ++ description: No error ++ "403": ++ description: operation not supported for pre-defined networks ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such network ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "networkConfig" +- in: "body" +- description: "Network configuration" ++ - name: id ++ in: path ++ description: Network ID or name + required: true + schema: +- type: "object" +- title: "NetworkCreateRequest" +- required: ["Name"] +- properties: +- Name: +- description: "The network's name." +- type: "string" +- example: "my_network" +- Driver: +- description: "Name of the network driver plugin to use." +- type: "string" +- default: "bridge" +- example: "bridge" +- Scope: +- description: | +- The level at which the network exists (e.g. `swarm` for cluster-wide +- or `local` for machine level). +- type: "string" +- Internal: +- description: "Restrict external access to the network." +- type: "boolean" +- Attachable: +- description: | +- Globally scoped network is manually attachable by regular +- containers from workers in swarm mode. +- type: "boolean" +- example: true +- Ingress: +- description: | +- Ingress network is the network which provides the routing-mesh +- in swarm mode. +- type: "boolean" +- example: false +- ConfigOnly: +- description: | +- Creates a config-only network. Config-only networks are placeholder +- networks for network configurations to be used by other networks. +- Config-only networks cannot be used directly to run containers +- or services. +- type: "boolean" +- default: false +- example: false +- ConfigFrom: +- description: | +- Specifies the source which will provide the configuration for +- this network. The specified network must be an existing +- config-only network; see ConfigOnly. +- $ref: "#/definitions/ConfigReference" +- IPAM: +- description: "Optional custom IP scheme for the network." +- $ref: "#/definitions/IPAM" +- EnableIPv4: +- description: "Enable IPv4 on the network." +- type: "boolean" +- example: true +- EnableIPv6: +- description: "Enable IPv6 on the network." +- type: "boolean" +- example: true +- Options: +- description: "Network specific options to be used by the drivers." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.docker.network.bridge.default_bridge: "true" +- com.docker.network.bridge.enable_icc: "true" +- com.docker.network.bridge.enable_ip_masquerade: "true" +- com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" +- com.docker.network.bridge.name: "docker0" +- com.docker.network.driver.mtu: "1500" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- tags: ["Network"] +- ++ type: string ++ tags: ++ - Network ++ description: Remove a network. ++ /networks/create: ++ post: ++ summary: Create a network ++ operationId: NetworkCreate ++ responses: ++ "201": ++ description: Network created successfully ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/NetworkCreateResponse" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "403": ++ description: | ++ Forbidden operation. This happens when trying to create a network named after a pre-defined network, ++ or when trying to create an overlay network on a daemon which is not part of a Swarm cluster. ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: plugin not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: NetworkCreateRequest ++ required: ++ - Name ++ properties: ++ Name: ++ description: The network's name. ++ type: string ++ example: my_network ++ Driver: ++ description: Name of the network driver plugin to use. ++ type: string ++ default: bridge ++ example: bridge ++ Scope: ++ description: | ++ The level at which the network exists (e.g. `swarm` for cluster-wide ++ or `local` for machine level). ++ type: string ++ Internal: ++ description: Restrict external access to the network. ++ type: boolean ++ Attachable: ++ description: | ++ Globally scoped network is manually attachable by regular ++ containers from workers in swarm mode. ++ type: boolean ++ example: true ++ Ingress: ++ description: | ++ Ingress network is the network which provides the routing-mesh ++ in swarm mode. ++ type: boolean ++ example: false ++ ConfigOnly: ++ description: | ++ Creates a config-only network. Config-only networks are placeholder ++ networks for network configurations to be used by other networks. ++ Config-only networks cannot be used directly to run containers ++ or services. ++ type: boolean ++ default: false ++ example: false ++ ConfigFrom: ++ allOf: ++ - $ref: "#/components/schemas/ConfigReference" ++ - description: | ++ Specifies the source which will provide the configuration for ++ this network. The specified network must be an existing ++ config-only network; see ConfigOnly. ++ IPAM: ++ allOf: ++ - $ref: "#/components/schemas/IPAM" ++ - description: Optional custom IP scheme for the network. ++ EnableIPv4: ++ description: Enable IPv4 on the network. ++ type: boolean ++ example: true ++ EnableIPv6: ++ description: Enable IPv6 on the network. ++ type: boolean ++ example: true ++ Options: ++ description: Network specific options to be used by the drivers. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.docker.network.bridge.default_bridge: "true" ++ com.docker.network.bridge.enable_icc: "true" ++ com.docker.network.bridge.enable_ip_masquerade: "true" ++ com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 ++ com.docker.network.bridge.name: docker0 ++ com.docker.network.driver.mtu: "1500" ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ description: Network configuration ++ required: true ++ tags: ++ - Network ++ description: Create a network. + /networks/{id}/connect: + post: +- summary: "Connect a container to a network" +- description: "The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container" +- operationId: "NetworkConnect" +- consumes: +- - "application/json" +- responses: +- 200: +- description: "No error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 403: +- description: "Operation forbidden" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "Network or container not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "Network ID or name" +- required: true +- type: "string" +- - name: "container" +- in: "body" ++ summary: Connect a container to a network ++ description: The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container ++ operationId: NetworkConnect ++ responses: ++ "200": ++ description: No error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "403": ++ description: Operation forbidden ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: Network or container not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: Network ID or name + required: true + schema: +- $ref: "#/definitions/NetworkConnectRequest" +- tags: ["Network"] +- ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/NetworkConnectRequest" ++ required: true ++ tags: ++ - Network + /networks/{id}/disconnect: + post: +- summary: "Disconnect a container from a network" +- operationId: "NetworkDisconnect" +- consumes: +- - "application/json" ++ summary: Disconnect a container from a network ++ operationId: NetworkDisconnect + responses: +- 200: +- description: "No error" +- 403: +- description: "Operation not supported for swarm scoped networks" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "Network or container not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: No error ++ "403": ++ description: Operation not supported for swarm scoped networks ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: Network or container not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" +- description: "Network ID or name" +- required: true +- type: "string" +- - name: "container" +- in: "body" ++ - name: id ++ in: path ++ description: Network ID or name + required: true + schema: +- $ref: "#/definitions/NetworkDisconnectRequest" +- tags: ["Network"] ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/NetworkDisconnectRequest" ++ required: true ++ tags: ++ - Network ++ description: Disconnect a container from a network. + /networks/prune: + post: +- summary: "Delete unused networks" +- produces: +- - "application/json" +- operationId: "NetworkPrune" ++ summary: Delete unused networks ++ operationId: NetworkPrune + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels. +- type: "string" +- responses: +- 200: +- description: "No error" +- schema: +- type: "object" +- title: "NetworkPruneResponse" +- properties: +- NetworksDeleted: +- description: "Networks that were deleted" +- type: "array" +- items: +- type: "string" +- 500: +- description: "Server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Network"] ++ type: string ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: NetworkPruneResponse ++ properties: ++ NetworksDeleted: ++ description: Networks that were deleted ++ type: array ++ items: ++ type: string ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Network ++ description: Delete unused networks. + /plugins: + get: +- summary: "List plugins" +- operationId: "PluginList" +- description: "Returns information about installed plugins." +- produces: ["application/json"] +- responses: +- 200: +- description: "No error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Plugin" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "filters" +- in: "query" +- type: "string" ++ summary: List plugins ++ operationId: PluginList ++ description: Returns information about installed plugins. ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Plugin" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the plugin list. +@@ -12043,396 +4648,469 @@ + + - `capability=` + - `enable=|` +- tags: ["Plugin"] +- ++ schema: ++ type: string ++ tags: ++ - Plugin + /plugins/privileges: + get: +- summary: "Get plugin privileges" +- operationId: "GetPluginPrivileges" ++ summary: Get plugin privileges ++ operationId: GetPluginPrivileges + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/PluginPrivilege" +- example: +- - Name: "network" +- Description: "" +- Value: +- - "host" +- - Name: "mount" +- Description: "" +- Value: +- - "/data" +- - Name: "device" +- Description: "" +- Value: +- - "/dev/cpu_dma_latency" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginPrivilege" ++ example: ++ - Name: network ++ Description: "" ++ Value: ++ - host ++ - Name: mount ++ Description: "" ++ Value: ++ - /data ++ - Name: device ++ Description: "" ++ Value: ++ - /dev/cpu_dma_latency ++ text/plain: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginPrivilege" ++ example: ++ - Name: network ++ Description: "" ++ Value: ++ - host ++ - Name: mount ++ Description: "" ++ Value: ++ - /data ++ - Name: device ++ Description: "" ++ Value: ++ - /dev/cpu_dma_latency ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "remote" +- in: "query" ++ - name: remote ++ in: query + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" ++ schema: ++ type: string + tags: +- - "Plugin" +- ++ - Plugin ++ description: Get plugin privileges. + /plugins/pull: + post: +- summary: "Install a plugin" +- operationId: "PluginPull" ++ summary: Install a plugin ++ operationId: PluginPull + description: | + Pulls and installs a plugin. After the plugin is installed, it can be + enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable). +- produces: +- - "application/json" + responses: +- 204: +- description: "no error" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "204": ++ description: no error ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "remote" +- in: "query" ++ - name: remote ++ in: query + description: | + Remote reference for plugin to install. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true +- type: "string" +- - name: "name" +- in: "query" ++ schema: ++ type: string ++ - name: name ++ in: query + description: | + Local name for the pulled plugin. + + The `:latest` tag is optional, and is used as the default if omitted. + required: false +- type: "string" +- - name: "X-Registry-Auth" +- in: "header" ++ schema: ++ type: string ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" +- - name: "body" +- in: "body" + schema: +- type: "array" +- items: +- $ref: "#/definitions/PluginPrivilege" +- example: +- - Name: "network" +- Description: "" +- Value: +- - "host" +- - Name: "mount" +- Description: "" +- Value: +- - "/data" +- - Name: "device" +- Description: "" +- Value: +- - "/dev/cpu_dma_latency" +- tags: ["Plugin"] ++ type: string ++ requestBody: ++ $ref: "#/components/requestBodies/PluginPrivilegeArray" ++ tags: ++ - Plugin + /plugins/{name}/json: + get: +- summary: "Inspect a plugin" +- operationId: "PluginInspect" ++ summary: Inspect a plugin ++ operationId: PluginInspect + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Plugin" +- 404: +- description: "plugin is not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Plugin" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/Plugin" ++ "404": ++ description: plugin is not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- tags: ["Plugin"] ++ schema: ++ type: string ++ tags: ++ - Plugin ++ description: Inspect a plugin. + /plugins/{name}: + delete: +- summary: "Remove a plugin" +- operationId: "PluginDelete" ++ summary: Remove a plugin ++ operationId: PluginDelete + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Plugin" +- 404: +- description: "plugin is not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Plugin" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/Plugin" ++ "404": ++ description: plugin is not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "force" +- in: "query" ++ schema: ++ type: string ++ - name: force ++ in: query + description: | + Disable the plugin before removing. This may result in issues if the + plugin is in use by a container. +- type: "boolean" +- default: false +- tags: ["Plugin"] ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Plugin ++ description: Remove a plugin. + /plugins/{name}/enable: + post: +- summary: "Enable a plugin" +- operationId: "PluginEnable" ++ summary: Enable a plugin ++ operationId: PluginEnable + responses: +- 200: +- description: "no error" +- 404: +- description: "plugin is not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ "404": ++ description: plugin is not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "timeout" +- in: "query" +- description: "Set the HTTP client timeout (in seconds)" +- type: "integer" +- default: 0 +- tags: ["Plugin"] ++ schema: ++ type: string ++ - name: timeout ++ in: query ++ description: Set the HTTP client timeout (in seconds) ++ schema: ++ type: integer ++ default: 0 ++ tags: ++ - Plugin ++ description: Enable a plugin. + /plugins/{name}/disable: + post: +- summary: "Disable a plugin" +- operationId: "PluginDisable" ++ summary: Disable a plugin ++ operationId: PluginDisable + responses: +- 200: +- description: "no error" +- 404: +- description: "plugin is not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ "404": ++ description: plugin is not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "force" +- in: "query" ++ schema: ++ type: string ++ - name: force ++ in: query + description: | + Force disable a plugin even if still in use. + required: false +- type: "boolean" +- tags: ["Plugin"] ++ schema: ++ type: boolean ++ tags: ++ - Plugin ++ description: Disable a plugin. + /plugins/{name}/upgrade: + post: +- summary: "Upgrade a plugin" +- operationId: "PluginUpgrade" ++ summary: Upgrade a plugin ++ operationId: PluginUpgrade + responses: +- 204: +- description: "no error" +- 404: +- description: "plugin not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "204": ++ description: no error ++ "404": ++ description: plugin not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "remote" +- in: "query" ++ schema: ++ type: string ++ - name: remote ++ in: query + description: | + Remote reference to upgrade to. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true +- type: "string" +- - name: "X-Registry-Auth" +- in: "header" ++ schema: ++ type: string ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" +- - name: "body" +- in: "body" + schema: +- type: "array" +- items: +- $ref: "#/definitions/PluginPrivilege" +- example: +- - Name: "network" +- Description: "" +- Value: +- - "host" +- - Name: "mount" +- Description: "" +- Value: +- - "/data" +- - Name: "device" +- Description: "" +- Value: +- - "/dev/cpu_dma_latency" +- tags: ["Plugin"] ++ type: string ++ requestBody: ++ $ref: "#/components/requestBodies/PluginPrivilegeArray" ++ tags: ++ - Plugin ++ description: Upgrade a plugin. + /plugins/create: + post: +- summary: "Create a plugin" +- operationId: "PluginCreate" +- consumes: +- - "application/x-tar" +- responses: +- 204: +- description: "no error" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ summary: Create a plugin ++ operationId: PluginCreate ++ responses: ++ "204": ++ description: no error ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "query" ++ - name: name ++ in: query + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "tarContext" +- in: "body" +- description: "Path to tar containing plugin rootfs and manifest" +- schema: +- type: "string" +- format: "binary" +- tags: ["Plugin"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/x-tar: ++ schema: ++ type: string ++ format: binary ++ description: Path to tar containing plugin rootfs and manifest ++ tags: ++ - Plugin ++ description: Create a plugin. + /plugins/{name}/push: + post: +- summary: "Push a plugin" +- operationId: "PluginPush" ++ summary: Push a plugin ++ operationId: PluginPush + description: | + Push a plugin to the registry. + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- responses: +- 200: +- description: "no error" +- 404: +- description: "plugin not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Plugin"] ++ type: string ++ responses: ++ "200": ++ description: no error ++ "404": ++ description: plugin not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Plugin + /plugins/{name}/set: + post: +- summary: "Configure a plugin" +- operationId: "PluginSet" +- consumes: +- - "application/json" ++ summary: Configure a plugin ++ operationId: PluginSet + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "body" +- in: "body" + schema: +- type: "array" +- items: +- type: "string" +- example: ["DEBUG=1"] +- responses: +- 204: +- description: "No error" +- 404: +- description: "Plugin not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Plugin"] ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ type: string ++ example: ++ - DEBUG=1 ++ responses: ++ "204": ++ description: No error ++ "404": ++ description: Plugin not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Plugin ++ description: Configure a plugin. + /nodes: + get: +- summary: "List nodes" +- operationId: "NodeList" ++ summary: List nodes ++ operationId: NodeList + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Node" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Node" ++ text/plain: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Node" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + Filters to process on the nodes list, encoded as JSON (a `map[string][]string`). + +@@ -12443,468 +5121,736 @@ + - `name=` + - `node.label=` + - `role=`(`manager`|`worker`)` +- type: "string" +- tags: ["Node"] ++ schema: ++ type: string ++ tags: ++ - Node ++ description: List nodes. + /nodes/{id}: + get: +- summary: "Inspect a node" +- operationId: "NodeInspect" ++ summary: Inspect a node ++ operationId: NodeInspect + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Node" +- 404: +- description: "no such node" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Node" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/Node" ++ "404": ++ description: no such node ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" +- description: "The ID or name of the node" +- type: "string" ++ - name: id ++ in: path ++ description: The ID or name of the node + required: true +- tags: ["Node"] ++ schema: ++ type: string ++ tags: ++ - Node ++ description: Inspect a node. + delete: +- summary: "Delete a node" +- operationId: "NodeDelete" ++ summary: Delete a node ++ operationId: NodeDelete + responses: +- 200: +- description: "no error" +- 404: +- description: "no such node" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "The ID or name of the node" +- type: "string" +- required: true +- - name: "force" +- in: "query" +- description: "Force remove a node from the swarm" +- default: false +- type: "boolean" +- tags: ["Node"] ++ "200": ++ description: no error ++ "404": ++ description: no such node ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: The ID or name of the node ++ required: true ++ schema: ++ type: string ++ - name: force ++ in: query ++ description: Force remove a node from the swarm ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Node ++ description: Delete a node. + /nodes/{id}/update: + post: +- summary: "Update a node" +- operationId: "NodeUpdate" ++ summary: Update a node ++ operationId: NodeUpdate + responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such node" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "The ID of the node" +- type: "string" +- required: true +- - name: "body" +- in: "body" +- schema: +- $ref: "#/definitions/NodeSpec" +- - name: "version" +- in: "query" ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such node ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: The ID of the node ++ required: true ++ schema: ++ type: string ++ - name: version ++ in: query + description: | + The version number of the node object being updated. This is required + to avoid conflicting writes. +- type: "integer" +- format: "int64" + required: true +- tags: ["Node"] ++ schema: ++ type: integer ++ format: int64 ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/NodeSpec" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/NodeSpec" ++ tags: ++ - Node ++ description: Update a node. + /swarm: + get: +- summary: "Inspect swarm" +- operationId: "SwarmInspect" ++ summary: Inspect swarm ++ operationId: SwarmInspect + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Swarm" +- 404: +- description: "no such swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Swarm"] ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Swarm" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/Swarm" ++ "404": ++ description: no such swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Swarm ++ description: Inspect swarm. + /swarm/init: + post: +- summary: "Initialize a new swarm" +- operationId: "SwarmInit" +- produces: +- - "application/json" +- - "text/plain" ++ summary: Initialize a new swarm ++ operationId: SwarmInit + responses: +- 200: +- description: "no error" +- schema: +- description: "The node ID" +- type: "string" +- example: "7v2t30z9blmxuhnyo6s4cpenp" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is already part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "body" +- in: "body" +- required: true +- schema: +- type: "object" +- title: "SwarmInitRequest" +- properties: +- ListenAddr: +- description: | +- Listen address used for inter-manager communication, as well +- as determining the networking interface used for the VXLAN +- Tunnel Endpoint (VTEP). This can either be an address/port +- combination in the form `192.168.1.1:4567`, or an interface +- followed by a port number, like `eth0:4567`. If the port number +- is omitted, the default swarm listening port is used. +- type: "string" +- AdvertiseAddr: +- description: | +- Externally reachable address advertised to other nodes. This +- can either be an address/port combination in the form +- `192.168.1.1:4567`, or an interface followed by a port number, +- like `eth0:4567`. If the port number is omitted, the port +- number from the listen address is used. If `AdvertiseAddr` is +- not specified, it will be automatically detected when possible. +- type: "string" +- DataPathAddr: +- description: | +- Address or interface to use for data path traffic (format: +- ``), for example, `192.168.1.1`, or an interface, +- like `eth0`. If `DataPathAddr` is unspecified, the same address +- as `AdvertiseAddr` is used. +- +- The `DataPathAddr` specifies the address that global scope +- network drivers will publish towards other nodes in order to +- reach the containers running on this node. Using this parameter +- it is possible to separate the container data traffic from the +- management traffic of the cluster. +- type: "string" +- DataPathPort: +- description: | +- DataPathPort specifies the data path port number for data traffic. +- Acceptable port range is 1024 to 49151. +- if no port is set or is set to 0, default port 4789 will be used. +- type: "integer" +- format: "uint32" +- DefaultAddrPool: +- description: | +- Default Address Pool specifies default subnet pools for global +- scope networks. +- type: "array" +- items: +- type: "string" +- example: ["10.10.0.0/16", "20.20.0.0/16"] +- ForceNewCluster: +- description: "Force creation of a new swarm." +- type: "boolean" +- SubnetSize: +- description: | +- SubnetSize specifies the subnet size of the networks created +- from the default subnet pool. +- type: "integer" +- format: "uint32" +- Spec: +- $ref: "#/definitions/SwarmSpec" +- example: +- ListenAddr: "0.0.0.0:2377" +- AdvertiseAddr: "192.168.1.1:2377" +- DataPathPort: 4789 +- DefaultAddrPool: ["10.10.0.0/8", "20.20.0.0/8"] +- SubnetSize: 24 +- ForceNewCluster: false +- Spec: +- Orchestration: {} +- Raft: {} +- Dispatcher: {} +- CAConfig: {} +- EncryptionConfig: +- AutoLockManagers: false +- tags: ["Swarm"] ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ description: The node ID ++ type: string ++ example: 7v2t30z9blmxuhnyo6s4cpenp ++ text/plain: ++ schema: ++ description: The node ID ++ type: string ++ example: 7v2t30z9blmxuhnyo6s4cpenp ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is already part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: SwarmInitRequest ++ properties: ++ ListenAddr: ++ description: | ++ Listen address used for inter-manager communication, as well ++ as determining the networking interface used for the VXLAN ++ Tunnel Endpoint (VTEP). This can either be an address/port ++ combination in the form `192.168.1.1:4567`, or an interface ++ followed by a port number, like `eth0:4567`. If the port number ++ is omitted, the default swarm listening port is used. ++ type: string ++ AdvertiseAddr: ++ description: | ++ Externally reachable address advertised to other nodes. This ++ can either be an address/port combination in the form ++ `192.168.1.1:4567`, or an interface followed by a port number, ++ like `eth0:4567`. If the port number is omitted, the port ++ number from the listen address is used. If `AdvertiseAddr` is ++ not specified, it will be automatically detected when possible. ++ type: string ++ DataPathAddr: ++ description: | ++ Address or interface to use for data path traffic (format: ++ ``), for example, `192.168.1.1`, or an interface, ++ like `eth0`. If `DataPathAddr` is unspecified, the same address ++ as `AdvertiseAddr` is used. ++ ++ The `DataPathAddr` specifies the address that global scope ++ network drivers will publish towards other nodes in order to ++ reach the containers running on this node. Using this parameter ++ it is possible to separate the container data traffic from the ++ management traffic of the cluster. ++ type: string ++ DataPathPort: ++ description: | ++ DataPathPort specifies the data path port number for data traffic. ++ Acceptable port range is 1024 to 49151. ++ if no port is set or is set to 0, default port 4789 will be used. ++ type: integer ++ format: uint32 ++ DefaultAddrPool: ++ description: | ++ Default Address Pool specifies default subnet pools for global ++ scope networks. ++ type: array ++ items: ++ type: string ++ example: ++ - 10.10.0.0/16 ++ - 20.20.0.0/16 ++ ForceNewCluster: ++ description: Force creation of a new swarm. ++ type: boolean ++ SubnetSize: ++ description: | ++ SubnetSize specifies the subnet size of the networks created ++ from the default subnet pool. ++ type: integer ++ format: uint32 ++ Spec: ++ $ref: "#/components/schemas/SwarmSpec" ++ example: ++ ListenAddr: 0.0.0.0:2377 ++ AdvertiseAddr: 192.168.1.1:2377 ++ DataPathPort: 4789 ++ DefaultAddrPool: ++ - 10.10.0.0/8 ++ - 20.20.0.0/8 ++ SubnetSize: 24 ++ ForceNewCluster: false ++ Spec: ++ Orchestration: {} ++ Raft: {} ++ Dispatcher: {} ++ CAConfig: {} ++ EncryptionConfig: ++ AutoLockManagers: false ++ text/plain: ++ schema: ++ type: object ++ title: SwarmInitRequest ++ properties: ++ ListenAddr: ++ description: | ++ Listen address used for inter-manager communication, as well ++ as determining the networking interface used for the VXLAN ++ Tunnel Endpoint (VTEP). This can either be an address/port ++ combination in the form `192.168.1.1:4567`, or an interface ++ followed by a port number, like `eth0:4567`. If the port number ++ is omitted, the default swarm listening port is used. ++ type: string ++ AdvertiseAddr: ++ description: | ++ Externally reachable address advertised to other nodes. This ++ can either be an address/port combination in the form ++ `192.168.1.1:4567`, or an interface followed by a port number, ++ like `eth0:4567`. If the port number is omitted, the port ++ number from the listen address is used. If `AdvertiseAddr` is ++ not specified, it will be automatically detected when possible. ++ type: string ++ DataPathAddr: ++ description: | ++ Address or interface to use for data path traffic (format: ++ ``), for example, `192.168.1.1`, or an interface, ++ like `eth0`. If `DataPathAddr` is unspecified, the same address ++ as `AdvertiseAddr` is used. ++ ++ The `DataPathAddr` specifies the address that global scope ++ network drivers will publish towards other nodes in order to ++ reach the containers running on this node. Using this parameter ++ it is possible to separate the container data traffic from the ++ management traffic of the cluster. ++ type: string ++ DataPathPort: ++ description: | ++ DataPathPort specifies the data path port number for data traffic. ++ Acceptable port range is 1024 to 49151. ++ if no port is set or is set to 0, default port 4789 will be used. ++ type: integer ++ format: uint32 ++ DefaultAddrPool: ++ description: | ++ Default Address Pool specifies default subnet pools for global ++ scope networks. ++ type: array ++ items: ++ type: string ++ example: ++ - 10.10.0.0/16 ++ - 20.20.0.0/16 ++ ForceNewCluster: ++ description: Force creation of a new swarm. ++ type: boolean ++ SubnetSize: ++ description: | ++ SubnetSize specifies the subnet size of the networks created ++ from the default subnet pool. ++ type: integer ++ format: uint32 ++ Spec: ++ $ref: "#/components/schemas/SwarmSpec" ++ example: ++ ListenAddr: 0.0.0.0:2377 ++ AdvertiseAddr: 192.168.1.1:2377 ++ DataPathPort: 4789 ++ DefaultAddrPool: ++ - 10.10.0.0/8 ++ - 20.20.0.0/8 ++ SubnetSize: 24 ++ ForceNewCluster: false ++ Spec: ++ Orchestration: {} ++ Raft: {} ++ Dispatcher: {} ++ CAConfig: {} ++ EncryptionConfig: ++ AutoLockManagers: false ++ required: true ++ tags: ++ - Swarm ++ description: Initialize a new swarm. + /swarm/join: + post: +- summary: "Join an existing swarm" +- operationId: "SwarmJoin" ++ summary: Join an existing swarm ++ operationId: SwarmJoin + responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is already part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "body" +- in: "body" +- required: true +- schema: +- type: "object" +- title: "SwarmJoinRequest" +- properties: +- ListenAddr: +- description: | +- Listen address used for inter-manager communication if the node +- gets promoted to manager, as well as determining the networking +- interface used for the VXLAN Tunnel Endpoint (VTEP). This is +- required for joining a swarm. If the port number is omitted, +- the default swarm listening port is used. +- type: "string" +- AdvertiseAddr: +- description: | +- Externally reachable address advertised to other nodes. This +- can either be an address/port combination in the form +- `192.168.1.1:4567`, or an interface followed by a port number, +- like `eth0:4567`. If the port number is omitted, the port +- number from the listen address is used. If `AdvertiseAddr` is +- not specified, it will be automatically detected when possible. +- type: "string" +- DataPathAddr: +- description: | +- Address or interface to use for data path traffic (format: +- ``), for example, `192.168.1.1`, or an interface, +- like `eth0`. If `DataPathAddr` is unspecified, the same address +- as `AdvertiseAddr` is used. +- +- The `DataPathAddr` specifies the address that global scope +- network drivers will publish towards other nodes in order to +- reach the containers running on this node. Using this parameter +- it is possible to separate the container data traffic from the +- management traffic of the cluster. +- +- type: "string" +- RemoteAddrs: +- description: | +- Addresses of manager nodes already participating in the swarm. +- type: "array" +- items: +- type: "string" +- JoinToken: +- description: "Secret token for joining this swarm." +- type: "string" +- required: [ListenAddr, RemoteAddrs, JoinToken] +- example: +- ListenAddr: "0.0.0.0:2377" +- AdvertiseAddr: "192.168.1.1:2377" +- DataPathAddr: "192.168.1.1" +- RemoteAddrs: +- - "node1:2377" +- JoinToken: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" +- tags: ["Swarm"] ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is already part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: SwarmJoinRequest ++ properties: ++ ListenAddr: ++ description: | ++ Listen address used for inter-manager communication if the node ++ gets promoted to manager, as well as determining the networking ++ interface used for the VXLAN Tunnel Endpoint (VTEP). This is ++ required for joining a swarm. If the port number is omitted, ++ the default swarm listening port is used. ++ type: string ++ AdvertiseAddr: ++ description: | ++ Externally reachable address advertised to other nodes. This ++ can either be an address/port combination in the form ++ `192.168.1.1:4567`, or an interface followed by a port number, ++ like `eth0:4567`. If the port number is omitted, the port ++ number from the listen address is used. If `AdvertiseAddr` is ++ not specified, it will be automatically detected when possible. ++ type: string ++ DataPathAddr: ++ description: | ++ Address or interface to use for data path traffic (format: ++ ``), for example, `192.168.1.1`, or an interface, ++ like `eth0`. If `DataPathAddr` is unspecified, the same address ++ as `AdvertiseAddr` is used. ++ ++ The `DataPathAddr` specifies the address that global scope ++ network drivers will publish towards other nodes in order to ++ reach the containers running on this node. Using this parameter ++ it is possible to separate the container data traffic from the ++ management traffic of the cluster. ++ type: string ++ RemoteAddrs: ++ description: | ++ Addresses of manager nodes already participating in the swarm. ++ type: array ++ items: ++ type: string ++ JoinToken: ++ description: Secret token for joining this swarm. ++ type: string ++ required: ++ - ListenAddr ++ - RemoteAddrs ++ - JoinToken ++ example: ++ ListenAddr: 0.0.0.0:2377 ++ AdvertiseAddr: 192.168.1.1:2377 ++ DataPathAddr: 192.168.1.1 ++ RemoteAddrs: ++ - node1:2377 ++ JoinToken: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 ++ text/plain: ++ schema: ++ type: object ++ title: SwarmJoinRequest ++ properties: ++ ListenAddr: ++ description: | ++ Listen address used for inter-manager communication if the node ++ gets promoted to manager, as well as determining the networking ++ interface used for the VXLAN Tunnel Endpoint (VTEP). This is ++ required for joining a swarm. If the port number is omitted, ++ the default swarm listening port is used. ++ type: string ++ AdvertiseAddr: ++ description: | ++ Externally reachable address advertised to other nodes. This ++ can either be an address/port combination in the form ++ `192.168.1.1:4567`, or an interface followed by a port number, ++ like `eth0:4567`. If the port number is omitted, the port ++ number from the listen address is used. If `AdvertiseAddr` is ++ not specified, it will be automatically detected when possible. ++ type: string ++ DataPathAddr: ++ description: | ++ Address or interface to use for data path traffic (format: ++ ``), for example, `192.168.1.1`, or an interface, ++ like `eth0`. If `DataPathAddr` is unspecified, the same address ++ as `AdvertiseAddr` is used. ++ ++ The `DataPathAddr` specifies the address that global scope ++ network drivers will publish towards other nodes in order to ++ reach the containers running on this node. Using this parameter ++ it is possible to separate the container data traffic from the ++ management traffic of the cluster. ++ type: string ++ RemoteAddrs: ++ description: | ++ Addresses of manager nodes already participating in the swarm. ++ type: array ++ items: ++ type: string ++ JoinToken: ++ description: Secret token for joining this swarm. ++ type: string ++ required: ++ - ListenAddr ++ - RemoteAddrs ++ - JoinToken ++ example: ++ ListenAddr: 0.0.0.0:2377 ++ AdvertiseAddr: 192.168.1.1:2377 ++ DataPathAddr: 192.168.1.1 ++ RemoteAddrs: ++ - node1:2377 ++ JoinToken: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 ++ required: true ++ tags: ++ - Swarm ++ description: Join an existing swarm. + /swarm/leave: + post: +- summary: "Leave a swarm" +- operationId: "SwarmLeave" ++ summary: Leave a swarm ++ operationId: SwarmLeave + responses: +- 200: +- description: "no error" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "force" ++ - name: force + description: | + Force leave swarm, even if this is the last manager or that it will + break the cluster. +- in: "query" +- type: "boolean" +- default: false +- tags: ["Swarm"] ++ in: query ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Swarm ++ description: Leave a swarm. + /swarm/update: + post: +- summary: "Update a swarm" +- operationId: "SwarmUpdate" ++ summary: Update a swarm ++ operationId: SwarmUpdate + responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "body" +- in: "body" +- required: true +- schema: +- $ref: "#/definitions/SwarmSpec" +- - name: "version" +- in: "query" ++ - name: version ++ in: query + description: | + The version number of the swarm object being updated. This is + required to avoid conflicting writes. +- type: "integer" +- format: "int64" + required: true +- - name: "rotateWorkerToken" +- in: "query" +- description: "Rotate the worker join token." +- type: "boolean" +- default: false +- - name: "rotateManagerToken" +- in: "query" +- description: "Rotate the manager join token." +- type: "boolean" +- default: false +- - name: "rotateManagerUnlockKey" +- in: "query" +- description: "Rotate the manager unlock key." +- type: "boolean" +- default: false +- tags: ["Swarm"] ++ schema: ++ type: integer ++ format: int64 ++ - name: rotateWorkerToken ++ in: query ++ description: Rotate the worker join token. ++ schema: ++ type: boolean ++ default: false ++ - name: rotateManagerToken ++ in: query ++ description: Rotate the manager join token. ++ schema: ++ type: boolean ++ default: false ++ - name: rotateManagerUnlockKey ++ in: query ++ description: Rotate the manager unlock key. ++ schema: ++ type: boolean ++ default: false ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/SwarmSpec" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/SwarmSpec" ++ required: true ++ tags: ++ - Swarm ++ description: Update a swarm. + /swarm/unlockkey: + get: +- summary: "Get the unlock key" +- operationId: "SwarmUnlockkey" +- consumes: +- - "application/json" ++ summary: Get the unlock key ++ operationId: SwarmUnlockkey + responses: +- 200: +- description: "no error" +- schema: +- type: "object" +- title: "UnlockKeyResponse" +- properties: +- UnlockKey: +- description: "The swarm's unlock key." +- type: "string" +- example: +- UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Swarm"] ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: UnlockKeyResponse ++ properties: ++ UnlockKey: ++ description: The swarm's unlock key. ++ type: string ++ example: ++ UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 ++ text/plain: ++ schema: ++ type: object ++ title: UnlockKeyResponse ++ properties: ++ UnlockKey: ++ description: The swarm's unlock key. ++ type: string ++ example: ++ UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Swarm ++ description: Get the unlock key. + /swarm/unlock: + post: +- summary: "Unlock a locked manager" +- operationId: "SwarmUnlock" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- parameters: +- - name: "body" +- in: "body" +- required: true +- schema: +- type: "object" +- title: "SwarmUnlockRequest" +- properties: +- UnlockKey: +- description: "The swarm's unlock key." +- type: "string" +- example: +- UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" +- responses: +- 200: +- description: "no error" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Swarm"] ++ summary: Unlock a locked manager ++ operationId: SwarmUnlock ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: SwarmUnlockRequest ++ properties: ++ UnlockKey: ++ description: The swarm's unlock key. ++ type: string ++ example: ++ UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 ++ required: true ++ responses: ++ "200": ++ description: no error ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Swarm ++ description: Unlock a locked manager. + /services: + get: +- summary: "List services" +- operationId: "ServiceList" ++ summary: List services ++ operationId: ServiceList + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Service" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "filters" +- in: "query" +- type: "string" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Service" ++ text/plain: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Service" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the services list. +@@ -12915,265 +5861,276 @@ + - `label=` + - `mode=["replicated"|"global"]` + - `name=` +- - name: "status" +- in: "query" +- type: "boolean" ++ schema: ++ type: string ++ - name: status ++ in: query + description: | + Include service status, with count of running and desired tasks. +- tags: ["Service"] ++ schema: ++ type: boolean ++ tags: ++ - Service ++ description: List services. + /services/create: + post: +- summary: "Create a service" +- operationId: "ServiceCreate" +- consumes: +- - "application/json" +- produces: +- - "application/json" ++ summary: Create a service ++ operationId: ServiceCreate + responses: +- 201: +- description: "no error" +- schema: +- $ref: "#/definitions/ServiceCreateResponse" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 403: +- description: "network is not eligible for services" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 409: +- description: "name conflicts with an existing service" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "201": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ServiceCreateResponse" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "403": ++ description: network is not eligible for services ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "409": ++ description: name conflicts with an existing service ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "body" +- in: "body" +- required: true +- schema: +- allOf: +- - $ref: "#/definitions/ServiceSpec" +- - type: "object" +- example: +- Name: "web" +- TaskTemplate: +- ContainerSpec: +- Image: "nginx:alpine" +- Mounts: +- - +- ReadOnly: true +- Source: "web-data" +- Target: "/usr/share/nginx/html" +- Type: "volume" +- VolumeOptions: +- DriverConfig: {} +- Labels: +- com.example.something: "something-value" +- Hosts: ["10.10.10.10 host1", "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2"] +- User: "33" +- DNSConfig: +- Nameservers: ["8.8.8.8"] +- Search: ["example.org"] +- Options: ["timeout:3"] +- Secrets: +- - +- File: +- Name: "www.example.org.key" +- UID: "33" +- GID: "33" +- Mode: 384 +- SecretID: "fpjqlhnwb19zds35k8wn80lq9" +- SecretName: "example_org_domain_key" +- OomScoreAdj: 0 +- LogDriver: +- Name: "json-file" +- Options: +- max-file: "3" +- max-size: "10M" +- Placement: {} +- Resources: +- Limits: +- MemoryBytes: 104857600 +- Reservations: {} +- RestartPolicy: +- Condition: "on-failure" +- Delay: 10000000000 +- MaxAttempts: 10 +- Mode: +- Replicated: +- Replicas: 4 +- UpdateConfig: +- Parallelism: 2 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- RollbackConfig: +- Parallelism: 1 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- EndpointSpec: +- Ports: +- - +- Protocol: "tcp" +- PublishedPort: 8080 +- TargetPort: 80 +- Labels: +- foo: "bar" +- - name: "X-Registry-Auth" +- in: "header" ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" +- tags: ["Service"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/ServiceSpec" ++ - type: object ++ example: ++ Name: web ++ TaskTemplate: ++ ContainerSpec: ++ Image: nginx:alpine ++ Mounts: ++ - ReadOnly: true ++ Source: web-data ++ Target: /usr/share/nginx/html ++ Type: volume ++ VolumeOptions: ++ DriverConfig: {} ++ Labels: ++ com.example.something: something-value ++ Hosts: ++ - 10.10.10.10 host1 ++ - ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2 ++ User: "33" ++ DNSConfig: ++ Nameservers: ++ - 8.8.8.8 ++ Search: ++ - example.org ++ Options: ++ - timeout:3 ++ Secrets: ++ - File: ++ Name: www.example.org.key ++ UID: "33" ++ GID: "33" ++ Mode: 384 ++ SecretID: fpjqlhnwb19zds35k8wn80lq9 ++ SecretName: example_org_domain_key ++ OomScoreAdj: 0 ++ LogDriver: ++ Name: json-file ++ Options: ++ max-file: "3" ++ max-size: 10M ++ Placement: {} ++ Resources: ++ Limits: ++ MemoryBytes: 104857600 ++ Reservations: {} ++ RestartPolicy: ++ Condition: on-failure ++ Delay: 10000000000 ++ MaxAttempts: 10 ++ Mode: ++ Replicated: ++ Replicas: 4 ++ UpdateConfig: ++ Parallelism: 2 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ RollbackConfig: ++ Parallelism: 1 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ EndpointSpec: ++ Ports: ++ - Protocol: tcp ++ PublishedPort: 8080 ++ TargetPort: 80 ++ Labels: ++ foo: bar ++ required: true ++ tags: ++ - Service ++ description: Create a service. + /services/{id}: + get: +- summary: "Inspect a service" +- operationId: "ServiceInspect" ++ summary: Inspect a service ++ operationId: ServiceInspect + responses: +- 200: +- description: "no error" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Service" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/Service" ++ "404": ++ description: no such service ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: ID or name of service. ++ required: true + schema: +- $ref: "#/definitions/Service" +- 404: +- description: "no such service" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "ID or name of service." +- required: true +- type: "string" +- - name: "insertDefaults" +- in: "query" +- description: "Fill empty fields with default values." +- type: "boolean" +- default: false +- tags: ["Service"] ++ type: string ++ - name: insertDefaults ++ in: query ++ description: Fill empty fields with default values. ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Service ++ description: Inspect a service. + delete: +- summary: "Delete a service" +- operationId: "ServiceDelete" ++ summary: Delete a service ++ operationId: ServiceDelete + responses: +- 200: +- description: "no error" +- 404: +- description: "no such service" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "ID or name of service." ++ "200": ++ description: no error ++ "404": ++ description: no such service ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: ID or name of service. + required: true +- type: "string" +- tags: ["Service"] ++ schema: ++ type: string ++ tags: ++ - Service ++ description: Delete a service. + /services/{id}/update: + post: +- summary: "Update a service" +- operationId: "ServiceUpdate" +- consumes: ["application/json"] +- produces: ["application/json"] ++ summary: Update a service ++ operationId: ServiceUpdate + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/ServiceUpdateResponse" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such service" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ServiceUpdateResponse" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such service ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" +- description: "ID or name of service." +- required: true +- type: "string" +- - name: "body" +- in: "body" ++ - name: id ++ in: path ++ description: ID or name of service. + required: true + schema: +- allOf: +- - $ref: "#/definitions/ServiceSpec" +- - type: "object" +- example: +- Name: "top" +- TaskTemplate: +- ContainerSpec: +- Image: "busybox" +- Args: +- - "top" +- OomScoreAdj: 0 +- Resources: +- Limits: {} +- Reservations: {} +- RestartPolicy: +- Condition: "any" +- MaxAttempts: 0 +- Placement: {} +- ForceUpdate: 0 +- Mode: +- Replicated: +- Replicas: 1 +- UpdateConfig: +- Parallelism: 2 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- RollbackConfig: +- Parallelism: 1 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- EndpointSpec: +- Mode: "vip" +- +- - name: "version" +- in: "query" ++ type: string ++ - name: version ++ in: query + description: | + The version number of the service object being updated. This is + required to avoid conflicting writes. +@@ -13181,247 +6138,321 @@ + service *before* the update. You can find the current version by + calling `GET /services/{id}` + required: true +- type: "integer" +- - name: "registryAuthFrom" +- in: "query" ++ schema: ++ type: integer ++ - name: registryAuthFrom ++ in: query + description: | + If the `X-Registry-Auth` header is not specified, this parameter + indicates where to find registry authorization credentials. +- type: "string" +- enum: ["spec", "previous-spec"] +- default: "spec" +- - name: "rollback" +- in: "query" ++ schema: ++ type: string ++ enum: ++ - spec ++ - previous-spec ++ default: spec ++ - name: rollback ++ in: query + description: | + Set to this parameter to `previous` to cause a server-side rollback + to the previous service spec. The supplied spec will be ignored in + this case. +- type: "string" +- - name: "X-Registry-Auth" +- in: "header" ++ schema: ++ type: string ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" +- +- tags: ["Service"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/ServiceSpec" ++ - type: object ++ example: ++ Name: top ++ TaskTemplate: ++ ContainerSpec: ++ Image: busybox ++ Args: ++ - top ++ OomScoreAdj: 0 ++ Resources: ++ Limits: {} ++ Reservations: {} ++ RestartPolicy: ++ Condition: any ++ MaxAttempts: 0 ++ Placement: {} ++ ForceUpdate: 0 ++ Mode: ++ Replicated: ++ Replicas: 1 ++ UpdateConfig: ++ Parallelism: 2 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ RollbackConfig: ++ Parallelism: 1 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ EndpointSpec: ++ Mode: vip ++ required: true ++ tags: ++ - Service ++ description: Update a service. + /services/{id}/logs: + get: +- summary: "Get service logs" ++ summary: Get service logs + description: | + Get `stdout` and `stderr` logs from a service. See also + [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. +- produces: +- - "application/vnd.docker.raw-stream" +- - "application/vnd.docker.multiplexed-stream" +- operationId: "ServiceLogs" +- responses: +- 200: +- description: "logs returned as a stream in response body" +- schema: +- type: "string" +- format: "binary" +- 404: +- description: "no such service" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such service: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the service" +- type: "string" +- - name: "details" +- in: "query" +- description: "Show service context and extra details provided to logs." +- type: "boolean" +- default: false +- - name: "follow" +- in: "query" +- description: "Keep connection after returning logs." +- type: "boolean" +- default: false +- - name: "stdout" +- in: "query" +- description: "Return logs from `stdout`" +- type: "boolean" +- default: false +- - name: "stderr" +- in: "query" +- description: "Return logs from `stderr`" +- type: "boolean" +- default: false +- - name: "since" +- in: "query" +- description: "Only return logs since this time, as a UNIX timestamp" +- type: "integer" +- default: 0 +- - name: "timestamps" +- in: "query" +- description: "Add timestamps to every log line" +- type: "boolean" +- default: false +- - name: "tail" +- in: "query" ++ operationId: ServiceLogs ++ responses: ++ "200": ++ description: logs returned as a stream in response body ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ type: string ++ format: binary ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ type: string ++ format: binary ++ "404": ++ description: no such service ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such service: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the service ++ schema: ++ type: string ++ - name: details ++ in: query ++ description: Show service context and extra details provided to logs. ++ schema: ++ type: boolean ++ default: false ++ - name: follow ++ in: query ++ description: Keep connection after returning logs. ++ schema: ++ type: boolean ++ default: false ++ - name: stdout ++ in: query ++ description: Return logs from `stdout` ++ schema: ++ type: boolean ++ default: false ++ - name: stderr ++ in: query ++ description: Return logs from `stderr` ++ schema: ++ type: boolean ++ default: false ++ - name: since ++ in: query ++ description: Only return logs since this time, as a UNIX timestamp ++ schema: ++ type: integer ++ default: 0 ++ - name: timestamps ++ in: query ++ description: Add timestamps to every log line ++ schema: ++ type: boolean ++ default: false ++ - name: tail ++ in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. +- type: "string" +- default: "all" +- tags: ["Service"] ++ schema: ++ type: string ++ default: all ++ tags: ++ - Service + /tasks: + get: +- summary: "List tasks" +- operationId: "TaskList" +- produces: +- - "application/json" ++ summary: List tasks ++ operationId: TaskList + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Task" +- example: +- - ID: "0kzzo1i0y4jz6027t0k7aezc7" +- Version: +- Index: 71 +- CreatedAt: "2016-06-07T21:07:31.171892745Z" +- UpdatedAt: "2016-06-07T21:07:31.376370513Z" +- Spec: +- ContainerSpec: +- Image: "redis" +- Resources: +- Limits: {} +- Reservations: {} +- RestartPolicy: +- Condition: "any" +- MaxAttempts: 0 +- Placement: {} +- ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" +- Slot: 1 +- NodeID: "60gvrl6tm78dmak4yl7srz94v" +- Status: +- Timestamp: "2016-06-07T21:07:31.290032978Z" +- State: "running" +- Message: "started" +- ContainerStatus: +- ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035" +- PID: 677 +- DesiredState: "running" +- NetworksAttachments: +- - Network: +- ID: "4qvuz4ko70xaltuqbt8956gd1" +- Version: +- Index: 18 +- CreatedAt: "2016-06-07T20:31:11.912919752Z" +- UpdatedAt: "2016-06-07T21:07:29.955277358Z" +- Spec: +- Name: "ingress" +- Labels: +- com.docker.swarm.internal: "true" +- DriverConfiguration: {} +- IPAMOptions: +- Driver: {} +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- DriverState: +- Name: "overlay" +- Options: +- com.docker.network.driver.overlay.vxlanid_list: "256" +- IPAMOptions: +- Driver: +- Name: "default" +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- Addresses: +- - "10.255.0.10/16" +- - ID: "1yljwbmlr8er2waf8orvqpwms" +- Version: +- Index: 30 +- CreatedAt: "2016-06-07T21:07:30.019104782Z" +- UpdatedAt: "2016-06-07T21:07:30.231958098Z" +- Name: "hopeful_cori" +- Spec: +- ContainerSpec: +- Image: "redis" +- Resources: +- Limits: {} +- Reservations: {} +- RestartPolicy: +- Condition: "any" +- MaxAttempts: 0 +- Placement: {} +- ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" +- Slot: 1 +- NodeID: "60gvrl6tm78dmak4yl7srz94v" +- Status: +- Timestamp: "2016-06-07T21:07:30.202183143Z" +- State: "shutdown" +- Message: "shutdown" +- ContainerStatus: +- ContainerID: "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" +- DesiredState: "shutdown" +- NetworksAttachments: +- - Network: +- ID: "4qvuz4ko70xaltuqbt8956gd1" +- Version: +- Index: 18 +- CreatedAt: "2016-06-07T20:31:11.912919752Z" +- UpdatedAt: "2016-06-07T21:07:29.955277358Z" +- Spec: +- Name: "ingress" +- Labels: +- com.docker.swarm.internal: "true" +- DriverConfiguration: {} +- IPAMOptions: +- Driver: {} +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- DriverState: +- Name: "overlay" +- Options: +- com.docker.network.driver.overlay.vxlanid_list: "256" +- IPAMOptions: +- Driver: +- Name: "default" +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- Addresses: +- - "10.255.0.5/16" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "filters" +- in: "query" +- type: "string" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Task" ++ example: ++ - ID: 0kzzo1i0y4jz6027t0k7aezc7 ++ Version: ++ Index: 71 ++ CreatedAt: 2016-06-07T21:07:31.171892745Z ++ UpdatedAt: 2016-06-07T21:07:31.376370513Z ++ Spec: ++ ContainerSpec: ++ Image: redis ++ Resources: ++ Limits: {} ++ Reservations: {} ++ RestartPolicy: ++ Condition: any ++ MaxAttempts: 0 ++ Placement: {} ++ ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz ++ Slot: 1 ++ NodeID: 60gvrl6tm78dmak4yl7srz94v ++ Status: ++ Timestamp: 2016-06-07T21:07:31.290032978Z ++ State: running ++ Message: started ++ ContainerStatus: ++ ContainerID: e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035 ++ PID: 677 ++ DesiredState: running ++ NetworksAttachments: ++ - Network: ++ ID: 4qvuz4ko70xaltuqbt8956gd1 ++ Version: ++ Index: 18 ++ CreatedAt: 2016-06-07T20:31:11.912919752Z ++ UpdatedAt: 2016-06-07T21:07:29.955277358Z ++ Spec: ++ Name: ingress ++ Labels: ++ com.docker.swarm.internal: "true" ++ DriverConfiguration: {} ++ IPAMOptions: ++ Driver: {} ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ DriverState: ++ Name: overlay ++ Options: ++ com.docker.network.driver.overlay.vxlanid_list: "256" ++ IPAMOptions: ++ Driver: ++ Name: default ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ Addresses: ++ - 10.255.0.10/16 ++ - ID: 1yljwbmlr8er2waf8orvqpwms ++ Version: ++ Index: 30 ++ CreatedAt: 2016-06-07T21:07:30.019104782Z ++ UpdatedAt: 2016-06-07T21:07:30.231958098Z ++ Name: hopeful_cori ++ Spec: ++ ContainerSpec: ++ Image: redis ++ Resources: ++ Limits: {} ++ Reservations: {} ++ RestartPolicy: ++ Condition: any ++ MaxAttempts: 0 ++ Placement: {} ++ ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz ++ Slot: 1 ++ NodeID: 60gvrl6tm78dmak4yl7srz94v ++ Status: ++ Timestamp: 2016-06-07T21:07:30.202183143Z ++ State: shutdown ++ Message: shutdown ++ ContainerStatus: ++ ContainerID: 1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213 ++ DesiredState: shutdown ++ NetworksAttachments: ++ - Network: ++ ID: 4qvuz4ko70xaltuqbt8956gd1 ++ Version: ++ Index: 18 ++ CreatedAt: 2016-06-07T20:31:11.912919752Z ++ UpdatedAt: 2016-06-07T21:07:29.955277358Z ++ Spec: ++ Name: ingress ++ Labels: ++ com.docker.swarm.internal: "true" ++ DriverConfiguration: {} ++ IPAMOptions: ++ Driver: {} ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ DriverState: ++ Name: overlay ++ Options: ++ com.docker.network.driver.overlay.vxlanid_list: "256" ++ IPAMOptions: ++ Driver: ++ Name: default ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ Addresses: ++ - 10.255.0.5/16 ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the tasks list. +@@ -13434,164 +6465,203 @@ + - `name=` + - `node=` + - `service=` +- tags: ["Task"] ++ schema: ++ type: string ++ tags: ++ - Task ++ description: List tasks. + /tasks/{id}: + get: +- summary: "Inspect a task" +- operationId: "TaskInspect" +- produces: +- - "application/json" +- responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Task" +- 404: +- description: "no such task" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "ID of the task" ++ summary: Inspect a task ++ operationId: TaskInspect ++ responses: ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Task" ++ "404": ++ description: no such task ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: ID of the task + required: true +- type: "string" +- tags: ["Task"] ++ schema: ++ type: string ++ tags: ++ - Task ++ description: Inspect a task. + /tasks/{id}/logs: + get: +- summary: "Get task logs" ++ summary: Get task logs + description: | + Get `stdout` and `stderr` logs from a task. + See also [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. +- operationId: "TaskLogs" +- produces: +- - "application/vnd.docker.raw-stream" +- - "application/vnd.docker.multiplexed-stream" +- responses: +- 200: +- description: "logs returned as a stream in response body" +- schema: +- type: "string" +- format: "binary" +- 404: +- description: "no such task" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such task: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID of the task" +- type: "string" +- - name: "details" +- in: "query" +- description: "Show task context and extra details provided to logs." +- type: "boolean" +- default: false +- - name: "follow" +- in: "query" +- description: "Keep connection after returning logs." +- type: "boolean" +- default: false +- - name: "stdout" +- in: "query" +- description: "Return logs from `stdout`" +- type: "boolean" +- default: false +- - name: "stderr" +- in: "query" +- description: "Return logs from `stderr`" +- type: "boolean" +- default: false +- - name: "since" +- in: "query" +- description: "Only return logs since this time, as a UNIX timestamp" +- type: "integer" +- default: 0 +- - name: "timestamps" +- in: "query" +- description: "Add timestamps to every log line" +- type: "boolean" +- default: false +- - name: "tail" +- in: "query" ++ operationId: TaskLogs ++ responses: ++ "200": ++ description: logs returned as a stream in response body ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ type: string ++ format: binary ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ type: string ++ format: binary ++ "404": ++ description: no such task ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such task: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID of the task ++ schema: ++ type: string ++ - name: details ++ in: query ++ description: Show task context and extra details provided to logs. ++ schema: ++ type: boolean ++ default: false ++ - name: follow ++ in: query ++ description: Keep connection after returning logs. ++ schema: ++ type: boolean ++ default: false ++ - name: stdout ++ in: query ++ description: Return logs from `stdout` ++ schema: ++ type: boolean ++ default: false ++ - name: stderr ++ in: query ++ description: Return logs from `stderr` ++ schema: ++ type: boolean ++ default: false ++ - name: since ++ in: query ++ description: Only return logs since this time, as a UNIX timestamp ++ schema: ++ type: integer ++ default: 0 ++ - name: timestamps ++ in: query ++ description: Add timestamps to every log line ++ schema: ++ type: boolean ++ default: false ++ - name: tail ++ in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. +- type: "string" +- default: "all" +- tags: ["Task"] ++ schema: ++ type: string ++ default: all ++ tags: ++ - Task + /secrets: + get: +- summary: "List secrets" +- operationId: "SecretList" +- produces: +- - "application/json" ++ summary: List secrets ++ operationId: SecretList + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Secret" +- example: +- - ID: "blt1owaxmitz71s9v5zh81zun" +- Version: +- Index: 85 +- CreatedAt: "2017-07-20T13:55:28.678958722Z" +- UpdatedAt: "2017-07-20T13:55:28.678958722Z" +- Spec: +- Name: "mysql-passwd" +- Labels: +- some.label: "some.value" +- Driver: +- Name: "secret-bucket" +- Options: +- OptionA: "value for driver option A" +- OptionB: "value for driver option B" +- - ID: "ktnbjxoalbkvbvedmg1urrz8h" +- Version: +- Index: 11 +- CreatedAt: "2016-11-05T01:20:17.327670065Z" +- UpdatedAt: "2016-11-05T01:20:17.327670065Z" +- Spec: +- Name: "app-dev.crt" +- Labels: +- foo: "bar" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "filters" +- in: "query" +- type: "string" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Secret" ++ example: ++ - ID: blt1owaxmitz71s9v5zh81zun ++ Version: ++ Index: 85 ++ CreatedAt: 2017-07-20T13:55:28.678958722Z ++ UpdatedAt: 2017-07-20T13:55:28.678958722Z ++ Spec: ++ Name: mysql-passwd ++ Labels: ++ some.label: some.value ++ Driver: ++ Name: secret-bucket ++ Options: ++ OptionA: value for driver option A ++ OptionB: value for driver option B ++ - ID: ktnbjxoalbkvbvedmg1urrz8h ++ Version: ++ Index: 11 ++ CreatedAt: 2016-11-05T01:20:17.327670065Z ++ UpdatedAt: 2016-11-05T01:20:17.327670065Z ++ Spec: ++ Name: app-dev.crt ++ Labels: ++ foo: bar ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the secrets list. +@@ -13602,203 +6672,248 @@ + - `label= or label==value` + - `name=` matches all or part of a secret name (prefix match) + - `names=` matches a secret name (exact match) +- tags: ["Secret"] ++ schema: ++ type: string ++ tags: ++ - Secret ++ description: List secrets. + /secrets/create: + post: +- summary: "Create a secret" +- operationId: "SecretCreate" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- responses: +- 201: +- description: "no error" +- schema: +- $ref: "#/definitions/IDResponse" +- 409: +- description: "name conflicts with an existing object" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "body" +- in: "body" +- schema: +- allOf: +- - $ref: "#/definitions/SecretSpec" +- - type: "object" +- example: +- Name: "app-key.crt" +- Labels: +- foo: "bar" +- Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" +- Driver: +- Name: "secret-bucket" +- Options: +- OptionA: "value for driver option A" +- OptionB: "value for driver option B" +- tags: ["Secret"] ++ summary: Create a secret ++ operationId: SecretCreate ++ responses: ++ "201": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/IDResponse" ++ "409": ++ description: name conflicts with an existing object ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/SecretSpec" ++ - type: object ++ example: ++ Name: app-key.crt ++ Labels: ++ foo: bar ++ Data: VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg== ++ Driver: ++ Name: secret-bucket ++ Options: ++ OptionA: value for driver option A ++ OptionB: value for driver option B ++ tags: ++ - Secret ++ description: Create a secret. + /secrets/{id}: + get: +- summary: "Inspect a secret" +- operationId: "SecretInspect" +- produces: +- - "application/json" ++ summary: Inspect a secret ++ operationId: SecretInspect + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Secret" +- examples: ++ "200": ++ description: no error ++ content: + application/json: +- ID: "ktnbjxoalbkvbvedmg1urrz8h" +- Version: +- Index: 11 +- CreatedAt: "2016-11-05T01:20:17.327670065Z" +- UpdatedAt: "2016-11-05T01:20:17.327670065Z" +- Spec: +- Name: "app-dev.crt" +- Labels: +- foo: "bar" +- Driver: +- Name: "secret-bucket" +- Options: +- OptionA: "value for driver option A" +- OptionB: "value for driver option B" +- +- 404: +- description: "secret not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/Secret" ++ examples: ++ response: ++ value: ++ ID: ktnbjxoalbkvbvedmg1urrz8h ++ Version: ++ Index: 11 ++ CreatedAt: 2016-11-05T01:20:17.327670065Z ++ UpdatedAt: 2016-11-05T01:20:17.327670065Z ++ Spec: ++ Name: app-dev.crt ++ Labels: ++ foo: bar ++ Driver: ++ Name: secret-bucket ++ Options: ++ OptionA: value for driver option A ++ OptionB: value for driver option B ++ "404": ++ description: secret not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- type: "string" +- description: "ID of the secret" +- tags: ["Secret"] ++ description: ID of the secret ++ schema: ++ type: string ++ tags: ++ - Secret ++ description: Inspect a secret. + delete: +- summary: "Delete a secret" +- operationId: "SecretDelete" +- produces: +- - "application/json" +- responses: +- 204: +- description: "no error" +- 404: +- description: "secret not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- type: "string" +- description: "ID of the secret" +- tags: ["Secret"] ++ summary: Delete a secret ++ operationId: SecretDelete ++ responses: ++ "204": ++ description: no error ++ "404": ++ description: secret not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID of the secret ++ schema: ++ type: string ++ tags: ++ - Secret ++ description: Delete a secret. + /secrets/{id}/update: + post: +- summary: "Update a Secret" +- operationId: "SecretUpdate" ++ summary: Update a Secret ++ operationId: SecretUpdate + responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such secret" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "The ID or name of the secret" +- type: "string" +- required: true +- - name: "body" +- in: "body" +- schema: +- $ref: "#/definitions/SecretSpec" +- description: | +- The spec of the secret to update. Currently, only the Labels field +- can be updated. All other fields must remain unchanged from the +- [SecretInspect endpoint](#operation/SecretInspect) response values. +- - name: "version" +- in: "query" ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such secret ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: The ID or name of the secret ++ required: true ++ schema: ++ type: string ++ - name: version ++ in: query + description: | + The version number of the secret object being updated. This is + required to avoid conflicting writes. +- type: "integer" +- format: "int64" + required: true +- tags: ["Secret"] ++ schema: ++ type: integer ++ format: int64 ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/SecretSpec" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/SecretSpec" ++ description: | ++ The spec of the secret to update. Currently, only the Labels field ++ can be updated. All other fields must remain unchanged from the ++ [SecretInspect endpoint](#operation/SecretInspect) response values. ++ tags: ++ - Secret ++ description: Update a Secret. + /configs: + get: +- summary: "List configs" +- operationId: "ConfigList" +- produces: +- - "application/json" ++ summary: List configs ++ operationId: ConfigList + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Config" +- example: +- - ID: "ktnbjxoalbkvbvedmg1urrz8h" +- Version: +- Index: 11 +- CreatedAt: "2016-11-05T01:20:17.327670065Z" +- UpdatedAt: "2016-11-05T01:20:17.327670065Z" +- Spec: +- Name: "server.conf" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "filters" +- in: "query" +- type: "string" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Config" ++ example: ++ - ID: ktnbjxoalbkvbvedmg1urrz8h ++ Version: ++ Index: 11 ++ CreatedAt: 2016-11-05T01:20:17.327670065Z ++ UpdatedAt: 2016-11-05T01:20:17.327670065Z ++ Spec: ++ Name: server.conf ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the configs list. +@@ -13808,191 +6923,241 @@ + - `id=` + - `label= or label==value` + - `name=` matches all or part of a config name (prefix match) +- tags: ["Config"] ++ schema: ++ type: string ++ tags: ++ - Config ++ description: List configs. + /configs/create: + post: +- summary: "Create a config" +- operationId: "ConfigCreate" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- responses: +- 201: +- description: "no error" +- schema: +- $ref: "#/definitions/IDResponse" +- 409: +- description: "name conflicts with an existing object" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "body" +- in: "body" +- schema: +- allOf: +- - $ref: "#/definitions/ConfigSpec" +- - type: "object" +- example: +- Name: "server.conf" +- Labels: +- foo: "bar" +- Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" +- tags: ["Config"] ++ summary: Create a config ++ operationId: ConfigCreate ++ responses: ++ "201": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/IDResponse" ++ "409": ++ description: name conflicts with an existing object ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/ConfigSpec" ++ - type: object ++ example: ++ Name: server.conf ++ Labels: ++ foo: bar ++ Data: VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg== ++ tags: ++ - Config ++ description: Create a config. + /configs/{id}: + get: +- summary: "Inspect a config" +- operationId: "ConfigInspect" +- produces: +- - "application/json" ++ summary: Inspect a config ++ operationId: ConfigInspect + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Config" +- examples: ++ "200": ++ description: no error ++ content: + application/json: +- ID: "ktnbjxoalbkvbvedmg1urrz8h" +- Version: +- Index: 11 +- CreatedAt: "2016-11-05T01:20:17.327670065Z" +- UpdatedAt: "2016-11-05T01:20:17.327670065Z" +- Spec: +- Name: "app-dev.crt" +- 404: +- description: "config not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- type: "string" +- description: "ID of the config" +- tags: ["Config"] ++ schema: ++ $ref: "#/components/schemas/Config" ++ examples: ++ response: ++ value: ++ ID: ktnbjxoalbkvbvedmg1urrz8h ++ Version: ++ Index: 11 ++ CreatedAt: 2016-11-05T01:20:17.327670065Z ++ UpdatedAt: 2016-11-05T01:20:17.327670065Z ++ Spec: ++ Name: app-dev.crt ++ "404": ++ description: config not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID of the config ++ schema: ++ type: string ++ tags: ++ - Config ++ description: Inspect a config. + delete: +- summary: "Delete a config" +- operationId: "ConfigDelete" +- produces: +- - "application/json" +- responses: +- 204: +- description: "no error" +- 404: +- description: "config not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- type: "string" +- description: "ID of the config" +- tags: ["Config"] ++ summary: Delete a config ++ operationId: ConfigDelete ++ responses: ++ "204": ++ description: no error ++ "404": ++ description: config not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID of the config ++ schema: ++ type: string ++ tags: ++ - Config ++ description: Delete a config. + /configs/{id}/update: + post: +- summary: "Update a Config" +- operationId: "ConfigUpdate" ++ summary: Update a Config ++ operationId: ConfigUpdate + responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such config" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "The ID or name of the config" +- type: "string" +- required: true +- - name: "body" +- in: "body" +- schema: +- $ref: "#/definitions/ConfigSpec" +- description: | +- The spec of the config to update. Currently, only the Labels field +- can be updated. All other fields must remain unchanged from the +- [ConfigInspect endpoint](#operation/ConfigInspect) response values. +- - name: "version" +- in: "query" ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such config ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: The ID or name of the config ++ required: true ++ schema: ++ type: string ++ - name: version ++ in: query + description: | + The version number of the config object being updated. This is + required to avoid conflicting writes. +- type: "integer" +- format: "int64" + required: true +- tags: ["Config"] ++ schema: ++ type: integer ++ format: int64 ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ConfigSpec" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/ConfigSpec" ++ description: | ++ The spec of the config to update. Currently, only the Labels field ++ can be updated. All other fields must remain unchanged from the ++ [ConfigInspect endpoint](#operation/ConfigInspect) response values. ++ tags: ++ - Config ++ description: Update a Config. + /distribution/{name}/json: + get: +- summary: "Get image information from the registry" ++ summary: Get image information from the registry + description: | + Return image digest and platform information by contacting the registry. +- operationId: "DistributionInspect" +- produces: +- - "application/json" ++ operationId: DistributionInspect + responses: +- 200: +- description: "descriptor and platform information" +- schema: +- $ref: "#/definitions/DistributionInspect" +- 401: +- description: "Failed authentication or no image found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "200": ++ description: descriptor and platform information ++ content: + application/json: +- message: "No such image: someimage (tag: latest)" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/DistributionInspect" ++ "401": ++ description: Failed authentication or no image found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such image: someimage (tag: latest)" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" +- description: "Image name or id" +- type: "string" ++ - name: name ++ in: path ++ description: Image name or id + required: true +- tags: ["Distribution"] ++ schema: ++ type: string ++ tags: ++ - Distribution + /session: + post: +- summary: "Initialize interactive session" ++ summary: Initialize interactive session + description: | + Start a new interactive session with a server. Session allows server to + call back to the client for advanced capabilities. +@@ -14021,18 +7186,8214 @@ + Connection: Upgrade + Upgrade: h2c + ``` +- operationId: "Session" +- produces: +- - "application/vnd.docker.raw-stream" +- responses: +- 101: +- description: "no error, hijacking successful" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" ++ operationId: Session ++ responses: ++ "101": ++ description: no error, hijacking successful ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Session ++servers: ++ - url: /v1.55 ++components: ++ requestBodies: ++ PluginPrivilegeArray: ++ content: ++ application/json: + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Session"] ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginPrivilege" ++ example: ++ - Name: network ++ Description: "" ++ Value: ++ - host ++ - Name: mount ++ Description: "" ++ Value: ++ - /data ++ - Name: device ++ Description: "" ++ Value: ++ - /dev/cpu_dma_latency ++ text/plain: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginPrivilege" ++ example: ++ - Name: network ++ Description: "" ++ Value: ++ - host ++ - Name: mount ++ Description: "" ++ Value: ++ - /data ++ - Name: device ++ Description: "" ++ Value: ++ - /dev/cpu_dma_latency ++ schemas: ++ ImageHistoryResponseItem: ++ type: object ++ x-go-name: HistoryResponseItem ++ title: HistoryResponseItem ++ description: individual image layer information in response to ImageHistory operation ++ required: ++ - Id ++ - Created ++ - CreatedBy ++ - Tags ++ - Size ++ - Comment ++ properties: ++ Id: ++ type: string ++ Created: ++ type: integer ++ format: int64 ++ CreatedBy: ++ type: string ++ Tags: ++ type: array ++ items: ++ type: string ++ Size: ++ type: integer ++ format: int64 ++ Comment: ++ type: string ++ PortSummary: ++ type: object ++ description: | ++ Describes a port-mapping between the container and the host. ++ required: ++ - PrivatePort ++ - Type ++ properties: ++ IP: ++ type: string ++ format: ip-address ++ description: Host IP address that the container's port is mapped to ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ PrivatePort: ++ type: integer ++ format: uint16 ++ description: Port on the container ++ PublicPort: ++ type: integer ++ format: uint16 ++ description: Port exposed on the host ++ Type: ++ type: string ++ enum: ++ - tcp ++ - udp ++ - sctp ++ example: ++ PrivatePort: 8080 ++ PublicPort: 80 ++ Type: tcp ++ MountType: ++ description: |- ++ The mount type. Available types: ++ ++ - `bind` a mount of a file or directory from the host into the container. ++ - `cluster` a Swarm cluster volume. ++ - `image` an OCI image. ++ - `npipe` a named pipe from the host into the container. ++ - `tmpfs` a `tmpfs`. ++ - `volume` a docker volume with the given `Name`. ++ type: string ++ enum: ++ - bind ++ - cluster ++ - image ++ - npipe ++ - tmpfs ++ - volume ++ example: volume ++ MountPoint: ++ type: object ++ description: | ++ MountPoint represents a mount point configuration inside the container. ++ This is used for reporting the mountpoints in use by a container. ++ properties: ++ Type: ++ description: | ++ The mount type: ++ ++ - `bind` a mount of a file or directory from the host into the container. ++ - `cluster` a Swarm cluster volume. ++ - `image` an OCI image. ++ - `npipe` a named pipe from the host into the container. ++ - `tmpfs` a `tmpfs`. ++ - `volume` a docker volume with the given `Name`. ++ allOf: ++ - $ref: "#/components/schemas/MountType" ++ example: volume ++ Name: ++ description: | ++ Name is the name reference to the underlying data defined by `Source` ++ e.g., the volume name. ++ type: string ++ example: myvolume ++ Source: ++ description: | ++ Source location of the mount. ++ ++ For volumes, this contains the storage location of the volume (within ++ `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains ++ the source (host) part of the bind-mount. For `tmpfs` mount points, this ++ field is empty. ++ type: string ++ example: /var/lib/docker/volumes/myvolume/_data ++ Destination: ++ description: | ++ Destination is the path relative to the container root (`/`) where ++ the `Source` is mounted inside the container. ++ type: string ++ example: /usr/share/nginx/html/ ++ Driver: ++ description: | ++ Driver is the volume driver used to create the volume (if it is a volume). ++ type: string ++ example: local ++ Mode: ++ description: | ++ Mode is a comma separated list of options supplied by the user when ++ creating the bind/volume mount. ++ ++ The default is platform-specific (`"z"` on Linux, empty on Windows). ++ type: string ++ example: z ++ RW: ++ description: | ++ Whether the mount is mounted writable (read-write). ++ type: boolean ++ example: true ++ Propagation: ++ description: | ++ Propagation describes how mounts are propagated from the host into the ++ mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) ++ for details. This field is not used on Windows. ++ type: string ++ example: "" ++ DeviceMapping: ++ type: object ++ description: A device mapping between the host and container ++ properties: ++ PathOnHost: ++ type: string ++ PathInContainer: ++ type: string ++ CgroupPermissions: ++ type: string ++ example: ++ PathOnHost: /dev/deviceName ++ PathInContainer: /dev/deviceName ++ CgroupPermissions: mrw ++ DeviceRequest: ++ type: object ++ description: A request for devices to be sent to device drivers ++ properties: ++ Driver: ++ description: | ++ The name of the device driver to use for this request. ++ ++ Note that if this is specified the capabilities are ignored when ++ selecting a device driver. ++ type: string ++ example: nvidia ++ Count: ++ type: integer ++ example: -1 ++ DeviceIDs: ++ type: array ++ items: ++ type: string ++ example: ++ - "0" ++ - "1" ++ - GPU-fef8089b-4820-abfc-e83e-94318197576e ++ Capabilities: ++ description: | ++ A list of capabilities; an OR list of AND lists of capabilities. ++ ++ Note that if a driver is specified the capabilities have no effect on ++ selecting a driver as the driver name is used directly. ++ ++ Note that if no driver is specified the capabilities are used to ++ select a driver with the required capabilities. ++ type: array ++ items: ++ type: array ++ items: ++ type: string ++ example: ++ - - gpu ++ - nvidia ++ - compute ++ Options: ++ description: | ++ Driver-specific options, specified as a key/value pairs. These options ++ are passed directly to the driver. ++ type: object ++ additionalProperties: ++ type: string ++ ThrottleDevice: ++ type: object ++ properties: ++ Path: ++ description: Device path ++ type: string ++ Rate: ++ description: Rate ++ type: integer ++ format: int64 ++ minimum: 0 ++ Mount: ++ type: object ++ properties: ++ Target: ++ description: Container path. ++ type: string ++ Source: ++ description: |- ++ Mount source (e.g. a volume name, a host path). The source cannot be ++ specified when using `Type=tmpfs`. For `Type=bind`, the source path ++ must either exist, or the `CreateMountpoint` must be set to `true` to ++ create the source path on the host if missing. ++ ++ For `Type=npipe`, the pipe must exist prior to creating the container. ++ type: string ++ Type: ++ description: | ++ The mount type. Available types: ++ ++ - `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container. ++ - `cluster` a Swarm cluster volume ++ - `image` Mounts an image. ++ - `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container. ++ - `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs. ++ - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. ++ allOf: ++ - $ref: "#/components/schemas/MountType" ++ ReadOnly: ++ description: Whether the mount should be read-only. ++ type: boolean ++ Consistency: ++ description: "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." ++ type: string ++ BindOptions: ++ description: Optional configuration for the `bind` type. ++ type: object ++ properties: ++ Propagation: ++ description: A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`. ++ type: string ++ enum: ++ - private ++ - rprivate ++ - shared ++ - rshared ++ - slave ++ - rslave ++ NonRecursive: ++ description: Disable recursive bind mount. ++ type: boolean ++ default: false ++ CreateMountpoint: ++ description: Create mount point on host if missing ++ type: boolean ++ default: false ++ ReadOnlyNonRecursive: ++ description: | ++ Make the mount non-recursively read-only, but still leave the mount recursive ++ (unless NonRecursive is set to `true` in conjunction). ++ ++ Added in v1.44, before that version all read-only mounts were ++ non-recursive by default. To match the previous behaviour this ++ will default to `true` for clients on versions prior to v1.44. ++ type: boolean ++ default: false ++ ReadOnlyForceRecursive: ++ description: Raise an error if the mount cannot be made recursively read-only. ++ type: boolean ++ default: false ++ VolumeOptions: ++ description: Optional configuration for the `volume` type. ++ type: object ++ properties: ++ NoCopy: ++ description: Populate volume with data from the target. ++ type: boolean ++ default: false ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ DriverConfig: ++ description: Map of driver specific options ++ type: object ++ properties: ++ Name: ++ description: Name of the driver to use to create the volume. ++ type: string ++ Options: ++ description: key/value map of driver specific options. ++ type: object ++ additionalProperties: ++ type: string ++ Subpath: ++ description: Source path inside the volume. Must be relative without any back traversals. ++ type: string ++ example: dir-inside-volume/subdirectory ++ ImageOptions: ++ description: Optional configuration for the `image` type. ++ type: object ++ properties: ++ Subpath: ++ description: Source path inside the image. Must be relative without any back traversals. ++ type: string ++ example: dir-inside-image/subdirectory ++ TmpfsOptions: ++ description: Optional configuration for the `tmpfs` type. ++ type: object ++ properties: ++ SizeBytes: ++ description: The size for the tmpfs mount in bytes. ++ type: integer ++ format: int64 ++ Mode: ++ description: | ++ The permission mode for the tmpfs mount in an integer. ++ The value must not be in octal format (e.g. 755) but rather ++ the decimal representation of the octal value (e.g. 493). ++ type: integer ++ Options: ++ description: | ++ The options to be passed to the tmpfs mount. An array of arrays. ++ Flag options should be provided as 1-length arrays. Other types ++ should be provided as as 2-length arrays, where the first item is ++ the key and the second the value. ++ type: array ++ items: ++ type: array ++ minItems: 1 ++ maxItems: 2 ++ items: ++ type: string ++ example: ++ - - noexec ++ RestartPolicy: ++ description: | ++ The behavior to apply when the container exits. The default is not to ++ restart. ++ ++ An ever increasing delay (double the previous delay, starting at 100ms) is ++ added before each restart to prevent flooding the server. ++ type: object ++ properties: ++ Name: ++ type: string ++ description: | ++ - Empty string means not to restart ++ - `no` Do not automatically restart ++ - `always` Always restart ++ - `unless-stopped` Restart always except when the user has manually stopped the container ++ - `on-failure` Restart only when the container exit code is non-zero ++ enum: ++ - "" ++ - no ++ - always ++ - unless-stopped ++ - on-failure ++ MaximumRetryCount: ++ type: integer ++ description: | ++ If `on-failure` is used, the number of times to retry before giving up. ++ Resources: ++ description: A container's resources (cgroups config, ulimits, etc) ++ type: object ++ properties: ++ CpuShares: ++ description: | ++ An integer value representing this container's relative CPU weight ++ versus other containers. ++ type: integer ++ Memory: ++ description: Memory limit in bytes. ++ type: integer ++ format: int64 ++ default: 0 ++ CgroupParent: ++ description: | ++ Path to `cgroups` under which the container's `cgroup` is created. If ++ the path is not absolute, the path is considered to be relative to the ++ `cgroups` path of the init process. Cgroups are created if they do not ++ already exist. ++ type: string ++ BlkioWeight: ++ description: Block IO weight (relative weight). ++ type: integer ++ minimum: 0 ++ maximum: 1000 ++ BlkioWeightDevice: ++ description: | ++ Block IO weight (relative device weight) in the form: ++ ++ ``` ++ [{"Path": "device_path", "Weight": weight}] ++ ``` ++ type: array ++ items: ++ type: object ++ properties: ++ Path: ++ type: string ++ Weight: ++ type: integer ++ minimum: 0 ++ BlkioDeviceReadBps: ++ description: | ++ Limit read rate (bytes per second) from a device, in the form: ++ ++ ``` ++ [{"Path": "device_path", "Rate": rate}] ++ ``` ++ type: array ++ items: ++ $ref: "#/components/schemas/ThrottleDevice" ++ BlkioDeviceWriteBps: ++ description: | ++ Limit write rate (bytes per second) to a device, in the form: ++ ++ ``` ++ [{"Path": "device_path", "Rate": rate}] ++ ``` ++ type: array ++ items: ++ $ref: "#/components/schemas/ThrottleDevice" ++ BlkioDeviceReadIOps: ++ description: | ++ Limit read rate (IO per second) from a device, in the form: ++ ++ ``` ++ [{"Path": "device_path", "Rate": rate}] ++ ``` ++ type: array ++ items: ++ $ref: "#/components/schemas/ThrottleDevice" ++ BlkioDeviceWriteIOps: ++ description: | ++ Limit write rate (IO per second) to a device, in the form: ++ ++ ``` ++ [{"Path": "device_path", "Rate": rate}] ++ ``` ++ type: array ++ items: ++ $ref: "#/components/schemas/ThrottleDevice" ++ CpuPeriod: ++ description: The length of a CPU period in microseconds. ++ type: integer ++ format: int64 ++ CpuQuota: ++ description: | ++ Microseconds of CPU time that the container can get in a CPU period. ++ type: integer ++ format: int64 ++ CpuRealtimePeriod: ++ description: | ++ The length of a CPU real-time period in microseconds. Set to 0 to ++ allocate no time allocated to real-time tasks. ++ type: integer ++ format: int64 ++ CpuRealtimeRuntime: ++ description: | ++ The length of a CPU real-time runtime in microseconds. Set to 0 to ++ allocate no time allocated to real-time tasks. ++ type: integer ++ format: int64 ++ CpusetCpus: ++ description: | ++ CPUs in which to allow execution (e.g., `0-3`, `0,1`). ++ type: string ++ example: 0-3 ++ CpusetMems: ++ description: | ++ Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only ++ effective on NUMA systems. ++ type: string ++ Devices: ++ description: A list of devices to add to the container. ++ type: array ++ items: ++ $ref: "#/components/schemas/DeviceMapping" ++ DeviceCgroupRules: ++ description: a list of cgroup rules to apply to the container ++ type: array ++ items: ++ type: string ++ example: c 13:* rwm ++ DeviceRequests: ++ description: | ++ A list of requests for devices to be sent to device drivers. ++ type: array ++ items: ++ $ref: "#/components/schemas/DeviceRequest" ++ MemoryReservation: ++ description: Memory soft limit in bytes. ++ type: integer ++ format: int64 ++ MemorySwap: ++ description: | ++ Total memory limit (memory + swap). Set as `-1` to enable unlimited ++ swap. ++ type: integer ++ format: int64 ++ MemorySwappiness: ++ description: | ++ Tune a container's memory swappiness behavior. Accepts an integer ++ between 0 and 100. ++ type: integer ++ format: int64 ++ minimum: 0 ++ maximum: 100 ++ NanoCpus: ++ description: CPU quota in units of 10-9 CPUs. ++ type: integer ++ format: int64 ++ OomKillDisable: ++ description: Disable OOM Killer for the container. ++ type: boolean ++ Init: ++ description: | ++ Run an init inside the container that forwards signals and reaps ++ processes. This field is omitted if empty, and the default (as ++ configured on the daemon) is used. ++ type: ++ - boolean ++ - "null" ++ PidsLimit: ++ description: | ++ Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` ++ to not change. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ Ulimits: ++ description: | ++ A list of resource limits to set in the container. For example: ++ ++ ``` ++ {"Name": "nofile", "Soft": 1024, "Hard": 2048} ++ ``` ++ type: array ++ items: ++ type: object ++ properties: ++ Name: ++ description: Name of ulimit ++ type: string ++ Soft: ++ description: Soft limit ++ type: integer ++ Hard: ++ description: Hard limit ++ type: integer ++ CpuCount: ++ description: | ++ The number of usable CPUs (Windows only). ++ ++ On Windows Server containers, the processor resource controls are ++ mutually exclusive. The order of precedence is `CPUCount` first, then ++ `CPUShares`, and `CPUPercent` last. ++ type: integer ++ format: int64 ++ CpuPercent: ++ description: | ++ The usable percentage of the available CPUs (Windows only). ++ ++ On Windows Server containers, the processor resource controls are ++ mutually exclusive. The order of precedence is `CPUCount` first, then ++ `CPUShares`, and `CPUPercent` last. ++ type: integer ++ format: int64 ++ IOMaximumIOps: ++ description: Maximum IOps for the container system drive (Windows only) ++ type: integer ++ format: int64 ++ IOMaximumBandwidth: ++ description: | ++ Maximum IO in bytes per second for the container system drive ++ (Windows only). ++ type: integer ++ format: int64 ++ Limit: ++ description: | ++ An object describing a limit on resources which can be requested by a task. ++ type: object ++ properties: ++ NanoCPUs: ++ type: integer ++ format: int64 ++ example: 4000000000 ++ MemoryBytes: ++ type: integer ++ format: int64 ++ example: 8272408576 ++ Pids: ++ description: | ++ Limits the maximum number of PIDs in the container. Set `0` for unlimited. ++ type: integer ++ format: int64 ++ default: 0 ++ example: 100 ++ ResourceObject: ++ description: | ++ An object describing the resources which can be advertised by a node and ++ requested by a task. ++ type: object ++ properties: ++ NanoCPUs: ++ type: integer ++ format: int64 ++ example: 4000000000 ++ MemoryBytes: ++ type: integer ++ format: int64 ++ example: 8272408576 ++ GenericResources: ++ $ref: "#/components/schemas/GenericResources" ++ GenericResources: ++ description: | ++ User-defined resources can be either Integer resources (e.g, `SSD=3`) or ++ String resources (e.g, `GPU=UUID1`). ++ type: array ++ items: ++ type: object ++ properties: ++ NamedResourceSpec: ++ type: object ++ properties: ++ Kind: ++ type: string ++ Value: ++ type: string ++ DiscreteResourceSpec: ++ type: object ++ properties: ++ Kind: ++ type: string ++ Value: ++ type: integer ++ format: int64 ++ example: ++ - DiscreteResourceSpec: ++ Kind: SSD ++ Value: 3 ++ - NamedResourceSpec: ++ Kind: GPU ++ Value: UUID1 ++ - NamedResourceSpec: ++ Kind: GPU ++ Value: UUID2 ++ HealthConfig: ++ description: | ++ A test to perform to check that the container is healthy. ++ Healthcheck commands should be side-effect free. ++ type: object ++ properties: ++ Test: ++ description: | ++ The test to perform. Possible values are: ++ ++ - `[]` inherit healthcheck from image or parent image ++ - `["NONE"]` disable healthcheck ++ - `["CMD", args...]` exec arguments directly ++ - `["CMD-SHELL", command]` run command with system's default shell ++ ++ A non-zero exit code indicates a failed healthcheck: ++ - `0` healthy ++ - `1` unhealthy ++ - `2` reserved (treated as unhealthy) ++ - other values: error running probe ++ type: array ++ items: ++ type: string ++ Interval: ++ description: | ++ The time to wait between checks in nanoseconds. It should be 0 or at ++ least 1000000 (1 ms). 0 means inherit. ++ type: integer ++ format: int64 ++ Timeout: ++ description: | ++ The time to wait before considering the check to have hung. It should ++ be 0 or at least 1000000 (1 ms). 0 means inherit. ++ ++ If the health check command does not complete within this timeout, ++ the check is considered failed and the health check process is ++ forcibly terminated without a graceful shutdown. ++ type: integer ++ format: int64 ++ Retries: ++ description: | ++ The number of consecutive failures needed to consider a container as ++ unhealthy. 0 means inherit. ++ type: integer ++ StartPeriod: ++ description: | ++ Start period for the container to initialize before starting ++ health-retries countdown in nanoseconds. It should be 0 or at least ++ 1000000 (1 ms). 0 means inherit. ++ type: integer ++ format: int64 ++ StartInterval: ++ description: | ++ The time to wait between checks in nanoseconds during the start period. ++ It should be 0 or at least 1000000 (1 ms). 0 means inherit. ++ type: integer ++ format: int64 ++ Health: ++ description: | ++ Health stores information about the container's healthcheck results. ++ type: ++ - object ++ - "null" ++ properties: ++ Status: ++ description: | ++ Status is one of `none`, `starting`, `healthy` or `unhealthy` ++ ++ - "none" Indicates there is no healthcheck ++ - "starting" Starting indicates that the container is not yet ready ++ - "healthy" Healthy indicates that the container is running correctly ++ - "unhealthy" Unhealthy indicates that the container has a problem ++ type: string ++ enum: ++ - none ++ - starting ++ - healthy ++ - unhealthy ++ example: healthy ++ FailingStreak: ++ description: FailingStreak is the number of consecutive failures ++ type: integer ++ example: 0 ++ Log: ++ type: array ++ description: | ++ Log contains the last few results (oldest first) ++ items: ++ $ref: "#/components/schemas/HealthcheckResult" ++ HealthcheckResult: ++ description: | ++ HealthcheckResult stores information about a single run of a healthcheck probe ++ type: ++ - object ++ - "null" ++ properties: ++ Start: ++ description: | ++ Date and time at which this check started in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: date-time ++ example: 2020-01-04T10:44:24.496525531Z ++ End: ++ description: | ++ Date and time at which this check ended in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2020-01-04T10:45:21.364524523Z ++ ExitCode: ++ description: | ++ ExitCode meanings: ++ ++ - `0` healthy ++ - `1` unhealthy ++ - `2` reserved (considered unhealthy) ++ - other values: error running probe ++ type: integer ++ example: 0 ++ Output: ++ description: Output from last check ++ type: string ++ HostConfig: ++ description: Container configuration that depends on the host we are running on ++ allOf: ++ - $ref: "#/components/schemas/Resources" ++ - type: object ++ properties: ++ Binds: ++ type: array ++ description: | ++ A list of volume bindings for this container. Each volume binding ++ is a string in one of these forms: ++ ++ - `host-src:container-dest[:options]` to bind-mount a host path ++ into the container. Both `host-src`, and `container-dest` must ++ be an _absolute_ path. ++ - `volume-name:container-dest[:options]` to bind-mount a volume ++ managed by a volume driver into the container. `container-dest` ++ must be an _absolute_ path. ++ ++ `options` is an optional, comma-delimited list of: ++ ++ - `nocopy` disables automatic copying of data from the container ++ path to the volume. The `nocopy` flag only applies to named volumes. ++ - `[ro|rw]` mounts a volume read-only or read-write, respectively. ++ If omitted or set to `rw`, volumes are mounted read-write. ++ - `[z|Z]` applies SELinux labels to allow or deny multiple containers ++ to read and write to the same volume. ++ - `z`: a _shared_ content label is applied to the content. This ++ label indicates that multiple containers can share the volume ++ content, for both reading and writing. ++ - `Z`: a _private unshared_ label is applied to the content. ++ This label indicates that only the current container can use ++ a private volume. Labeling systems such as SELinux require ++ proper labels to be placed on volume content that is mounted ++ into a container. Without a label, the security system can ++ prevent a container's processes from using the content. By ++ default, the labels set by the host operating system are not ++ modified. ++ - `[[r]shared|[r]slave|[r]private]` specifies mount ++ [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). ++ This only applies to bind-mounted volumes, not internal volumes ++ or named volumes. Mount propagation requires the source mount ++ point (the location where the source directory is mounted in the ++ host operating system) to have the correct propagation properties. ++ For shared volumes, the source mount point must be set to `shared`. ++ For slave volumes, the mount must be set to either `shared` or ++ `slave`. ++ items: ++ type: string ++ ContainerIDFile: ++ type: string ++ description: Path to a file where the container ID is written ++ example: "" ++ LogConfig: ++ type: object ++ description: The logging configuration for this container ++ properties: ++ Type: ++ description: |- ++ Name of the logging driver used for the container or "none" ++ if logging is disabled. ++ type: string ++ enum: ++ - local ++ - json-file ++ - syslog ++ - journald ++ - gelf ++ - fluentd ++ - awslogs ++ - splunk ++ - etwlogs ++ - none ++ Config: ++ description: Driver-specific configuration options for the logging driver. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ max-file: "5" ++ max-size: 10m ++ NetworkMode: ++ type: string ++ description: | ++ Network mode to use for this container. Supported standard values ++ are: `bridge`, `host`, `none`, and `container:`. Any ++ other value is taken as a custom network's name to which this ++ container should connect to. ++ PortBindings: ++ $ref: "#/components/schemas/PortMap" ++ RestartPolicy: ++ $ref: "#/components/schemas/RestartPolicy" ++ AutoRemove: ++ type: boolean ++ description: | ++ Automatically remove the container when the container's process ++ exits. This has no effect if `RestartPolicy` is set. ++ VolumeDriver: ++ type: string ++ description: Driver that this container uses to mount volumes. ++ VolumesFrom: ++ type: array ++ description: | ++ A list of volumes to inherit from another container, specified in ++ the form `[:]`. ++ items: ++ type: string ++ Mounts: ++ description: | ++ Specification for mounts to be added to the container. ++ type: array ++ items: ++ $ref: "#/components/schemas/Mount" ++ ConsoleSize: ++ type: ++ - array ++ - "null" ++ description: | ++ Initial console size, as an `[height, width]` array. ++ minItems: 2 ++ maxItems: 2 ++ items: ++ type: integer ++ minimum: 0 ++ example: ++ - 80 ++ - 64 ++ Annotations: ++ type: object ++ description: | ++ Arbitrary non-identifying metadata attached to container and ++ provided to the runtime when the container is started. ++ additionalProperties: ++ type: string ++ CapAdd: ++ type: array ++ description: | ++ A list of kernel capabilities to add to the container. Conflicts ++ with option 'Capabilities'. ++ items: ++ type: string ++ CapDrop: ++ type: array ++ description: | ++ A list of kernel capabilities to drop from the container. Conflicts ++ with option 'Capabilities'. ++ items: ++ type: string ++ CgroupnsMode: ++ type: string ++ enum: ++ - private ++ - host ++ description: | ++ cgroup namespace mode for the container. Possible values are: ++ ++ - `"private"`: the container runs in its own private cgroup namespace ++ - `"host"`: use the host system's cgroup namespace ++ ++ If not specified, the daemon default is used, which can either be `"private"` ++ or `"host"`, depending on daemon version, kernel support and configuration. ++ Dns: ++ type: array ++ description: A list of DNS servers for the container to use. ++ items: ++ type: string ++ format: ip-address ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ DnsOptions: ++ type: array ++ description: A list of DNS options. ++ items: ++ type: string ++ DnsSearch: ++ type: array ++ description: A list of DNS search domains. ++ items: ++ type: string ++ ExtraHosts: ++ type: array ++ description: | ++ A list of hostnames/IP mappings to add to the container's `/etc/hosts` ++ file. Specified in the form `["hostname:IP"]`. ++ items: ++ type: string ++ GroupAdd: ++ type: array ++ description: | ++ A list of additional groups that the container process will run as. ++ items: ++ type: string ++ IpcMode: ++ type: string ++ description: | ++ IPC sharing mode for the container. Possible values are: ++ ++ - `"none"`: own private IPC namespace, with /dev/shm not mounted ++ - `"private"`: own private IPC namespace ++ - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers ++ - `"container:"`: join another (shareable) container's IPC namespace ++ - `"host"`: use the host system's IPC namespace ++ ++ If not specified, daemon default is used, which can either be `"private"` ++ or `"shareable"`, depending on daemon version and configuration. ++ Cgroup: ++ type: string ++ description: Cgroup to use for the container. ++ Links: ++ type: array ++ description: | ++ A list of links for the container in the form `container_name:alias`. ++ items: ++ type: string ++ OomScoreAdj: ++ type: integer ++ description: | ++ An integer value containing the score given to the container in ++ order to tune OOM killer preferences. ++ example: 500 ++ PidMode: ++ type: string ++ description: | ++ Set the PID (Process) Namespace mode for the container. It can be ++ either: ++ ++ - `"container:"`: joins another container's PID namespace ++ - `"host"`: use the host's PID namespace inside the container ++ Privileged: ++ type: boolean ++ description: Gives the container full access to the host. ++ PublishAllPorts: ++ type: boolean ++ description: | ++ Allocates an ephemeral host port for all of a container's ++ exposed ports. ++ ++ Ports are de-allocated when the container stops and allocated when ++ the container starts. The allocated port might be changed when ++ restarting the container. ++ ++ The port is selected from the ephemeral port range that depends on ++ the kernel. For example, on Linux the range is defined by ++ `/proc/sys/net/ipv4/ip_local_port_range`. ++ ReadonlyRootfs: ++ type: boolean ++ description: Mount the container's root filesystem as read only. ++ SecurityOpt: ++ type: array ++ description: | ++ A list of string values to customize labels for MLS systems, such ++ as SELinux. ++ items: ++ type: string ++ StorageOpt: ++ type: object ++ description: | ++ Storage driver options for this container, in the form `{"size": "120G"}`. ++ additionalProperties: ++ type: string ++ Tmpfs: ++ type: object ++ description: | ++ A map of container directories which should be replaced by tmpfs ++ mounts, and their corresponding mount options. For example: ++ ++ ``` ++ { "/run": "rw,noexec,nosuid,size=65536k" } ++ ``` ++ additionalProperties: ++ type: string ++ UTSMode: ++ type: string ++ description: UTS namespace to use for the container. ++ UsernsMode: ++ type: string ++ description: | ++ Sets the usernamespace mode for the container when usernamespace ++ remapping option is enabled. ++ ShmSize: ++ type: integer ++ format: int64 ++ description: | ++ Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. ++ minimum: 0 ++ Sysctls: ++ type: ++ - object ++ - "null" ++ description: |- ++ A list of kernel parameters (sysctls) to set in the container. ++ ++ This field is omitted if not set. ++ additionalProperties: ++ type: string ++ example: ++ net.ipv4.ip_forward: "1" ++ Runtime: ++ type: ++ - string ++ - "null" ++ description: Runtime to use with this container. ++ Isolation: ++ type: string ++ description: | ++ Isolation technology of the container. (Windows only) ++ enum: ++ - default ++ - process ++ - hyperv ++ - "" ++ MaskedPaths: ++ type: array ++ description: | ++ The list of paths to be masked inside the container (this overrides ++ the default set of paths). ++ items: ++ type: string ++ example: ++ - /proc/asound ++ - /proc/acpi ++ - /proc/kcore ++ - /proc/keys ++ - /proc/latency_stats ++ - /proc/timer_list ++ - /proc/timer_stats ++ - /proc/sched_debug ++ - /proc/scsi ++ - /sys/firmware ++ - /sys/devices/virtual/powercap ++ ReadonlyPaths: ++ type: array ++ description: | ++ The list of paths to be set as read-only inside the container ++ (this overrides the default set of paths). ++ items: ++ type: string ++ example: ++ - /proc/bus ++ - /proc/fs ++ - /proc/irq ++ - /proc/sys ++ - /proc/sysrq-trigger ++ ContainerConfig: ++ description: | ++ Configuration for a container that is portable between hosts. ++ type: object ++ properties: ++ Hostname: ++ description: | ++ The hostname to use for the container, as a valid RFC 1123 hostname. ++ type: string ++ example: 439f4e91bd1d ++ Domainname: ++ description: | ++ The domain name to use for the container. ++ type: string ++ User: ++ description: |- ++ Commands run as this user inside the container. If omitted, commands ++ run as the user specified in the image the container was started from. ++ ++ Can be either user-name or UID, and optional group-name or GID, ++ separated by a colon (`[<:group-name|GID>]`). ++ type: string ++ example: 123:456 ++ AttachStdin: ++ description: Whether to attach to `stdin`. ++ type: boolean ++ default: false ++ AttachStdout: ++ description: Whether to attach to `stdout`. ++ type: boolean ++ default: true ++ AttachStderr: ++ description: Whether to attach to `stderr`. ++ type: boolean ++ default: true ++ ExposedPorts: ++ description: | ++ An object mapping ports to an empty object in the form: ++ ++ `{"/": {}}` ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: object ++ enum: ++ - {} ++ default: {} ++ example: ++ 80/tcp: {} ++ 443/tcp: {} ++ Tty: ++ description: | ++ Attach standard streams to a TTY, including `stdin` if it is not closed. ++ type: boolean ++ default: false ++ OpenStdin: ++ description: Open `stdin` ++ type: boolean ++ default: false ++ StdinOnce: ++ description: Close `stdin` after one attached client disconnects ++ type: boolean ++ default: false ++ Env: ++ description: | ++ A list of environment variables to set inside the container in the ++ form `["VAR=value", ...]`. A variable without `=` is removed from the ++ environment, rather than to have an empty value. ++ type: array ++ items: ++ type: string ++ example: ++ - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ++ Cmd: ++ description: | ++ Command to run specified as a string or an array of strings. ++ type: array ++ items: ++ type: string ++ example: ++ - /bin/sh ++ Healthcheck: ++ $ref: "#/components/schemas/HealthConfig" ++ ArgsEscaped: ++ description: Command is already escaped (Windows only) ++ type: ++ - boolean ++ - "null" ++ default: false ++ example: false ++ Image: ++ description: | ++ The name (or reference) of the image to use when creating the container, ++ or which was used when the container was created. ++ type: string ++ example: example-image:1.0 ++ Volumes: ++ description: | ++ An object mapping mount point paths inside the container to empty ++ objects. ++ type: object ++ additionalProperties: ++ type: object ++ enum: ++ - {} ++ default: {} ++ WorkingDir: ++ description: The working directory for commands to run in. ++ type: string ++ example: /public/ ++ Entrypoint: ++ description: | ++ The entry point for the container as a string or an array of strings. ++ ++ If the array consists of exactly one empty string (`[""]`) then the ++ entry point is reset to system default (i.e., the entry point used by ++ docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). ++ type: array ++ items: ++ type: string ++ example: [] ++ NetworkDisabled: ++ description: Disable networking for the container. ++ type: ++ - boolean ++ - "null" ++ OnBuild: ++ description: | ++ `ONBUILD` metadata that were defined in the image's `Dockerfile`. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: [] ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ StopSignal: ++ description: | ++ Signal to stop a container as a string or unsigned integer. ++ type: ++ - string ++ - "null" ++ example: SIGTERM ++ StopTimeout: ++ description: | ++ Timeout to stop a container in seconds. If omitted, the daemon-wide ++ default (`default-stop-timeout`) is used. ++ type: ++ - integer ++ - "null" ++ Shell: ++ description: | ++ Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - /bin/sh ++ - -c ++ ImageConfig: ++ description: | ++ Configuration of the image. These fields are used as defaults ++ when starting a container from the image. ++ type: object ++ properties: ++ User: ++ description: The user that commands are run as inside the container. ++ type: string ++ example: web:web ++ ExposedPorts: ++ description: | ++ An object mapping ports to an empty object in the form: ++ ++ `{"/": {}}` ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: object ++ enum: ++ - {} ++ default: {} ++ example: ++ 80/tcp: {} ++ 443/tcp: {} ++ Env: ++ description: | ++ A list of environment variables to set inside the container in the ++ form `["VAR=value", ...]`. A variable without `=` is removed from the ++ environment, rather than to have an empty value. ++ type: array ++ items: ++ type: string ++ example: ++ - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ++ Cmd: ++ description: | ++ Command to run specified as a string or an array of strings. ++ type: array ++ items: ++ type: string ++ example: ++ - /bin/sh ++ Healthcheck: ++ $ref: "#/components/schemas/HealthConfig" ++ ArgsEscaped: ++ description: Command is already escaped (Windows only) ++ type: ++ - boolean ++ - "null" ++ default: false ++ example: false ++ Volumes: ++ description: | ++ An object mapping mount point paths inside the container to empty ++ objects. ++ type: object ++ additionalProperties: ++ type: object ++ enum: ++ - {} ++ default: {} ++ example: ++ /app/data: {} ++ /app/config: {} ++ WorkingDir: ++ description: The working directory for commands to run in. ++ type: string ++ example: /public/ ++ Entrypoint: ++ description: | ++ The entry point for the container as a string or an array of strings. ++ ++ If the array consists of exactly one empty string (`[""]`) then the ++ entry point is reset to system default (i.e., the entry point used by ++ docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). ++ type: array ++ items: ++ type: string ++ example: [] ++ OnBuild: ++ description: | ++ `ONBUILD` metadata that were defined in the image's `Dockerfile`. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: [] ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ StopSignal: ++ description: | ++ Signal to stop a container as a string or unsigned integer. ++ type: ++ - string ++ - "null" ++ example: SIGTERM ++ Shell: ++ description: | ++ Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - /bin/sh ++ - -c ++ NetworkingConfig: ++ description: | ++ NetworkingConfig represents the container's networking configuration for ++ each of its interfaces. ++ It is used for the networking configs specified in the `docker create` ++ and `docker network connect` commands. ++ type: object ++ properties: ++ EndpointsConfig: ++ description: | ++ A mapping of network name to endpoint configuration for that network. ++ The endpoint configuration can be left empty to connect to that ++ network with no particular endpoint configuration. ++ type: object ++ additionalProperties: ++ $ref: "#/components/schemas/EndpointSettings" ++ example: ++ EndpointsConfig: ++ isolated_nw: ++ IPAMConfig: ++ IPv4Address: 172.20.30.33 ++ IPv6Address: 2001:db8:abcd::3033 ++ LinkLocalIPs: ++ - 169.254.34.68 ++ - fe80::3468 ++ MacAddress: 02:42:ac:12:05:02 ++ Links: ++ - container_1 ++ - container_2 ++ Aliases: ++ - server_x ++ - server_y ++ database_nw: {} ++ NetworkSettings: ++ description: NetworkSettings exposes the network settings in the API ++ type: object ++ properties: ++ SandboxID: ++ description: SandboxID uniquely represents a container's network stack. ++ type: string ++ example: 9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3 ++ SandboxKey: ++ description: SandboxKey is the full path of the netns handle ++ type: string ++ example: /var/run/docker/netns/8ab54b426c38 ++ Ports: ++ $ref: "#/components/schemas/PortMap" ++ Networks: ++ description: | ++ Information about all networks that the container is connected to. ++ type: object ++ additionalProperties: ++ $ref: "#/components/schemas/EndpointSettings" ++ Address: ++ description: Address represents an IPv4 or IPv6 IP address. ++ type: object ++ properties: ++ Addr: ++ description: IP address. ++ type: string ++ PrefixLen: ++ description: Mask length of the IP address. ++ type: integer ++ PortMap: ++ description: | ++ PortMap describes the mapping of container ports to host ports, using the ++ container's port-number and protocol as key in the format `/`, ++ for example, `80/udp`. ++ ++ If a container's port is mapped for multiple protocols, separate entries ++ are added to the mapping table. ++ type: object ++ additionalProperties: ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/PortBinding" ++ example: ++ 443/tcp: ++ - HostIp: 127.0.0.1 ++ HostPort: "4443" ++ 80/tcp: ++ - HostIp: 0.0.0.0 ++ HostPort: "80" ++ - HostIp: 0.0.0.0 ++ HostPort: "8080" ++ 80/udp: ++ - HostIp: 0.0.0.0 ++ HostPort: "80" ++ 53/udp: ++ - HostIp: 0.0.0.0 ++ HostPort: "53" ++ 2377/tcp: null ++ PortBinding: ++ description: | ++ PortBinding represents a binding between a host IP address and a host ++ port. ++ type: object ++ properties: ++ HostIp: ++ description: Host IP address that the container's port is mapped to. ++ type: string ++ example: 127.0.0.1 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ HostPort: ++ description: Host port number that the container's port is mapped to. ++ type: string ++ example: "4443" ++ DriverData: ++ description: | ++ Information about the storage driver used to store the container's and ++ image's filesystem. ++ type: object ++ required: ++ - Name ++ - Data ++ properties: ++ Name: ++ description: Name of the storage driver. ++ type: string ++ example: overlay2 ++ Data: ++ description: | ++ Low-level storage metadata, provided as key/value pairs. ++ ++ This information is driver-specific, and depends on the storage-driver ++ in use, and should be used for informational purposes only. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ MergedDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged ++ UpperDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff ++ WorkDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work ++ Storage: ++ description: | ++ Information about the storage used by the container. ++ type: object ++ properties: ++ RootFS: ++ allOf: ++ - $ref: "#/components/schemas/RootFSStorage" ++ - anyOf: ++ - description: | ++ Information about the storage used for the container's root filesystem. ++ type: object ++ - type: "null" ++ RootFSStorage: ++ description: | ++ Information about the storage used for the container's root filesystem. ++ type: object ++ x-go-name: RootFSStorage ++ properties: ++ Snapshot: ++ allOf: ++ - $ref: "#/components/schemas/RootFSStorageSnapshot" ++ - anyOf: ++ - description: | ++ Information about the snapshot used for the container's root filesystem. ++ type: object ++ - type: "null" ++ RootFSStorageSnapshot: ++ description: | ++ Information about a snapshot backend of the container's root filesystem. ++ type: object ++ x-go-name: RootFSStorageSnapshot ++ properties: ++ Name: ++ description: Name of the snapshotter. ++ type: string ++ FilesystemChange: ++ description: | ++ Change in the container's filesystem. ++ type: object ++ required: ++ - Path ++ - Kind ++ properties: ++ Path: ++ description: | ++ Path to file or directory that has changed. ++ type: string ++ Kind: ++ $ref: "#/components/schemas/ChangeType" ++ ChangeType: ++ description: | ++ Kind of change ++ ++ Can be one of: ++ ++ - `0`: Modified ("C") ++ - `1`: Added ("A") ++ - `2`: Deleted ("D") ++ type: integer ++ format: uint8 ++ enum: ++ - 0 ++ - 1 ++ - 2 ++ ImageInspect: ++ description: | ++ Information about an image in the local image cache. ++ type: object ++ properties: ++ Id: ++ description: | ++ ID is the content-addressable ID of an image. ++ ++ This identifier is a content-addressable digest calculated from the ++ image's configuration (which includes the digests of layers used by ++ the image). ++ ++ Note that this digest differs from the `RepoDigests` below, which ++ holds digests of image manifests that reference the image. ++ type: string ++ example: sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710 ++ Descriptor: ++ allOf: ++ - $ref: "#/components/schemas/OCIDescriptor" ++ - anyOf: ++ - description: | ++ Descriptor is an OCI descriptor of the image target. ++ In case of a multi-platform image, this descriptor points to the OCI index ++ or a manifest list. ++ ++ This field is only present if the daemon provides a multi-platform image store. ++ ++ WARNING: This is experimental and may change at any time without any backward ++ compatibility. ++ - type: "null" ++ Manifests: ++ description: | ++ Manifests is a list of image manifests available in this image. It ++ provides a more detailed view of the platform-specific image manifests or ++ other image-attached data like build attestations. ++ ++ Only available if the daemon provides a multi-platform image store ++ and the `manifests` option is set in the inspect request. ++ ++ WARNING: This is experimental and may change at any time without any backward ++ compatibility. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ImageManifestSummary" ++ Identity: ++ allOf: ++ - $ref: "#/components/schemas/Identity" ++ - anyOf: ++ - description: |- ++ Identity holds information about the identity and origin of the image. ++ This is trusted information verified by the daemon and cannot be modified ++ by tagging an image to a different name. ++ - type: "null" ++ RepoTags: ++ description: | ++ List of image names/tags in the local image cache that reference this ++ image. ++ ++ Multiple image tags can refer to the same image, and this list may be ++ empty if no tags reference the image, in which case the image is ++ "untagged", in which case it can still be referenced by its ID. ++ type: array ++ items: ++ type: string ++ example: ++ - example:1.0 ++ - example:latest ++ - example:stable ++ - internal.registry.example.com:5000/example:1.0 ++ RepoDigests: ++ description: | ++ List of content-addressable digests of locally available image manifests ++ that the image is referenced from. Multiple manifests can refer to the ++ same image. ++ ++ These digests are usually only available if the image was either pulled ++ from a registry, or if the image was pushed to a registry, which is when ++ the manifest is generated and its digest calculated. ++ type: array ++ items: ++ type: string ++ example: ++ - example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb ++ - internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578 ++ Comment: ++ description: | ++ Optional message that was set when committing or importing the image. ++ type: ++ - string ++ - "null" ++ example: "" ++ Created: ++ description: | ++ Date and time at which the image was created, formatted in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ ++ This information is only available if present in the image, ++ and omitted otherwise. ++ type: ++ - string ++ - "null" ++ format: dateTime ++ example: 2022-02-04T21:20:12.497794809Z ++ Author: ++ description: | ++ Name of the author that was specified when committing the image, or as ++ specified through MAINTAINER (deprecated) in the Dockerfile. ++ type: ++ - string ++ - "null" ++ example: "" ++ Config: ++ $ref: "#/components/schemas/ImageConfig" ++ Architecture: ++ description: | ++ Hardware CPU architecture that the image runs on. ++ type: string ++ example: arm ++ Variant: ++ description: | ++ CPU architecture variant (presently ARM-only). ++ type: ++ - string ++ - "null" ++ example: v7 ++ Os: ++ description: | ++ Operating System the image is built to run on. ++ type: string ++ example: linux ++ OsVersion: ++ description: | ++ Operating System version the image is built to run on (especially ++ for Windows). ++ type: ++ - string ++ - "null" ++ example: "" ++ Size: ++ description: | ++ Total size of the image including all layers it is composed of. ++ type: integer ++ format: int64 ++ example: 1239828 ++ GraphDriver: ++ allOf: ++ - $ref: "#/components/schemas/DriverData" ++ - anyOf: ++ - {} ++ - type: "null" ++ RootFS: ++ description: | ++ Information about the image's RootFS, including the layer IDs. ++ type: object ++ required: ++ - Type ++ properties: ++ Type: ++ type: string ++ example: layers ++ Layers: ++ type: array ++ items: ++ type: string ++ example: ++ - sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6 ++ - sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef ++ Metadata: ++ description: | ++ Additional metadata of the image in the local cache. This information ++ is local to the daemon, and not part of the image itself. ++ type: object ++ properties: ++ LastTagTime: ++ description: | ++ Date and time at which the image was last tagged in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ ++ This information is only available if the image was tagged locally, ++ and omitted otherwise. ++ type: ++ - string ++ - "null" ++ format: dateTime ++ example: 2022-02-28T14:40:02.623929178Z ++ Identity: ++ description: |- ++ Identity holds information about the identity and origin of the image. ++ This is trusted information verified by the daemon and cannot be modified ++ by tagging an image to a different name. ++ type: object ++ properties: ++ Signature: ++ description: Signature contains the properties of verified signatures for the image. ++ type: array ++ items: ++ $ref: "#/components/schemas/SignatureIdentity" ++ Pull: ++ description: |- ++ Pull contains remote location information if image was created via pull. ++ If image was pulled via mirror, this contains the original repository location. ++ After successful push this images also contains the pushed repository location. ++ type: array ++ items: ++ $ref: "#/components/schemas/PullIdentity" ++ Build: ++ description: Build contains build reference information if image was created via build. ++ type: array ++ items: ++ $ref: "#/components/schemas/BuildIdentity" ++ BuildIdentity: ++ description: BuildIdentity contains build reference information if image was created via build. ++ type: object ++ properties: ++ Ref: ++ description: |- ++ Ref is the identifier for the build request. This reference can be used to ++ look up the build details in BuildKit history API. ++ type: string ++ CreatedAt: ++ description: CreatedAt is the time when the build ran. ++ type: string ++ format: date-time ++ PullIdentity: ++ description: |- ++ PullIdentity contains remote location information if image was created via pull. ++ If image was pulled via mirror, this contains the original repository location. ++ type: object ++ properties: ++ Repository: ++ description: Repository is the remote repository location the image was pulled from. ++ type: string ++ SignatureIdentity: ++ description: SignatureIdentity contains the properties of verified signatures for the image. ++ type: object ++ properties: ++ Name: ++ description: Name is a textual description summarizing the type of signature. ++ type: string ++ Timestamps: ++ description: Timestamps contains a list of verified signed timestamps for the signature. ++ type: array ++ items: ++ $ref: "#/components/schemas/SignatureTimestamp" ++ KnownSigner: ++ allOf: ++ - $ref: "#/components/schemas/KnownSignerIdentity" ++ - description: KnownSigner is an identifier for a special signer identity that is known to the implementation. ++ DockerReference: ++ description: |- ++ DockerReference is the Docker image reference associated with the signature. ++ This is an optional field only present in older hashedrecord signatures. ++ type: string ++ Signer: ++ allOf: ++ - $ref: "#/components/schemas/SignerIdentity" ++ - description: Signer contains information about the signer certificate used to sign the image. ++ SignatureType: ++ allOf: ++ - $ref: "#/components/schemas/SignatureType" ++ - description: SignatureType is the type of signature format. E.g. "bundle-v0.3" or "hashedrecord". ++ Error: ++ description: |- ++ Error contains error information if signature verification failed. ++ Other fields will be empty in this case. ++ type: string ++ Warnings: ++ description: |- ++ Warnings contains any warnings that occurred during signature verification. ++ For example, if there was no internet connectivity and cached trust roots were used. ++ Warning does not indicate a failed verification but may point to configuration issues. ++ type: array ++ items: ++ type: string ++ SignatureTimestamp: ++ description: SignatureTimestamp contains information about a verified signed timestamp for an image signature. ++ type: object ++ properties: ++ Type: ++ $ref: "#/components/schemas/SignatureTimestampType" ++ URI: ++ type: string ++ Timestamp: ++ type: string ++ format: date-time ++ SignatureTimestampType: ++ description: SignatureTimestampType is the type of timestamp used in the signature. ++ type: string ++ enum: ++ - Tlog ++ - TimestampAuthority ++ SignatureType: ++ description: SignatureType is the type of signature format. ++ type: string ++ enum: ++ - bundle-v0.3 ++ - simplesigning-v1 ++ KnownSignerIdentity: ++ description: KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation. ++ type: string ++ enum: ++ - DHI ++ SignerIdentity: ++ description: SignerIdentity contains information about the signer certificate used to sign the image. ++ type: object ++ properties: ++ CertificateIssuer: ++ type: string ++ description: CertificateIssuer is the certificate issuer. ++ SubjectAlternativeName: ++ type: string ++ description: SubjectAlternativeName is the certificate subject alternative name. ++ Issuer: ++ type: string ++ description: |- ++ The OIDC issuer. Should match `iss` claim of ID token or, in the case of ++ a federated login like Dex it should match the issuer URL of the ++ upstream issuer. The issuer is not set the extensions are invalid and ++ will fail to render. ++ BuildSignerURI: ++ type: string ++ description: Reference to specific build instructions that are responsible for signing. ++ BuildSignerDigest: ++ type: string ++ description: Immutable reference to the specific version of the build instructions that is responsible for signing. ++ RunnerEnvironment: ++ type: string ++ description: Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure. ++ SourceRepositoryURI: ++ type: string ++ description: Source repository URL that the build was based on. ++ SourceRepositoryDigest: ++ type: string ++ description: Immutable reference to a specific version of the source code that the build was based upon. ++ SourceRepositoryRef: ++ type: string ++ description: Source Repository Ref that the build run was based upon. ++ SourceRepositoryIdentifier: ++ type: string ++ description: Immutable identifier for the source repository the workflow was based upon. ++ SourceRepositoryOwnerURI: ++ type: string ++ description: Source repository owner URL of the owner of the source repository that the build was based on. ++ SourceRepositoryOwnerIdentifier: ++ type: string ++ description: Immutable identifier for the owner of the source repository that the workflow was based upon. ++ BuildConfigURI: ++ type: string ++ description: Build Config URL to the top-level/initiating build instructions. ++ BuildConfigDigest: ++ type: string ++ description: Immutable reference to the specific version of the top-level/initiating build instructions. ++ BuildTrigger: ++ type: string ++ description: Event or action that initiated the build. ++ RunInvocationURI: ++ type: string ++ description: Run Invocation URL to uniquely identify the build execution. ++ SourceRepositoryVisibilityAtSigning: ++ type: string ++ description: Source repository visibility at the time of signing the certificate. ++ ImageSummary: ++ type: object ++ x-go-name: Summary ++ required: ++ - Id ++ - ParentId ++ - RepoTags ++ - RepoDigests ++ - Created ++ - Size ++ - SharedSize ++ - Labels ++ - Containers ++ properties: ++ Id: ++ description: | ++ ID is the content-addressable ID of an image. ++ ++ This identifier is a content-addressable digest calculated from the ++ image's configuration (which includes the digests of layers used by ++ the image). ++ ++ Note that this digest differs from the `RepoDigests` below, which ++ holds digests of image manifests that reference the image. ++ type: string ++ example: sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710 ++ ParentId: ++ description: | ++ ID of the parent image. ++ ++ Depending on how the image was created, this field may be empty and ++ is only set for images that were built/created locally. This field ++ is empty if the image was pulled from an image registry. ++ type: string ++ example: "" ++ RepoTags: ++ description: | ++ List of image names/tags in the local image cache that reference this ++ image. ++ ++ Multiple image tags can refer to the same image, and this list may be ++ empty if no tags reference the image, in which case the image is ++ "untagged", in which case it can still be referenced by its ID. ++ type: array ++ items: ++ type: string ++ example: ++ - example:1.0 ++ - example:latest ++ - example:stable ++ - internal.registry.example.com:5000/example:1.0 ++ RepoDigests: ++ description: | ++ List of content-addressable digests of locally available image manifests ++ that the image is referenced from. Multiple manifests can refer to the ++ same image. ++ ++ These digests are usually only available if the image was either pulled ++ from a registry, or if the image was pushed to a registry, which is when ++ the manifest is generated and its digest calculated. ++ type: array ++ items: ++ type: string ++ example: ++ - example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb ++ - internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578 ++ Created: ++ description: | ++ Date and time at which the image was created as a Unix timestamp ++ (number of seconds since EPOCH). ++ type: integer ++ example: "1644009612" ++ Size: ++ description: | ++ Total size of the image including all layers it is composed of. ++ type: integer ++ format: int64 ++ example: 172064416 ++ SharedSize: ++ description: | ++ Total size of image layers that are shared between this image and other ++ images. ++ ++ This size is not calculated by default. `-1` indicates that the value ++ has not been set / calculated. ++ type: integer ++ format: int64 ++ example: 1239828 ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ Containers: ++ description: | ++ Number of containers using this image. Includes both stopped and running ++ containers. ++ ++ `-1` indicates that the value has not been set / calculated. ++ type: integer ++ example: 2 ++ Manifests: ++ description: | ++ Manifests is a list of manifests available in this image. ++ It provides a more detailed view of the platform-specific image manifests ++ or other image-attached data like build attestations. ++ ++ WARNING: This is experimental and may change at any time without any backward ++ compatibility. ++ type: array ++ x-omitempty: true ++ items: ++ $ref: "#/components/schemas/ImageManifestSummary" ++ Descriptor: ++ allOf: ++ - $ref: "#/components/schemas/OCIDescriptor" ++ - anyOf: ++ - description: | ++ Descriptor is an OCI descriptor of the image target. ++ In case of a multi-platform image, this descriptor points to the OCI index ++ or a manifest list. ++ ++ This field is only present if the daemon provides a multi-platform image store. ++ ++ WARNING: This is experimental and may change at any time without any backward ++ compatibility. ++ - type: "null" ++ ImagesDiskUsage: ++ type: object ++ x-go-name: DiskUsage ++ x-go-package: github.com/moby/moby/api/types/image ++ description: | ++ represents system data usage for image resources. ++ properties: ++ ActiveCount: ++ description: | ++ Count of active images. ++ type: integer ++ format: int64 ++ example: 1 ++ TotalCount: ++ description: | ++ Count of all images. ++ type: integer ++ format: int64 ++ example: 4 ++ Reclaimable: ++ description: | ++ Disk space that can be reclaimed by removing unused images. ++ type: integer ++ format: int64 ++ example: 12345678 ++ TotalSize: ++ description: | ++ Disk space in use by images. ++ type: integer ++ format: int64 ++ example: 98765432 ++ Items: ++ description: | ++ List of image summaries. ++ type: array ++ x-omitempty: true ++ items: ++ x-go-type: ++ type: Summary ++ AuthConfig: ++ type: object ++ properties: ++ username: ++ type: string ++ password: ++ type: string ++ serveraddress: ++ type: string ++ example: ++ username: hannibal ++ password: xxxx ++ serveraddress: https://index.docker.io/v1/ ++ AuthResponse: ++ description: | ++ An identity token was generated successfully. ++ type: object ++ required: ++ - Status ++ properties: ++ Status: ++ description: The status of the authentication ++ type: string ++ example: Login Succeeded ++ IdentityToken: ++ description: An opaque token used to authenticate a user after a successful login ++ type: string ++ example: 9cbaf023786cd7... ++ ProcessConfig: ++ type: object ++ properties: ++ privileged: ++ type: boolean ++ user: ++ type: string ++ tty: ++ type: boolean ++ entrypoint: ++ type: string ++ arguments: ++ type: array ++ items: ++ type: string ++ Volume: ++ type: object ++ required: ++ - Name ++ - Driver ++ - Mountpoint ++ - Labels ++ - Scope ++ - Options ++ properties: ++ Name: ++ type: string ++ description: Name of the volume. ++ example: tardis ++ Driver: ++ type: string ++ description: Name of the volume driver used by the volume. ++ example: custom ++ Mountpoint: ++ type: string ++ description: Mount path of the volume on the host. ++ example: /var/lib/docker/volumes/tardis ++ CreatedAt: ++ type: string ++ format: dateTime ++ description: Date/Time the volume was created. ++ example: 2016-06-07T20:31:11.853781916Z ++ Status: ++ type: object ++ description: | ++ Low-level details about the volume, provided by the volume driver. ++ Details are returned as a map with key/value pairs: ++ `{"key":"value","key2":"value2"}`. ++ ++ The `Status` field is optional, and is omitted if the volume driver ++ does not support this feature. ++ additionalProperties: ++ type: object ++ example: ++ hello: world ++ Labels: ++ type: object ++ description: User-defined key/value metadata. ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ Scope: ++ type: string ++ description: | ++ The level at which the volume exists. Either `global` for cluster-wide, ++ or `local` for machine level. ++ default: local ++ enum: ++ - local ++ - global ++ example: local ++ ClusterVolume: ++ $ref: "#/components/schemas/ClusterVolume" ++ Options: ++ type: object ++ description: | ++ The driver specific options used when creating the volume. ++ additionalProperties: ++ type: string ++ example: ++ device: tmpfs ++ o: size=100m,uid=1000 ++ type: tmpfs ++ UsageData: ++ type: ++ - object ++ - "null" ++ x-go-name: UsageData ++ required: ++ - Size ++ - RefCount ++ description: | ++ Usage details about the volume. This information is used by the ++ `GET /system/df` endpoint, and omitted in other endpoints. ++ properties: ++ Size: ++ type: integer ++ format: int64 ++ default: -1 ++ description: | ++ Amount of disk space used by the volume (in bytes). This information ++ is only available for volumes created with the `"local"` volume ++ driver. For volumes created with other volume drivers, this field ++ is set to `-1` ("not available") ++ RefCount: ++ type: integer ++ format: int64 ++ default: -1 ++ description: | ++ The number of containers referencing this volume. This field ++ is set to `-1` if the reference-count is not available. ++ VolumesDiskUsage: ++ type: object ++ x-go-name: DiskUsage ++ x-go-package: github.com/moby/moby/api/types/volume ++ description: | ++ represents system data usage for volume resources. ++ properties: ++ ActiveCount: ++ description: | ++ Count of active volumes. ++ type: integer ++ format: int64 ++ example: 1 ++ TotalCount: ++ description: | ++ Count of all volumes. ++ type: integer ++ format: int64 ++ example: 4 ++ Reclaimable: ++ description: | ++ Disk space that can be reclaimed by removing inactive volumes. ++ type: integer ++ format: int64 ++ example: 12345678 ++ TotalSize: ++ description: | ++ Disk space in use by volumes. ++ type: integer ++ format: int64 ++ example: 98765432 ++ Items: ++ description: | ++ List of volumes. ++ type: array ++ x-omitempty: true ++ items: ++ x-go-type: ++ type: Volume ++ VolumeCreateRequest: ++ description: Volume configuration ++ type: object ++ title: VolumeConfig ++ x-go-name: CreateRequest ++ properties: ++ Name: ++ description: | ++ The new volume's name. If not specified, Docker generates a name. ++ type: string ++ example: tardis ++ Driver: ++ description: Name of the volume driver to use. ++ type: string ++ default: local ++ example: custom ++ DriverOpts: ++ description: | ++ A mapping of driver options and values. These options are ++ passed directly to the driver and are driver specific. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ device: tmpfs ++ o: size=100m,uid=1000 ++ type: tmpfs ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ ClusterVolumeSpec: ++ $ref: "#/components/schemas/ClusterVolumeSpec" ++ VolumeListResponse: ++ type: object ++ title: VolumeListResponse ++ x-go-name: ListResponse ++ description: Volume list response ++ properties: ++ Volumes: ++ type: array ++ description: List of volumes ++ items: ++ $ref: "#/components/schemas/Volume" ++ Warnings: ++ type: array ++ description: | ++ Warnings that occurred when fetching the list of volumes. ++ items: ++ type: string ++ example: [] ++ Network: ++ type: object ++ properties: ++ Name: ++ description: | ++ Name of the network. ++ type: string ++ example: my_network ++ x-omitempty: false ++ Id: ++ description: | ++ ID that uniquely identifies a network on a single machine. ++ type: string ++ x-go-name: ID ++ x-omitempty: false ++ example: 7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99 ++ Created: ++ description: | ++ Date and time at which the network was created in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ x-omitempty: false ++ x-go-type: ++ type: Time ++ import: ++ package: time ++ hints: ++ nullable: false ++ example: 2016-10-19T04:33:30.360899459Z ++ Scope: ++ description: | ++ The level at which the network exists (e.g. `swarm` for cluster-wide ++ or `local` for machine level) ++ type: string ++ x-omitempty: false ++ example: local ++ Driver: ++ description: | ++ The name of the driver used to create the network (e.g. `bridge`, ++ `overlay`). ++ type: string ++ x-omitempty: false ++ example: overlay ++ EnableIPv4: ++ description: | ++ Whether the network was created with IPv4 enabled. ++ type: boolean ++ x-omitempty: false ++ example: true ++ EnableIPv6: ++ description: | ++ Whether the network was created with IPv6 enabled. ++ type: boolean ++ x-omitempty: false ++ example: false ++ IPAM: ++ allOf: ++ - $ref: "#/components/schemas/IPAM" ++ - description: | ++ The network's IP Address Management. ++ x-nullable: false ++ x-omitempty: false ++ Internal: ++ description: | ++ Whether the network is created to only allow internal networking ++ connectivity. ++ type: boolean ++ x-omitempty: false ++ default: false ++ example: false ++ Attachable: ++ description: | ++ Whether a global / swarm scope network is manually attachable by regular ++ containers from workers in swarm mode. ++ type: boolean ++ x-omitempty: false ++ default: false ++ example: false ++ Ingress: ++ description: | ++ Whether the network is providing the routing-mesh for the swarm cluster. ++ type: boolean ++ x-omitempty: false ++ default: false ++ example: false ++ ConfigFrom: ++ allOf: ++ - $ref: "#/components/schemas/ConfigReference" ++ - x-nullable: false ++ x-omitempty: false ++ ConfigOnly: ++ description: | ++ Whether the network is a config-only network. Config-only networks are ++ placeholder networks for network configurations to be used by other ++ networks. Config-only networks cannot be used directly to run containers ++ or services. ++ type: boolean ++ x-omitempty: false ++ default: false ++ Options: ++ description: | ++ Network-specific options uses when creating the network. ++ type: object ++ x-omitempty: false ++ additionalProperties: ++ type: string ++ example: ++ com.docker.network.bridge.default_bridge: "true" ++ com.docker.network.bridge.enable_icc: "true" ++ com.docker.network.bridge.enable_ip_masquerade: "true" ++ com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 ++ com.docker.network.bridge.name: docker0 ++ com.docker.network.driver.mtu: "1500" ++ Labels: ++ description: | ++ Metadata specific to the network being created. ++ type: object ++ x-omitempty: false ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ Peers: ++ description: | ++ List of peer nodes for an overlay network. This field is only present ++ for overlay networks, and omitted for other network types. ++ type: array ++ x-omitempty: true ++ items: ++ $ref: "#/components/schemas/PeerInfo" ++ NetworkSummary: ++ description: Network list response item ++ x-go-name: Summary ++ type: object ++ allOf: ++ - $ref: "#/components/schemas/Network" ++ NetworkInspect: ++ description: The body of the "get network" http response message. ++ x-go-name: Inspect ++ type: object ++ allOf: ++ - $ref: "#/components/schemas/Network" ++ properties: ++ Containers: ++ description: | ++ Contains endpoints attached to the network. ++ type: object ++ x-omitempty: false ++ additionalProperties: ++ $ref: "#/components/schemas/EndpointResource" ++ example: ++ 19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c: ++ Name: test ++ EndpointID: 628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a ++ MacAddress: 02:42:ac:13:00:02 ++ IPv4Address: 172.19.0.2/16 ++ IPv6Address: "" ++ Services: ++ description: | ++ List of services using the network. This field is only present for ++ swarm scope networks, and omitted for local scope networks. ++ type: object ++ x-omitempty: true ++ additionalProperties: ++ x-go-type: ++ type: ServiceInfo ++ hints: ++ nullable: false ++ Status: ++ allOf: ++ - $ref: "#/components/schemas/NetworkStatus" ++ - description: | ++ provides runtime information about the network such as the number of allocated IPs. ++ NetworkStatus: ++ description: | ++ provides runtime information about the network such as the number of allocated IPs. ++ type: object ++ x-go-name: Status ++ properties: ++ IPAM: ++ $ref: "#/components/schemas/IPAMStatus" ++ ServiceInfo: ++ x-omitempty: false ++ description: | ++ represents service parameters with the list of service's tasks ++ type: object ++ properties: ++ VIP: ++ type: string ++ x-omitempty: false ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ Ports: ++ type: array ++ x-omitempty: false ++ items: ++ type: string ++ LocalLBIndex: ++ type: integer ++ format: int ++ x-omitempty: false ++ x-go-type: ++ type: int ++ Tasks: ++ type: array ++ x-omitempty: false ++ items: ++ $ref: "#/components/schemas/NetworkTaskInfo" ++ NetworkTaskInfo: ++ x-omitempty: false ++ x-go-name: Task ++ description: | ++ carries the information about one backend task ++ type: object ++ properties: ++ Name: ++ type: string ++ x-omitempty: false ++ EndpointID: ++ type: string ++ x-omitempty: false ++ EndpointIP: ++ type: string ++ x-omitempty: false ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ Info: ++ type: object ++ x-omitempty: false ++ additionalProperties: ++ type: string ++ ConfigReference: ++ x-omitempty: false ++ description: | ++ The config-only network source to provide the configuration for ++ this network. ++ type: object ++ properties: ++ Network: ++ description: | ++ The name of the config-only network that provides the network's ++ configuration. The specified network must be an existing config-only ++ network. Only network names are allowed, not network IDs. ++ type: string ++ x-omitempty: false ++ example: config_only_network_01 ++ IPAM: ++ type: object ++ x-omitempty: false ++ properties: ++ Driver: ++ description: Name of the IPAM driver to use. ++ type: string ++ default: default ++ example: default ++ Config: ++ description: | ++ List of IPAM configuration options, specified as a map: ++ ++ ``` ++ {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } ++ ``` ++ type: array ++ items: ++ $ref: "#/components/schemas/IPAMConfig" ++ Options: ++ description: Driver-specific options, specified as a map. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ foo: bar ++ IPAMConfig: ++ type: object ++ properties: ++ Subnet: ++ type: string ++ example: 172.20.0.0/16 ++ IPRange: ++ type: string ++ example: 172.20.10.0/24 ++ Gateway: ++ type: string ++ example: 172.20.10.11 ++ AuxiliaryAddresses: ++ type: object ++ additionalProperties: ++ type: string ++ IPAMStatus: ++ type: object ++ x-omitempty: false ++ properties: ++ Subnets: ++ type: object ++ additionalProperties: ++ $ref: "#/components/schemas/SubnetStatus" ++ example: ++ 172.16.0.0/16: ++ IPsInUse: 3 ++ DynamicIPsAvailable: 65533 ++ 2001:db8:abcd:0012::0/96: ++ IPsInUse: 5 ++ DynamicIPsAvailable: 4294967291 ++ x-go-type: ++ type: SubnetStatuses ++ kind: map ++ SubnetStatus: ++ type: object ++ x-omitempty: false ++ properties: ++ IPsInUse: ++ description: | ++ Number of IP addresses in the subnet that are in use or reserved and are therefore unavailable for allocation, saturating at 264 - 1. ++ type: integer ++ format: uint64 ++ x-omitempty: false ++ DynamicIPsAvailable: ++ description: | ++ Number of IP addresses within the network's IPRange for the subnet that are available for allocation, saturating at 264 - 1. ++ type: integer ++ format: uint64 ++ x-omitempty: false ++ EndpointResource: ++ type: object ++ description: | ++ contains network resources allocated and used for a container in a network. ++ properties: ++ Name: ++ type: string ++ x-omitempty: false ++ example: container_1 ++ EndpointID: ++ type: string ++ x-omitempty: false ++ example: 628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a ++ MacAddress: ++ type: string ++ x-omitempty: false ++ example: 02:42:ac:13:00:02 ++ x-go-type: ++ type: HardwareAddr ++ IPv4Address: ++ type: string ++ x-omitempty: false ++ example: 172.19.0.2/16 ++ x-go-type: ++ type: Prefix ++ import: ++ package: net/netip ++ IPv6Address: ++ type: string ++ x-omitempty: false ++ example: "" ++ x-go-type: ++ type: Prefix ++ import: ++ package: net/netip ++ PeerInfo: ++ description: | ++ represents one peer of an overlay network. ++ type: object ++ properties: ++ Name: ++ description: ID of the peer-node in the Swarm cluster. ++ type: string ++ x-omitempty: false ++ example: 6869d7c1732b ++ IP: ++ description: IP-address of the peer-node in the Swarm cluster. ++ type: string ++ x-omitempty: false ++ example: 10.133.77.91 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ NetworkCreateResponse: ++ description: OK response to NetworkCreate operation ++ type: object ++ title: NetworkCreateResponse ++ x-go-name: CreateResponse ++ required: ++ - Id ++ - Warning ++ properties: ++ Id: ++ description: The ID of the created network. ++ type: string ++ example: b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d ++ Warning: ++ description: Warnings encountered when creating the container ++ type: string ++ example: "" ++ BuildInfo: ++ type: object ++ properties: ++ id: ++ type: string ++ stream: ++ type: string ++ errorDetail: ++ $ref: "#/components/schemas/ErrorDetail" ++ status: ++ type: string ++ progressDetail: ++ $ref: "#/components/schemas/ProgressDetail" ++ aux: ++ $ref: "#/components/schemas/ImageID" ++ BuildCache: ++ type: object ++ description: | ++ BuildCache contains information about a build cache record. ++ properties: ++ ID: ++ type: string ++ description: | ++ Unique ID of the build cache record. ++ example: ndlpt0hhvkqcdfkputsk4cq9c ++ Parents: ++ description: | ++ List of parent build cache record IDs. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - hw53o5aio51xtltp5xjp8v7fx ++ Type: ++ type: string ++ description: | ++ Cache record type. ++ example: regular ++ enum: ++ - internal ++ - frontend ++ - source.local ++ - source.git.checkout ++ - exec.cachemount ++ - regular ++ Description: ++ type: string ++ description: | ++ Description of the build-step that produced the build cache. ++ example: mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache ++ InUse: ++ type: boolean ++ description: | ++ Indicates if the build cache is in use. ++ example: false ++ Shared: ++ type: boolean ++ description: | ++ Indicates if the build cache is shared. ++ example: true ++ Size: ++ description: | ++ Amount of disk space used by the build cache (in bytes). ++ type: integer ++ example: 51 ++ CreatedAt: ++ description: | ++ Date and time at which the build cache was created in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2016-08-18T10:44:24.496525531Z ++ LastUsedAt: ++ description: | ++ Date and time at which the build cache was last used in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: ++ - string ++ - "null" ++ format: dateTime ++ example: 2017-08-09T07:09:37.632105588Z ++ UsageCount: ++ type: integer ++ example: 26 ++ BuildCacheDiskUsage: ++ type: object ++ x-go-name: DiskUsage ++ x-go-package: github.com/moby/moby/api/types/build ++ description: | ++ represents system data usage for build cache resources. ++ properties: ++ ActiveCount: ++ description: | ++ Count of active build cache records. ++ type: integer ++ format: int64 ++ example: 1 ++ TotalCount: ++ description: | ++ Count of all build cache records. ++ type: integer ++ format: int64 ++ example: 4 ++ Reclaimable: ++ description: | ++ Disk space that can be reclaimed by removing inactive build cache records. ++ type: integer ++ format: int64 ++ example: 12345678 ++ TotalSize: ++ description: | ++ Disk space in use by build cache records. ++ type: integer ++ format: int64 ++ example: 98765432 ++ Items: ++ description: | ++ List of build cache records. ++ type: array ++ x-omitempty: true ++ items: ++ x-go-type: ++ type: CacheRecord ++ ImageID: ++ type: object ++ description: Image ID or Digest ++ properties: ++ ID: ++ type: string ++ example: ++ ID: sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c ++ CreateImageInfo: ++ type: object ++ properties: ++ id: ++ type: string ++ errorDetail: ++ $ref: "#/components/schemas/ErrorDetail" ++ status: ++ type: string ++ progressDetail: ++ $ref: "#/components/schemas/ProgressDetail" ++ PushImageInfo: ++ type: object ++ properties: ++ errorDetail: ++ $ref: "#/components/schemas/ErrorDetail" ++ status: ++ type: string ++ progressDetail: ++ $ref: "#/components/schemas/ProgressDetail" ++ DeviceInfo: ++ type: object ++ description: | ++ DeviceInfo represents a device that can be used by a container. ++ properties: ++ Source: ++ type: string ++ example: cdi ++ description: | ++ The origin device driver. ++ ID: ++ type: string ++ example: vendor.com/gpu=0 ++ description: | ++ The unique identifier for the device within its source driver. ++ For CDI devices, this would be an FQDN like "vendor.com/gpu=0". ++ NRIInfo: ++ description: | ++ Information about the Node Resource Interface (NRI). ++ ++ This field is only present if NRI is enabled. ++ type: ++ - object ++ - "null" ++ properties: ++ Info: ++ description: | ++ Information about NRI, provided as "label" / "value" pairs. ++ ++ ++ ++ ++ ++ ++ > **Note**: The information returned in this field, including the ++ > formatting of values and labels, should not be considered stable, ++ > and may change without notice. ++ type: array ++ items: ++ type: array ++ items: ++ type: string ++ example: ++ - - plugin-path ++ - /opt/docker/nri/plugins ++ ErrorDetail: ++ type: object ++ properties: ++ code: ++ type: integer ++ message: ++ type: string ++ ProgressDetail: ++ type: object ++ properties: ++ current: ++ type: integer ++ total: ++ type: integer ++ ErrorResponse: ++ description: Represents an error. ++ type: object ++ required: ++ - message ++ properties: ++ message: ++ description: The error message. ++ type: string ++ example: ++ message: Something went wrong. ++ IDResponse: ++ description: Response to an API call that returns just an Id ++ type: object ++ x-go-name: IDResponse ++ required: ++ - Id ++ properties: ++ Id: ++ description: The id of the newly created object. ++ type: string ++ NetworkConnectRequest: ++ description: | ++ NetworkConnectRequest represents the data to be used to connect a container to a network. ++ type: object ++ x-go-name: ConnectRequest ++ required: ++ - Container ++ properties: ++ Container: ++ type: string ++ description: The ID or name of the container to connect to the network. ++ example: 3613f73ba0e4 ++ EndpointConfig: ++ allOf: ++ - $ref: "#/components/schemas/EndpointSettings" ++ - anyOf: ++ - {} ++ - type: "null" ++ NetworkDisconnectRequest: ++ description: | ++ NetworkDisconnectRequest represents the data to be used to disconnect a container from a network. ++ type: object ++ x-go-name: DisconnectRequest ++ required: ++ - Container ++ properties: ++ Container: ++ type: string ++ description: The ID or name of the container to disconnect from the network. ++ example: 3613f73ba0e4 ++ Force: ++ type: boolean ++ description: Force the container to disconnect from the network. ++ default: false ++ x-omitempty: false ++ example: false ++ EndpointSettings: ++ description: Configuration for a network endpoint. ++ type: object ++ properties: ++ IPAMConfig: ++ $ref: "#/components/schemas/EndpointIPAMConfig" ++ Links: ++ type: array ++ items: ++ type: string ++ example: ++ - container_1 ++ - container_2 ++ MacAddress: ++ description: | ++ MAC address for the endpoint on this network. The network driver might ignore this parameter. ++ type: string ++ example: 02:42:ac:11:00:04 ++ x-go-type: ++ type: HardwareAddr ++ Aliases: ++ type: array ++ items: ++ type: string ++ example: ++ - server_x ++ - server_y ++ DriverOpts: ++ description: | ++ DriverOpts is a mapping of driver options and values. These options ++ are passed directly to the driver and are driver specific. ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ GwPriority: ++ description: | ++ This property determines which endpoint will provide the default ++ gateway for a container. The endpoint with the highest priority will ++ be used. If multiple endpoints have the same priority, endpoints are ++ lexicographically sorted based on their network name, and the one ++ that sorts first is picked. ++ type: integer ++ format: int64 ++ example: ++ - 10 ++ NetworkID: ++ description: | ++ Unique ID of the network. ++ type: string ++ example: 08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a ++ EndpointID: ++ description: | ++ Unique ID for the service endpoint in a Sandbox. ++ type: string ++ example: b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b ++ Gateway: ++ description: | ++ Gateway address for this network. ++ type: string ++ example: 172.17.0.1 ++ IPAddress: ++ description: | ++ IPv4 address. ++ type: string ++ example: 172.17.0.4 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ IPPrefixLen: ++ description: | ++ Mask length of the IPv4 address. ++ type: integer ++ example: 16 ++ IPv6Gateway: ++ description: | ++ IPv6 gateway address. ++ type: string ++ example: 2001:db8:2::100 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ GlobalIPv6Address: ++ description: | ++ Global IPv6 address. ++ type: string ++ example: 2001:db8::5689 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ GlobalIPv6PrefixLen: ++ description: | ++ Mask length of the global IPv6 address. ++ type: integer ++ format: int64 ++ example: 64 ++ DNSNames: ++ description: | ++ List of all DNS names an endpoint has on a specific network. This ++ list is based on the container name, network aliases, container short ++ ID, and hostname. ++ ++ These DNS names are non-fully qualified but can contain several dots. ++ You can get fully qualified DNS names by appending `.`. ++ For instance, if container name is `my.ctr` and the network is named ++ `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be ++ `my.ctr.testnet`. ++ type: array ++ items: ++ type: string ++ example: ++ - foobar ++ - server_x ++ - server_y ++ - my.ctr ++ EndpointIPAMConfig: ++ description: | ++ EndpointIPAMConfig represents an endpoint's IPAM configuration. ++ type: ++ - object ++ - "null" ++ properties: ++ IPv4Address: ++ type: string ++ example: 172.20.30.33 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ IPv6Address: ++ type: string ++ example: 2001:db8:abcd::3033 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ LinkLocalIPs: ++ type: array ++ items: ++ type: string ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ example: ++ - 169.254.34.68 ++ - fe80::3468 ++ PluginMount: ++ type: object ++ x-go-name: Mount ++ required: ++ - Name ++ - Description ++ - Settable ++ - Source ++ - Destination ++ - Type ++ - Options ++ properties: ++ Name: ++ type: string ++ example: some-mount ++ Description: ++ type: string ++ example: This is a mount that's used by the plugin. ++ Settable: ++ type: array ++ items: ++ type: string ++ Source: ++ type: string ++ example: /var/lib/docker/plugins/ ++ Destination: ++ type: string ++ example: /mnt/state ++ Type: ++ type: string ++ example: bind ++ Options: ++ type: array ++ items: ++ type: string ++ example: ++ - rbind ++ - rw ++ PluginDevice: ++ type: object ++ x-go-name: Device ++ required: ++ - Name ++ - Description ++ - Settable ++ - Path ++ properties: ++ Name: ++ type: string ++ Description: ++ type: string ++ Settable: ++ type: array ++ items: ++ type: string ++ Path: ++ type: string ++ example: /dev/fuse ++ PluginEnv: ++ type: object ++ x-go-name: Env ++ required: ++ - Name ++ - Description ++ - Settable ++ - Value ++ properties: ++ Name: ++ type: string ++ Description: ++ type: string ++ Settable: ++ type: array ++ items: ++ type: string ++ Value: ++ type: string ++ PluginPrivilege: ++ description: | ++ Describes a permission the user has to accept upon installing ++ the plugin. ++ type: object ++ x-go-name: Privilege ++ properties: ++ Name: ++ type: string ++ example: network ++ Description: ++ type: string ++ Value: ++ type: array ++ items: ++ type: string ++ example: ++ - host ++ Plugin: ++ description: A plugin for the Engine API ++ type: object ++ x-go-name: Plugin ++ required: ++ - Settings ++ - Enabled ++ - Config ++ - Name ++ properties: ++ Id: ++ type: string ++ example: 5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078 ++ Name: ++ type: string ++ example: tiborvass/sample-volume-plugin ++ Enabled: ++ description: True if the plugin is running. False if the plugin is not running, only installed. ++ type: boolean ++ example: true ++ Settings: ++ description: user-configurable settings for the plugin. ++ type: object ++ x-go-name: Settings ++ required: ++ - Args ++ - Devices ++ - Env ++ - Mounts ++ properties: ++ Mounts: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginMount" ++ Env: ++ type: array ++ items: ++ type: string ++ example: ++ - DEBUG=0 ++ Args: ++ type: array ++ items: ++ type: string ++ Devices: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginDevice" ++ PluginReference: ++ description: plugin remote reference used to push/pull the plugin ++ type: string ++ x-go-name: PluginReference ++ example: localhost:5000/tiborvass/sample-volume-plugin:latest ++ Config: ++ description: The config of a plugin. ++ type: object ++ x-go-name: Config ++ required: ++ - Description ++ - Documentation ++ - Interface ++ - Entrypoint ++ - WorkDir ++ - Network ++ - Linux ++ - PidHost ++ - PropagatedMount ++ - IpcHost ++ - Mounts ++ - Env ++ - Args ++ properties: ++ Description: ++ type: string ++ example: A sample volume plugin for Docker ++ Documentation: ++ type: string ++ example: https://docs.docker.com/engine/extend/plugins/ ++ Interface: ++ description: The interface between Docker and the plugin ++ type: object ++ x-go-name: Interface ++ required: ++ - Types ++ - Socket ++ properties: ++ Types: ++ type: array ++ items: ++ type: string ++ x-go-type: ++ type: CapabilityID ++ example: ++ - docker.volumedriver/1.0 ++ Socket: ++ type: string ++ example: plugins.sock ++ ProtocolScheme: ++ type: string ++ example: some.protocol/v1.0 ++ description: Protocol to use for clients connecting to the plugin. ++ enum: ++ - "" ++ - moby.plugins.http/v1 ++ Entrypoint: ++ type: array ++ items: ++ type: string ++ example: ++ - /usr/bin/sample-volume-plugin ++ - /data ++ WorkDir: ++ type: string ++ example: /bin/ ++ User: ++ type: object ++ x-go-name: User ++ properties: ++ UID: ++ type: integer ++ format: uint32 ++ example: 1000 ++ GID: ++ type: integer ++ format: uint32 ++ example: 1000 ++ Network: ++ type: object ++ x-go-name: NetworkConfig ++ required: ++ - Type ++ properties: ++ Type: ++ type: string ++ example: host ++ Linux: ++ type: object ++ x-go-name: LinuxConfig ++ required: ++ - Capabilities ++ - AllowAllDevices ++ - Devices ++ properties: ++ Capabilities: ++ type: array ++ items: ++ type: string ++ example: ++ - CAP_SYS_ADMIN ++ - CAP_SYSLOG ++ AllowAllDevices: ++ type: boolean ++ example: false ++ Devices: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginDevice" ++ PropagatedMount: ++ type: string ++ example: /mnt/volumes ++ IpcHost: ++ type: boolean ++ example: false ++ PidHost: ++ type: boolean ++ example: false ++ Mounts: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginMount" ++ Env: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginEnv" ++ example: ++ - Name: DEBUG ++ Description: If set, prints debug messages ++ Settable: null ++ Value: "0" ++ Args: ++ type: object ++ x-go-name: Args ++ required: ++ - Name ++ - Description ++ - Settable ++ - Value ++ properties: ++ Name: ++ type: string ++ example: args ++ Description: ++ type: string ++ example: command line arguments ++ Settable: ++ type: array ++ items: ++ type: string ++ Value: ++ type: array ++ items: ++ type: string ++ rootfs: ++ type: object ++ x-go-name: RootFS ++ properties: ++ type: ++ type: string ++ example: layers ++ diff_ids: ++ type: array ++ items: ++ type: string ++ example: ++ - sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887 ++ - sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8 ++ ObjectVersion: ++ description: | ++ The version number of the object such as node, service, etc. This is needed ++ to avoid conflicting writes. The client must send the version number along ++ with the modified specification when updating these objects. ++ ++ This approach ensures safe concurrency and determinism in that the change ++ on the object may not be applied if the version number has changed from the ++ last read. In other words, if two update requests specify the same base ++ version, only one of the requests can succeed. As a result, two separate ++ update requests that happen at the same time will not unintentionally ++ overwrite each other. ++ type: object ++ properties: ++ Index: ++ type: integer ++ format: uint64 ++ example: 373531 ++ NodeSpec: ++ type: object ++ properties: ++ Name: ++ description: Name for the node. ++ type: string ++ example: my-node ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ Role: ++ description: Role of the node. ++ type: string ++ enum: ++ - worker ++ - manager ++ example: manager ++ Availability: ++ description: Availability of the node. ++ type: string ++ enum: ++ - active ++ - pause ++ - drain ++ example: active ++ example: ++ Availability: active ++ Name: node-name ++ Role: manager ++ Labels: ++ foo: bar ++ Node: ++ type: object ++ properties: ++ ID: ++ type: string ++ example: 24ifsmvkjbyhk ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ description: | ++ Date and time at which the node was added to the swarm in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2016-08-18T10:44:24.496525531Z ++ UpdatedAt: ++ description: | ++ Date and time at which the node was last updated in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2017-08-09T07:09:37.632105588Z ++ Spec: ++ $ref: "#/components/schemas/NodeSpec" ++ Description: ++ $ref: "#/components/schemas/NodeDescription" ++ Status: ++ $ref: "#/components/schemas/NodeStatus" ++ ManagerStatus: ++ $ref: "#/components/schemas/ManagerStatus" ++ NodeDescription: ++ description: | ++ NodeDescription encapsulates the properties of the Node as reported by the ++ agent. ++ type: object ++ properties: ++ Hostname: ++ type: string ++ example: bf3067039e47 ++ Platform: ++ $ref: "#/components/schemas/Platform" ++ Resources: ++ $ref: "#/components/schemas/ResourceObject" ++ Engine: ++ $ref: "#/components/schemas/EngineDescription" ++ TLSInfo: ++ $ref: "#/components/schemas/TLSInfo" ++ Platform: ++ description: | ++ Platform represents the platform (Arch/OS). ++ type: object ++ properties: ++ Architecture: ++ description: | ++ Architecture represents the hardware architecture (for example, ++ `x86_64`). ++ type: string ++ example: x86_64 ++ OS: ++ description: | ++ OS represents the Operating System (for example, `linux` or `windows`). ++ type: string ++ example: linux ++ EngineDescription: ++ description: EngineDescription provides information about an engine. ++ type: object ++ properties: ++ EngineVersion: ++ type: string ++ example: 17.06.0 ++ Labels: ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ foo: bar ++ Plugins: ++ type: array ++ items: ++ type: object ++ properties: ++ Type: ++ type: string ++ Name: ++ type: string ++ example: ++ - Type: Log ++ Name: awslogs ++ - Type: Log ++ Name: fluentd ++ - Type: Log ++ Name: gcplogs ++ - Type: Log ++ Name: gelf ++ - Type: Log ++ Name: journald ++ - Type: Log ++ Name: json-file ++ - Type: Log ++ Name: splunk ++ - Type: Log ++ Name: syslog ++ - Type: Network ++ Name: bridge ++ - Type: Network ++ Name: host ++ - Type: Network ++ Name: ipvlan ++ - Type: Network ++ Name: macvlan ++ - Type: Network ++ Name: "null" ++ - Type: Network ++ Name: overlay ++ - Type: Volume ++ Name: local ++ - Type: Volume ++ Name: localhost:5000/vieux/sshfs:latest ++ - Type: Volume ++ Name: vieux/sshfs:latest ++ TLSInfo: ++ description: | ++ Information about the issuer of leaf TLS certificates and the trusted root ++ CA certificate. ++ type: object ++ properties: ++ TrustRoot: ++ description: | ++ The root CA certificate(s) that are used to validate leaf TLS ++ certificates. ++ type: string ++ CertIssuerSubject: ++ description: The base64-url-safe-encoded raw subject bytes of the issuer. ++ type: string ++ CertIssuerPublicKey: ++ description: | ++ The base64-url-safe-encoded raw public key bytes of the issuer. ++ type: string ++ example: ++ TrustRoot: | ++ -----BEGIN CERTIFICATE----- ++ MIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw ++ EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0 ++ MzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH ++ A0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf ++ 3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB ++ Af8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO ++ PQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz ++ pxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H ++ -----END CERTIFICATE----- ++ CertIssuerSubject: MBMxETAPBgNVBAMTCHN3YXJtLWNh ++ CertIssuerPublicKey: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A== ++ NodeStatus: ++ description: | ++ NodeStatus represents the status of a node. ++ ++ It provides the current status of the node, as seen by the manager. ++ type: object ++ properties: ++ State: ++ $ref: "#/components/schemas/NodeState" ++ Message: ++ type: string ++ example: "" ++ Addr: ++ description: IP address of the node. ++ type: string ++ example: 172.17.0.2 ++ NodeState: ++ description: NodeState represents the state of a node. ++ type: string ++ enum: ++ - unknown ++ - down ++ - ready ++ - disconnected ++ example: ready ++ ManagerStatus: ++ description: | ++ ManagerStatus represents the status of a manager. ++ ++ It provides the current status of a node's manager component, if the node ++ is a manager. ++ type: ++ - object ++ - "null" ++ properties: ++ Leader: ++ type: boolean ++ default: false ++ example: true ++ Reachability: ++ $ref: "#/components/schemas/Reachability" ++ Addr: ++ description: | ++ The IP address and port at which the manager is reachable. ++ type: string ++ example: 10.0.0.46:2377 ++ Reachability: ++ description: Reachability represents the reachability of a node. ++ type: string ++ enum: ++ - unknown ++ - unreachable ++ - reachable ++ example: reachable ++ SwarmSpec: ++ description: User modifiable swarm configuration. ++ type: object ++ properties: ++ Name: ++ description: Name of the swarm. ++ type: string ++ example: default ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.corp.type: production ++ com.example.corp.department: engineering ++ Orchestration: ++ description: Orchestration configuration. ++ type: ++ - object ++ - "null" ++ properties: ++ TaskHistoryRetentionLimit: ++ description: | ++ The number of historic tasks to keep per instance or node. If ++ negative, never remove completed or failed tasks. ++ type: integer ++ format: int64 ++ example: 10 ++ Raft: ++ description: Raft configuration. ++ type: object ++ properties: ++ SnapshotInterval: ++ description: The number of log entries between snapshots. ++ type: integer ++ format: uint64 ++ example: 10000 ++ KeepOldSnapshots: ++ description: | ++ The number of snapshots to keep beyond the current snapshot. ++ type: integer ++ format: uint64 ++ LogEntriesForSlowFollowers: ++ description: | ++ The number of log entries to keep around to sync up slow followers ++ after a snapshot is created. ++ type: integer ++ format: uint64 ++ example: 500 ++ ElectionTick: ++ description: | ++ The number of ticks that a follower will wait for a message from ++ the leader before becoming a candidate and starting an election. ++ `ElectionTick` must be greater than `HeartbeatTick`. ++ ++ A tick currently defaults to one second, so these translate ++ directly to seconds currently, but this is NOT guaranteed. ++ type: integer ++ example: 3 ++ HeartbeatTick: ++ description: | ++ The number of ticks between heartbeats. Every HeartbeatTick ticks, ++ the leader will send a heartbeat to the followers. ++ ++ A tick currently defaults to one second, so these translate ++ directly to seconds currently, but this is NOT guaranteed. ++ type: integer ++ example: 1 ++ Dispatcher: ++ description: Dispatcher configuration. ++ type: ++ - object ++ - "null" ++ properties: ++ HeartbeatPeriod: ++ description: | ++ The delay for an agent to send a heartbeat to the dispatcher. ++ type: integer ++ format: int64 ++ example: 5000000000 ++ CAConfig: ++ description: CA configuration. ++ type: ++ - object ++ - "null" ++ properties: ++ NodeCertExpiry: ++ description: The duration node certificates are issued for. ++ type: integer ++ format: int64 ++ example: 7776000000000000 ++ ExternalCAs: ++ description: | ++ Configuration for forwarding signing requests to an external ++ certificate authority. ++ type: array ++ items: ++ type: object ++ properties: ++ Protocol: ++ description: | ++ Protocol for communication with the external CA (currently ++ only `cfssl` is supported). ++ type: string ++ enum: ++ - cfssl ++ default: cfssl ++ URL: ++ description: | ++ URL where certificate signing requests should be sent. ++ type: string ++ Options: ++ description: | ++ An object with key/value pairs that are interpreted as ++ protocol-specific options for the external CA driver. ++ type: object ++ additionalProperties: ++ type: string ++ CACert: ++ description: | ++ The root CA certificate (in PEM format) this external CA uses ++ to issue TLS certificates (assumed to be to the current swarm ++ root CA certificate if not provided). ++ type: string ++ SigningCACert: ++ description: | ++ The desired signing CA certificate for all swarm node TLS leaf ++ certificates, in PEM format. ++ type: string ++ SigningCAKey: ++ description: | ++ The desired signing CA key for all swarm node TLS leaf certificates, ++ in PEM format. ++ type: string ++ ForceRotate: ++ description: | ++ An integer whose purpose is to force swarm to generate a new ++ signing CA certificate and key, if none have been specified in ++ `SigningCACert` and `SigningCAKey` ++ format: uint64 ++ type: integer ++ EncryptionConfig: ++ description: Parameters related to encryption-at-rest. ++ type: object ++ properties: ++ AutoLockManagers: ++ description: | ++ If set, generate a key and use it to lock data stored on the ++ managers. ++ type: boolean ++ example: false ++ TaskDefaults: ++ description: Defaults for creating tasks in this cluster. ++ type: object ++ properties: ++ LogDriver: ++ description: | ++ The log driver to use for tasks created in the orchestrator if ++ unspecified by a service. ++ ++ Updating this value only affects new tasks. Existing tasks continue ++ to use their previously configured log driver until recreated. ++ type: object ++ properties: ++ Name: ++ description: | ++ The log driver to use as a default for new tasks. ++ type: string ++ example: json-file ++ Options: ++ description: | ++ Driver-specific options for the selected log driver, specified ++ as key/value pairs. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ max-file: "10" ++ max-size: 100m ++ ClusterInfo: ++ description: | ++ ClusterInfo represents information about the swarm as is returned by the ++ "/info" endpoint. Join-tokens are not included. ++ type: ++ - object ++ - "null" ++ properties: ++ ID: ++ description: The ID of the swarm. ++ type: string ++ example: abajmipo7b4xz5ip2nrla6b11 ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ description: | ++ Date and time at which the swarm was initialised in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2016-08-18T10:44:24.496525531Z ++ UpdatedAt: ++ description: | ++ Date and time at which the swarm was last updated in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2017-08-09T07:09:37.632105588Z ++ Spec: ++ $ref: "#/components/schemas/SwarmSpec" ++ TLSInfo: ++ $ref: "#/components/schemas/TLSInfo" ++ RootRotationInProgress: ++ description: | ++ Whether there is currently a root CA rotation in progress for the swarm ++ type: boolean ++ example: false ++ DataPathPort: ++ description: | ++ DataPathPort specifies the data path port number for data traffic. ++ Acceptable port range is 1024 to 49151. ++ If no port is set or is set to 0, the default port (4789) is used. ++ type: integer ++ format: uint32 ++ default: 4789 ++ example: 4789 ++ DefaultAddrPool: ++ description: | ++ Default Address Pool specifies default subnet pools for global scope ++ networks. ++ type: array ++ items: ++ type: string ++ format: CIDR ++ example: ++ - 10.10.0.0/16 ++ - 20.20.0.0/16 ++ SubnetSize: ++ description: | ++ SubnetSize specifies the subnet size of the networks created from the ++ default subnet pool. ++ type: integer ++ format: uint32 ++ maximum: 29 ++ default: 24 ++ example: 24 ++ JoinTokens: ++ description: | ++ JoinTokens contains the tokens workers and managers need to join the swarm. ++ type: object ++ properties: ++ Worker: ++ description: | ++ The token workers can use to join the swarm. ++ type: string ++ example: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx ++ Manager: ++ description: | ++ The token managers can use to join the swarm. ++ type: string ++ example: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 ++ Swarm: ++ type: object ++ allOf: ++ - $ref: "#/components/schemas/ClusterInfo" ++ - type: object ++ properties: ++ JoinTokens: ++ $ref: "#/components/schemas/JoinTokens" ++ TaskSpec: ++ description: User modifiable task configuration. ++ type: object ++ properties: ++ PluginSpec: ++ type: object ++ description: | ++ Plugin spec for the service. *(Experimental release only.)* ++ ++ ++ ++ ++ ++ ++ > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are ++ > mutually exclusive. PluginSpec is only used when the Runtime field ++ > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime ++ > field is set to `attachment`. ++ properties: ++ Name: ++ description: The name or 'alias' to use for the plugin. ++ type: string ++ Remote: ++ description: The plugin image reference to use. ++ type: string ++ Disabled: ++ description: Disable the plugin once scheduled. ++ type: boolean ++ PluginPrivilege: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginPrivilege" ++ ContainerSpec: ++ type: object ++ description: | ++ Container spec for the service. ++ ++ ++ ++ ++ ++ ++ > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are ++ > mutually exclusive. PluginSpec is only used when the Runtime field ++ > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime ++ > field is set to `attachment`. ++ properties: ++ Image: ++ description: The image name to use for the container ++ type: string ++ Labels: ++ description: User-defined key/value data. ++ type: object ++ additionalProperties: ++ type: string ++ Command: ++ description: The command to be run in the image. ++ type: array ++ items: ++ type: string ++ Args: ++ description: Arguments to the command. ++ type: array ++ items: ++ type: string ++ Hostname: ++ description: | ++ The hostname to use for the container, as a valid ++ [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. ++ type: string ++ Env: ++ description: | ++ A list of environment variables in the form `VAR=value`. ++ type: array ++ items: ++ type: string ++ Dir: ++ description: The working directory for commands to run in. ++ type: string ++ User: ++ description: The user inside the container. ++ type: string ++ Groups: ++ type: array ++ description: | ++ A list of additional groups that the container process will run as. ++ items: ++ type: string ++ Privileges: ++ type: object ++ description: Security options for the container ++ properties: ++ CredentialSpec: ++ type: object ++ description: CredentialSpec for managed service account (Windows only) ++ properties: ++ Config: ++ type: string ++ example: 0bt9dmxjvjiqermk6xrop3ekq ++ description: | ++ Load credential spec from a Swarm Config with the given ID. ++ The specified config must also be present in the Configs ++ field with the Runtime property set. ++ ++ ++ ++ ++ ++ ++ ++ > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, ++ > and `CredentialSpec.Config` are mutually exclusive. ++ File: ++ type: string ++ example: spec.json ++ description: | ++ Load credential spec from this file. The file is read by ++ the daemon, and must be present in the `CredentialSpecs` ++ subdirectory in the docker data directory, which defaults ++ to `C:\ProgramData\Docker\` on Windows. ++ ++ For example, specifying `spec.json` loads ++ `C:\ProgramData\Docker\CredentialSpecs\spec.json`. ++ ++ ++ ++ ++ ++ ++ > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, ++ > and `CredentialSpec.Config` are mutually exclusive. ++ Registry: ++ type: string ++ description: | ++ Load credential spec from this value in the Windows ++ registry. The specified registry value must be located in: ++ ++ `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` ++ ++ ++ ++ ++ ++ ++ ++ > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, ++ > and `CredentialSpec.Config` are mutually exclusive. ++ SELinuxContext: ++ type: object ++ description: SELinux labels of the container ++ properties: ++ Disable: ++ type: boolean ++ description: Disable SELinux ++ User: ++ type: string ++ description: SELinux user label ++ Role: ++ type: string ++ description: SELinux role label ++ Type: ++ type: string ++ description: SELinux type label ++ Level: ++ type: string ++ description: SELinux level label ++ Seccomp: ++ type: object ++ description: Options for configuring seccomp on the container ++ properties: ++ Mode: ++ type: string ++ enum: ++ - default ++ - unconfined ++ - custom ++ Profile: ++ description: The custom seccomp profile as a json object ++ type: string ++ AppArmor: ++ type: object ++ description: Options for configuring AppArmor on the container ++ properties: ++ Mode: ++ type: string ++ enum: ++ - default ++ - disabled ++ NoNewPrivileges: ++ type: boolean ++ description: Configuration of the no_new_privs bit in the container ++ TTY: ++ description: Whether a pseudo-TTY should be allocated. ++ type: boolean ++ OpenStdin: ++ description: Open `stdin` ++ type: boolean ++ ReadOnly: ++ description: Mount the container's root filesystem as read only. ++ type: boolean ++ Mounts: ++ description: | ++ Specification for mounts to be added to containers created as part ++ of the service. ++ type: array ++ items: ++ $ref: "#/components/schemas/Mount" ++ StopSignal: ++ description: Signal to stop the container. ++ type: string ++ StopGracePeriod: ++ description: | ++ Amount of time to wait for the container to terminate before ++ forcefully killing it. ++ type: integer ++ format: int64 ++ Healthcheck: ++ $ref: "#/components/schemas/HealthConfig" ++ Hosts: ++ type: array ++ description: | ++ A list of hostname/IP mappings to add to the container's `hosts` ++ file. The format of extra hosts is specified in the ++ [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) ++ man page: ++ ++ IP_address canonical_hostname [aliases...] ++ items: ++ type: string ++ DNSConfig: ++ description: | ++ Specification for DNS related configurations in resolver configuration ++ file (`resolv.conf`). ++ type: object ++ properties: ++ Nameservers: ++ description: The IP addresses of the name servers. ++ type: array ++ items: ++ type: string ++ Search: ++ description: A search list for host-name lookup. ++ type: array ++ items: ++ type: string ++ Options: ++ description: | ++ A list of internal resolver variables to be modified (e.g., ++ `debug`, `ndots:3`, etc.). ++ type: array ++ items: ++ type: string ++ Secrets: ++ description: | ++ Secrets contains references to zero or more secrets that will be ++ exposed to the service. ++ type: array ++ items: ++ type: object ++ properties: ++ File: ++ description: | ++ File represents a specific target that is backed by a file. ++ type: object ++ properties: ++ Name: ++ description: | ++ Name represents the final filename in the filesystem. ++ type: string ++ UID: ++ description: UID represents the file UID. ++ type: string ++ GID: ++ description: GID represents the file GID. ++ type: string ++ Mode: ++ description: Mode represents the FileMode of the file. ++ type: integer ++ format: uint32 ++ SecretID: ++ description: | ++ SecretID represents the ID of the specific secret that we're ++ referencing. ++ type: string ++ SecretName: ++ description: | ++ SecretName is the name of the secret that this references, ++ but this is just provided for lookup/display purposes. The ++ secret in the reference will be identified by its ID. ++ type: string ++ OomScoreAdj: ++ type: integer ++ format: int64 ++ description: | ++ An integer value containing the score given to the container in ++ order to tune OOM killer preferences. ++ example: 0 ++ Configs: ++ description: | ++ Configs contains references to zero or more configs that will be ++ exposed to the service. ++ type: array ++ items: ++ type: object ++ properties: ++ File: ++ description: | ++ File represents a specific target that is backed by a file. ++ ++ ++ ++ ++ ++ ++ > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive ++ type: object ++ properties: ++ Name: ++ description: | ++ Name represents the final filename in the filesystem. ++ type: string ++ UID: ++ description: UID represents the file UID. ++ type: string ++ GID: ++ description: GID represents the file GID. ++ type: string ++ Mode: ++ description: Mode represents the FileMode of the file. ++ type: integer ++ format: uint32 ++ Runtime: ++ description: | ++ Runtime represents a target that is not mounted into the ++ container but is used by the task ++ ++ ++ ++ ++ ++ ++ > **Note**: `Configs.File` and `Configs.Runtime` are mutually ++ > exclusive ++ type: object ++ ConfigID: ++ description: | ++ ConfigID represents the ID of the specific config that we're ++ referencing. ++ type: string ++ ConfigName: ++ description: | ++ ConfigName is the name of the config that this references, ++ but this is just provided for lookup/display purposes. The ++ config in the reference will be identified by its ID. ++ type: string ++ Isolation: ++ type: string ++ description: | ++ Isolation technology of the containers running the service. ++ (Windows only) ++ enum: ++ - default ++ - process ++ - hyperv ++ - "" ++ Init: ++ description: | ++ Run an init inside the container that forwards signals and reaps ++ processes. This field is omitted if empty, and the default (as ++ configured on the daemon) is used. ++ type: ++ - boolean ++ - "null" ++ Sysctls: ++ description: | ++ Set kernel namedspaced parameters (sysctls) in the container. ++ The Sysctls option on services accepts the same sysctls as the ++ are supported on containers. Note that while the same sysctls are ++ supported, no guarantees or checks are made about their ++ suitability for a clustered environment, and it's up to the user ++ to determine whether a given sysctl will work properly in a ++ Service. ++ type: object ++ additionalProperties: ++ type: string ++ CapabilityAdd: ++ type: array ++ description: | ++ A list of kernel capabilities to add to the default set ++ for the container. ++ items: ++ type: string ++ example: ++ - CAP_NET_RAW ++ - CAP_SYS_ADMIN ++ - CAP_SYS_CHROOT ++ - CAP_SYSLOG ++ CapabilityDrop: ++ type: array ++ description: | ++ A list of kernel capabilities to drop from the default set ++ for the container. ++ items: ++ type: string ++ example: ++ - CAP_NET_RAW ++ Ulimits: ++ description: | ++ A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`" ++ type: array ++ items: ++ type: object ++ properties: ++ Name: ++ description: Name of ulimit ++ type: string ++ Soft: ++ description: Soft limit ++ type: integer ++ Hard: ++ description: Hard limit ++ type: integer ++ NetworkAttachmentSpec: ++ description: | ++ Read-only spec type for non-swarm containers attached to swarm overlay ++ networks. ++ ++ ++ ++ ++ ++ ++ > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are ++ > mutually exclusive. PluginSpec is only used when the Runtime field ++ > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime ++ > field is set to `attachment`. ++ type: object ++ properties: ++ ContainerID: ++ description: ID of the container represented by this task ++ type: string ++ Resources: ++ description: | ++ Resource requirements which apply to each individual container created ++ as part of the service. ++ type: object ++ properties: ++ Limits: ++ allOf: ++ - $ref: "#/components/schemas/Limit" ++ - description: Define resources limits. ++ Reservations: ++ allOf: ++ - $ref: "#/components/schemas/ResourceObject" ++ - description: Define resources reservation. ++ SwapBytes: ++ description: | ++ Amount of swap in bytes - can only be used together with a memory limit. ++ If not specified, the default behaviour is to grant a swap space twice ++ as big as the memory limit. ++ Set to -1 to enable unlimited swap. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ minimum: -1 ++ x-omitempty: true ++ MemorySwappiness: ++ description: | ++ Tune the service's containers' memory swappiness (0 to 100). ++ If not specified, defaults to the containers' OS' default, generally 60, ++ or whatever value was predefined in the image. ++ Set to -1 to unset a previously set value. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ minimum: -1 ++ maximum: 100 ++ x-omitempty: true ++ RestartPolicy: ++ description: | ++ Specification for the restart policy which applies to containers ++ created as part of this service. ++ type: object ++ properties: ++ Condition: ++ description: Condition for restart. ++ type: string ++ enum: ++ - none ++ - on-failure ++ - any ++ Delay: ++ description: Delay between restart attempts. ++ type: integer ++ format: int64 ++ MaxAttempts: ++ description: | ++ Maximum attempts to restart a given container before giving up ++ (default value is 0, which is ignored). ++ type: integer ++ format: int64 ++ default: 0 ++ Window: ++ description: | ++ Windows is the time window used to evaluate the restart policy ++ (default value is 0, which is unbounded). ++ type: integer ++ format: int64 ++ default: 0 ++ Placement: ++ type: object ++ properties: ++ Constraints: ++ description: | ++ An array of constraint expressions to limit the set of nodes where ++ a task can be scheduled. Constraint expressions can either use a ++ _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find ++ nodes that satisfy every expression (AND match). Constraints can ++ match node or Docker Engine labels as follows: ++ ++ node attribute | matches | example ++ ---------------------|--------------------------------|----------------------------------------------- ++ `node.id` | Node ID | `node.id==2ivku8v2gvtg4` ++ `node.hostname` | Node hostname | `node.hostname!=node-2` ++ `node.role` | Node role (`manager`/`worker`) | `node.role==manager` ++ `node.platform.os` | Node operating system | `node.platform.os==windows` ++ `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` ++ `node.labels` | User-defined node labels | `node.labels.security==high` ++ `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04` ++ ++ `engine.labels` apply to Docker Engine labels like operating system, ++ drivers, etc. Swarm administrators add `node.labels` for operational ++ purposes by using the [`node update endpoint`](#operation/NodeUpdate). ++ type: array ++ items: ++ type: string ++ example: ++ - node.hostname!=node3.corp.example.com ++ - node.role!=manager ++ - node.labels.type==production ++ - node.platform.os==linux ++ - node.platform.arch==x86_64 ++ Preferences: ++ description: | ++ Preferences provide a way to make the scheduler aware of factors ++ such as topology. They are provided in order from highest to ++ lowest precedence. ++ type: array ++ items: ++ type: object ++ properties: ++ Spread: ++ type: object ++ properties: ++ SpreadDescriptor: ++ description: | ++ label descriptor, such as `engine.labels.az`. ++ type: string ++ example: ++ - Spread: ++ SpreadDescriptor: node.labels.datacenter ++ - Spread: ++ SpreadDescriptor: node.labels.rack ++ MaxReplicas: ++ description: | ++ Maximum number of replicas for per node (default value is 0, which ++ is unlimited) ++ type: integer ++ format: int64 ++ default: 0 ++ Platforms: ++ description: | ++ Platforms stores all the platforms that the service's image can ++ run on. This field is used in the platform filter for scheduling. ++ If empty, then the platform filter is off, meaning there are no ++ scheduling restrictions. ++ type: array ++ items: ++ $ref: "#/components/schemas/Platform" ++ ForceUpdate: ++ description: | ++ A counter that triggers an update even if no relevant parameters have ++ been changed. ++ type: integer ++ format: uint64 ++ Runtime: ++ description: | ++ Runtime is the type of runtime specified for the task executor. ++ type: string ++ Networks: ++ description: Specifies which networks the service should attach to. ++ type: array ++ items: ++ $ref: "#/components/schemas/NetworkAttachmentConfig" ++ LogDriver: ++ description: | ++ Specifies the log driver to use for tasks created from this spec. If ++ not present, the default one for the swarm will be used, finally ++ falling back to the engine default if not specified. ++ type: object ++ properties: ++ Name: ++ type: string ++ Options: ++ type: object ++ additionalProperties: ++ type: string ++ TaskState: ++ type: string ++ enum: ++ - new ++ - allocated ++ - pending ++ - assigned ++ - accepted ++ - preparing ++ - ready ++ - starting ++ - running ++ - complete ++ - shutdown ++ - failed ++ - rejected ++ - remove ++ - orphaned ++ ContainerStatus: ++ type: object ++ description: represents the status of a container. ++ properties: ++ ContainerID: ++ type: string ++ PID: ++ type: integer ++ ExitCode: ++ type: integer ++ PortStatus: ++ type: object ++ description: represents the port status of a task's host ports whose service has published host ports ++ properties: ++ Ports: ++ type: array ++ items: ++ $ref: "#/components/schemas/EndpointPortConfig" ++ TaskStatus: ++ type: object ++ description: represents the status of a task. ++ properties: ++ Timestamp: ++ type: string ++ format: dateTime ++ State: ++ $ref: "#/components/schemas/TaskState" ++ Message: ++ type: string ++ Err: ++ type: string ++ ContainerStatus: ++ $ref: "#/components/schemas/ContainerStatus" ++ PortStatus: ++ $ref: "#/components/schemas/PortStatus" ++ NetworkAttachment: ++ description: | ++ Specifies how a task is attached to a network, and the addresses the ++ task was assigned on that network. ++ type: object ++ properties: ++ Network: ++ $ref: "#/components/schemas/Network" ++ Addresses: ++ description: | ++ The IP addresses (in CIDR notation) assigned to the task on this ++ network. To maintain backward compatibility this field accepts CIDR ++ notation, but only the IP address is used. ++ type: array ++ items: ++ type: string ++ format: cidr ++ example: ++ Network: ++ ID: 4qvuz4ko70xaltuqbt8956gd1 ++ Addresses: ++ - 10.255.0.10/16 ++ Task: ++ type: object ++ properties: ++ ID: ++ description: The ID of the task. ++ type: string ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ type: string ++ format: dateTime ++ UpdatedAt: ++ type: string ++ format: dateTime ++ Name: ++ description: Name of the task. ++ type: string ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ Spec: ++ $ref: "#/components/schemas/TaskSpec" ++ ServiceID: ++ description: The ID of the service this task is part of. ++ type: string ++ Slot: ++ type: integer ++ NodeID: ++ description: The ID of the node that this task is on. ++ type: string ++ AssignedGenericResources: ++ $ref: "#/components/schemas/GenericResources" ++ Status: ++ $ref: "#/components/schemas/TaskStatus" ++ DesiredState: ++ $ref: "#/components/schemas/TaskState" ++ JobIteration: ++ allOf: ++ - $ref: "#/components/schemas/ObjectVersion" ++ - description: | ++ If the Service this Task belongs to is a job-mode service, contains ++ the JobIteration of the Service this Task was created for. Absent if ++ the Task was created for a Replicated or Global Service. ++ NetworksAttachments: ++ description: | ++ The networks that this task is attached to, and the addresses the ++ task was assigned on each of them. ++ type: array ++ items: ++ $ref: "#/components/schemas/NetworkAttachment" ++ example: ++ ID: 0kzzo1i0y4jz6027t0k7aezc7 ++ Version: ++ Index: 71 ++ CreatedAt: 2016-06-07T21:07:31.171892745Z ++ UpdatedAt: 2016-06-07T21:07:31.376370513Z ++ Spec: ++ ContainerSpec: ++ Image: redis ++ Resources: ++ Limits: {} ++ Reservations: {} ++ RestartPolicy: ++ Condition: any ++ MaxAttempts: 0 ++ Placement: {} ++ ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz ++ Slot: 1 ++ NodeID: 60gvrl6tm78dmak4yl7srz94v ++ Status: ++ Timestamp: 2016-06-07T21:07:31.290032978Z ++ State: running ++ Message: started ++ ContainerStatus: ++ ContainerID: e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035 ++ PID: 677 ++ DesiredState: running ++ NetworksAttachments: ++ - Network: ++ ID: 4qvuz4ko70xaltuqbt8956gd1 ++ Version: ++ Index: 18 ++ CreatedAt: 2016-06-07T20:31:11.912919752Z ++ UpdatedAt: 2016-06-07T21:07:29.955277358Z ++ Spec: ++ Name: ingress ++ Labels: ++ com.docker.swarm.internal: "true" ++ DriverConfiguration: {} ++ IPAMOptions: ++ Driver: {} ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ DriverState: ++ Name: overlay ++ Options: ++ com.docker.network.driver.overlay.vxlanid_list: "256" ++ IPAMOptions: ++ Driver: ++ Name: default ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ Addresses: ++ - 10.255.0.10/16 ++ AssignedGenericResources: ++ - DiscreteResourceSpec: ++ Kind: SSD ++ Value: 3 ++ - NamedResourceSpec: ++ Kind: GPU ++ Value: UUID1 ++ - NamedResourceSpec: ++ Kind: GPU ++ Value: UUID2 ++ ServiceSpec: ++ description: User modifiable configuration for a service. ++ type: object ++ properties: ++ Name: ++ description: Name of the service. ++ type: string ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ TaskTemplate: ++ $ref: "#/components/schemas/TaskSpec" ++ Mode: ++ description: Scheduling mode for the service. ++ type: object ++ properties: ++ Replicated: ++ type: object ++ properties: ++ Replicas: ++ type: integer ++ format: int64 ++ Global: ++ type: object ++ ReplicatedJob: ++ description: | ++ The mode used for services with a finite number of tasks that run ++ to a completed state. ++ type: object ++ properties: ++ MaxConcurrent: ++ description: | ++ The maximum number of replicas to run simultaneously. ++ type: integer ++ format: int64 ++ default: 1 ++ TotalCompletions: ++ description: | ++ The total number of replicas desired to reach the Completed ++ state. If unset, will default to the value of `MaxConcurrent` ++ type: integer ++ format: int64 ++ GlobalJob: ++ description: | ++ The mode used for services which run a task to the completed state ++ on each valid node. ++ type: object ++ UpdateConfig: ++ description: Specification for the update strategy of the service. ++ type: object ++ properties: ++ Parallelism: ++ description: | ++ Maximum number of tasks to be updated in one iteration (0 means ++ unlimited parallelism). ++ type: integer ++ format: int64 ++ Delay: ++ description: Amount of time between updates, in nanoseconds. ++ type: integer ++ format: int64 ++ FailureAction: ++ description: | ++ Action to take if an updated task fails to run, or stops running ++ during the update. ++ type: string ++ enum: ++ - continue ++ - pause ++ - rollback ++ Monitor: ++ description: | ++ Amount of time to monitor each updated task for failures, in ++ nanoseconds. ++ type: integer ++ format: int64 ++ MaxFailureRatio: ++ description: | ++ The fraction of tasks that may fail during an update before the ++ failure action is invoked, specified as a floating point number ++ between 0 and 1. ++ type: number ++ default: 0 ++ Order: ++ description: | ++ The order of operations when rolling out an updated task. Either ++ the old task is shut down before the new task is started, or the ++ new task is started before the old task is shut down. ++ type: string ++ enum: ++ - stop-first ++ - start-first ++ RollbackConfig: ++ description: Specification for the rollback strategy of the service. ++ type: object ++ properties: ++ Parallelism: ++ description: | ++ Maximum number of tasks to be rolled back in one iteration (0 means ++ unlimited parallelism). ++ type: integer ++ format: int64 ++ Delay: ++ description: | ++ Amount of time between rollback iterations, in nanoseconds. ++ type: integer ++ format: int64 ++ FailureAction: ++ description: | ++ Action to take if an rolled back task fails to run, or stops ++ running during the rollback. ++ type: string ++ enum: ++ - continue ++ - pause ++ Monitor: ++ description: | ++ Amount of time to monitor each rolled back task for failures, in ++ nanoseconds. ++ type: integer ++ format: int64 ++ MaxFailureRatio: ++ description: | ++ The fraction of tasks that may fail during a rollback before the ++ failure action is invoked, specified as a floating point number ++ between 0 and 1. ++ type: number ++ default: 0 ++ Order: ++ description: | ++ The order of operations when rolling back a task. Either the old ++ task is shut down before the new task is started, or the new task ++ is started before the old task is shut down. ++ type: string ++ enum: ++ - stop-first ++ - start-first ++ Networks: ++ description: | ++ Specifies which networks the service should attach to. ++ ++ Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. ++ type: array ++ items: ++ $ref: "#/components/schemas/NetworkAttachmentConfig" ++ EndpointSpec: ++ $ref: "#/components/schemas/EndpointSpec" ++ EndpointPortConfig: ++ type: object ++ properties: ++ Name: ++ type: string ++ Protocol: ++ type: string ++ enum: ++ - tcp ++ - udp ++ - sctp ++ TargetPort: ++ description: The port inside the container. ++ type: integer ++ PublishedPort: ++ description: The port on the swarm hosts. ++ type: integer ++ PublishMode: ++ description: | ++ The mode in which port is published. ++ ++ ++ ++ ++ ++ ++ - "ingress" makes the target port accessible on every node, ++ regardless of whether there is a task for the service running on ++ that node or not. ++ - "host" bypasses the routing mesh and publish the port directly on ++ the swarm node where that service is running. ++ type: string ++ enum: ++ - ingress ++ - host ++ default: ingress ++ example: ingress ++ EndpointSpec: ++ description: Properties that can be configured to access and load balance a service. ++ type: object ++ properties: ++ Mode: ++ description: | ++ The mode of resolution to use for internal load balancing between tasks. ++ type: string ++ enum: ++ - vip ++ - dnsrr ++ default: vip ++ Ports: ++ description: | ++ List of exposed ports that this service is accessible on from the ++ outside. Ports can only be provided if `vip` resolution mode is used. ++ type: array ++ items: ++ $ref: "#/components/schemas/EndpointPortConfig" ++ Service: ++ type: object ++ properties: ++ ID: ++ type: string ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ type: string ++ format: dateTime ++ UpdatedAt: ++ type: string ++ format: dateTime ++ Spec: ++ $ref: "#/components/schemas/ServiceSpec" ++ Endpoint: ++ type: object ++ properties: ++ Spec: ++ $ref: "#/components/schemas/EndpointSpec" ++ Ports: ++ type: array ++ items: ++ $ref: "#/components/schemas/EndpointPortConfig" ++ VirtualIPs: ++ type: array ++ items: ++ type: object ++ properties: ++ NetworkID: ++ type: string ++ Addr: ++ type: string ++ UpdateStatus: ++ description: The status of a service update. ++ type: object ++ properties: ++ State: ++ type: string ++ enum: ++ - updating ++ - paused ++ - completed ++ StartedAt: ++ type: string ++ format: dateTime ++ CompletedAt: ++ type: string ++ format: dateTime ++ Message: ++ type: string ++ ServiceStatus: ++ description: | ++ The status of the service's tasks. Provided only when requested as ++ part of a ServiceList operation. ++ type: object ++ properties: ++ RunningTasks: ++ description: | ++ The number of tasks for the service currently in the Running state. ++ type: integer ++ format: uint64 ++ example: 7 ++ DesiredTasks: ++ description: | ++ The number of tasks for the service desired to be running. ++ For replicated services, this is the replica count from the ++ service spec. For global services, this is computed by taking ++ count of all tasks for the service with a Desired State other ++ than Shutdown. ++ type: integer ++ format: uint64 ++ example: 10 ++ CompletedTasks: ++ description: | ++ The number of tasks for a job that are in the Completed state. ++ This field must be cross-referenced with the service type, as the ++ value of 0 may mean the service is not in a job mode, or it may ++ mean the job-mode service has no tasks yet Completed. ++ type: integer ++ format: uint64 ++ JobStatus: ++ description: | ++ The status of the service when it is in one of ReplicatedJob or ++ GlobalJob modes. Absent on Replicated and Global mode services. The ++ JobIteration is an ObjectVersion, but unlike the Service's version, ++ does not need to be sent with an update request. ++ type: object ++ properties: ++ JobIteration: ++ allOf: ++ - $ref: "#/components/schemas/ObjectVersion" ++ - description: | ++ JobIteration is a value increased each time a Job is executed, ++ successfully or otherwise. "Executed", in this case, means the ++ job as a whole has been started, not that an individual Task has ++ been launched. A job is "Executed" when its ServiceSpec is ++ updated. JobIteration can be used to disambiguate Tasks belonging ++ to different executions of a job. Though JobIteration will ++ increase with each subsequent execution, it may not necessarily ++ increase by 1, and so JobIteration should not be used to ++ LastExecution: ++ description: | ++ The last time, as observed by the server, that this job was ++ started. ++ type: string ++ format: dateTime ++ example: ++ ID: 9mnpnzenvg8p8tdbtq4wvbkcz ++ Version: ++ Index: 19 ++ CreatedAt: 2016-06-07T21:05:51.880065305Z ++ UpdatedAt: 2016-06-07T21:07:29.962229872Z ++ Spec: ++ Name: hopeful_cori ++ TaskTemplate: ++ ContainerSpec: ++ Image: redis ++ Resources: ++ Limits: {} ++ Reservations: {} ++ RestartPolicy: ++ Condition: any ++ MaxAttempts: 0 ++ Placement: {} ++ ForceUpdate: 0 ++ Mode: ++ Replicated: ++ Replicas: 1 ++ UpdateConfig: ++ Parallelism: 1 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ RollbackConfig: ++ Parallelism: 1 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ EndpointSpec: ++ Mode: vip ++ Ports: ++ - Protocol: tcp ++ TargetPort: 6379 ++ PublishedPort: 30001 ++ Endpoint: ++ Spec: ++ Mode: vip ++ Ports: ++ - Protocol: tcp ++ TargetPort: 6379 ++ PublishedPort: 30001 ++ Ports: ++ - Protocol: tcp ++ TargetPort: 6379 ++ PublishedPort: 30001 ++ VirtualIPs: ++ - NetworkID: 4qvuz4ko70xaltuqbt8956gd1 ++ Addr: 10.255.0.2/16 ++ - NetworkID: 4qvuz4ko70xaltuqbt8956gd1 ++ Addr: 10.255.0.3/16 ++ ImageDeleteResponseItem: ++ type: object ++ x-go-name: DeleteResponse ++ properties: ++ Untagged: ++ description: The image ID of an image that was untagged ++ type: string ++ Deleted: ++ description: The image ID of an image that was deleted ++ type: string ++ ServiceCreateResponse: ++ type: object ++ description: | ++ contains the information returned to a client on the ++ creation of a new service. ++ properties: ++ ID: ++ description: The ID of the created service. ++ type: string ++ example: ak7w3gjqoa3kuz8xcpnyy0pvl ++ Warnings: ++ description: | ++ Optional warning message. ++ ++ FIXME(thaJeztah): this should have "omitempty" in the generated type. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" ++ ServiceUpdateResponse: ++ type: object ++ properties: ++ Warnings: ++ description: Optional warning messages ++ type: array ++ items: ++ type: string ++ example: ++ Warnings: ++ - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" ++ ContainerInspectResponse: ++ type: object ++ title: ContainerInspectResponse ++ x-go-name: InspectResponse ++ properties: ++ Id: ++ description: The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). ++ type: string ++ x-go-name: ID ++ minLength: 64 ++ maxLength: 64 ++ pattern: ^[0-9a-fA-F]{64}$ ++ example: aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf ++ Created: ++ description: |- ++ Date and time at which the container was created, formatted in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: ++ - string ++ - "null" ++ format: dateTime ++ example: 2025-02-17T17:43:39.64001363Z ++ Path: ++ description: The path to the command being run ++ type: string ++ example: /bin/sh ++ Args: ++ description: The arguments to the command being run ++ type: array ++ items: ++ type: string ++ example: ++ - -c ++ - exit 9 ++ State: ++ $ref: "#/components/schemas/ContainerState" ++ Image: ++ description: The ID (digest) of the image that this container was created from. ++ type: string ++ example: sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 ++ ResolvConfPath: ++ description: |- ++ Location of the `/etc/resolv.conf` generated for the container on the ++ host. ++ ++ This file is managed through the docker daemon, and should not be ++ accessed or modified by other tools. ++ type: string ++ example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf ++ HostnamePath: ++ description: |- ++ Location of the `/etc/hostname` generated for the container on the ++ host. ++ ++ This file is managed through the docker daemon, and should not be ++ accessed or modified by other tools. ++ type: string ++ example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname ++ HostsPath: ++ description: |- ++ Location of the `/etc/hosts` generated for the container on the ++ host. ++ ++ This file is managed through the docker daemon, and should not be ++ accessed or modified by other tools. ++ type: string ++ example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts ++ LogPath: ++ description: |- ++ Location of the file used to buffer the container's logs. Depending on ++ the logging-driver used for the container, this field may be omitted. ++ ++ This file is managed through the docker daemon, and should not be ++ accessed or modified by other tools. ++ type: ++ - string ++ - "null" ++ example: /var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log ++ Name: ++ description: |- ++ The name associated with this container. ++ ++ For historic reasons, the name may be prefixed with a forward-slash (`/`). ++ type: string ++ example: /funny_chatelet ++ RestartCount: ++ description: |- ++ Number of times the container was restarted since it was created, ++ or since daemon was started. ++ type: integer ++ example: 0 ++ Driver: ++ description: |- ++ The storage-driver used for the container's filesystem (graph-driver ++ or snapshotter). ++ type: string ++ example: overlayfs ++ Platform: ++ description: |- ++ The platform (operating system) for which the container was created. ++ ++ This field was introduced for the experimental "LCOW" (Linux Containers ++ On Windows) features, which has been removed. In most cases, this field ++ is equal to the host's operating system (`linux` or `windows`). ++ type: string ++ example: linux ++ ImageManifestDescriptor: ++ allOf: ++ - $ref: "#/components/schemas/OCIDescriptor" ++ - description: |- ++ OCI descriptor of the platform-specific manifest of the image ++ the container was created from. ++ ++ Note: Only available if the daemon provides a multi-platform ++ image store. ++ MountLabel: ++ description: SELinux mount label set for the container. ++ type: string ++ example: "" ++ ProcessLabel: ++ description: SELinux process label set for the container. ++ type: string ++ example: "" ++ AppArmorProfile: ++ description: The AppArmor profile set for the container. ++ type: string ++ example: "" ++ ExecIDs: ++ description: IDs of exec instances that are running in the container. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca ++ - 3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4 ++ HostConfig: ++ $ref: "#/components/schemas/HostConfig" ++ GraphDriver: ++ allOf: ++ - $ref: "#/components/schemas/DriverData" ++ - anyOf: ++ - {} ++ - type: "null" ++ Storage: ++ allOf: ++ - $ref: "#/components/schemas/Storage" ++ - anyOf: ++ - {} ++ - type: "null" ++ SizeRw: ++ description: |- ++ The size of files that have been created or changed by this container. ++ ++ This field is omitted by default, and only set when size is requested ++ in the API request. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ example: "122880" ++ SizeRootFs: ++ description: |- ++ The total size of all files in the read-only layers from the image ++ that the container uses. These layers can be shared between containers. ++ ++ This field is omitted by default, and only set when size is requested ++ in the API request. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ example: "1653948416" ++ Mounts: ++ description: List of mounts used by the container. ++ type: array ++ items: ++ $ref: "#/components/schemas/MountPoint" ++ Config: ++ $ref: "#/components/schemas/ContainerConfig" ++ NetworkSettings: ++ $ref: "#/components/schemas/NetworkSettings" ++ ContainerSummary: ++ type: object ++ properties: ++ Id: ++ description: The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). ++ type: string ++ x-go-name: ID ++ minLength: 64 ++ maxLength: 64 ++ pattern: ^[0-9a-fA-F]{64}$ ++ example: aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf ++ Names: ++ description: |- ++ The names associated with this container. Most containers have a single ++ name, but when using legacy "links", the container can have multiple ++ names. ++ ++ For historic reasons, names are prefixed with a forward-slash (`/`). ++ type: array ++ items: ++ type: string ++ example: ++ - /funny_chatelet ++ Image: ++ description: |- ++ The name or ID of the image used to create the container. ++ ++ This field shows the image reference as was specified when creating the container, ++ which can be in its canonical form (e.g., `docker.io/library/ubuntu:latest` ++ or `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`), ++ short form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`). ++ ++ The content of this field can be updated at runtime if the image used to ++ create the container is untagged, in which case the field is updated to ++ contain the the image ID (digest) it was resolved to in its canonical, ++ non-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`). ++ type: string ++ example: docker.io/library/ubuntu:latest ++ ImageID: ++ description: The ID (digest) of the image that this container was created from. ++ type: string ++ example: sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 ++ ImageManifestDescriptor: ++ allOf: ++ - $ref: "#/components/schemas/OCIDescriptor" ++ - anyOf: ++ - description: | ++ OCI descriptor of the platform-specific manifest of the image ++ the container was created from. ++ ++ Note: Only available if the daemon provides a multi-platform ++ image store. ++ ++ This field is not populated in the `GET /system/df` endpoint. ++ - type: "null" ++ Command: ++ description: Command to run when starting the container ++ type: string ++ example: /bin/bash ++ Created: ++ description: |- ++ Date and time at which the container was created as a Unix timestamp ++ (number of seconds since EPOCH). ++ type: integer ++ format: int64 ++ example: "1739811096" ++ Ports: ++ description: Port-mappings for the container. ++ type: array ++ items: ++ $ref: "#/components/schemas/PortSummary" ++ SizeRw: ++ description: |- ++ The size of files that have been created or changed by this container. ++ ++ This field is omitted by default, and only set when size is requested ++ in the API request. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ example: "122880" ++ SizeRootFs: ++ description: |- ++ The total size of all files in the read-only layers from the image ++ that the container uses. These layers can be shared between containers. ++ ++ This field is omitted by default, and only set when size is requested ++ in the API request. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ example: "1653948416" ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.vendor: Acme ++ com.example.license: GPL ++ com.example.version: "1.0" ++ State: ++ description: | ++ The state of this container. ++ type: string ++ enum: ++ - created ++ - running ++ - paused ++ - restarting ++ - exited ++ - removing ++ - dead ++ example: running ++ Status: ++ description: Additional human-readable status of this container (e.g. `Exit 0`) ++ type: string ++ example: Up 4 days ++ HostConfig: ++ type: object ++ description: |- ++ Summary of host-specific runtime information of the container. This ++ is a reduced set of information in the container's "HostConfig" as ++ available in the container "inspect" response. ++ properties: ++ NetworkMode: ++ description: |- ++ Networking mode (`host`, `none`, `container:`) or name of the ++ primary network the container is using. ++ ++ This field is primarily for backward compatibility. The container ++ can be connected to multiple networks for which information can be ++ found in the `NetworkSettings.Networks` field, which enumerates ++ settings per network. ++ type: string ++ example: mynetwork ++ Annotations: ++ description: Arbitrary key-value metadata attached to the container. ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: string ++ example: ++ io.kubernetes.docker.type: container ++ io.kubernetes.sandbox.id: 3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3 ++ NetworkSettings: ++ description: Summary of the container's network settings ++ type: object ++ properties: ++ Networks: ++ type: object ++ description: |- ++ Summary of network-settings for each network the container is ++ attached to. ++ additionalProperties: ++ $ref: "#/components/schemas/EndpointSettings" ++ Mounts: ++ type: array ++ description: List of mounts used by the container. ++ items: ++ $ref: "#/components/schemas/MountPoint" ++ Health: ++ type: object ++ description: |- ++ Summary of health status ++ ++ Added in v1.52, before that version all container summary not include Health. ++ After this attribute introduced, it includes containers with no health checks configured, ++ or containers that are not running with none ++ properties: ++ Status: ++ type: string ++ description: the health status of the container ++ enum: ++ - none ++ - starting ++ - healthy ++ - unhealthy ++ example: healthy ++ FailingStreak: ++ description: FailingStreak is the number of consecutive failures ++ type: integer ++ example: 0 ++ ContainersDiskUsage: ++ type: object ++ x-go-name: DiskUsage ++ x-go-package: github.com/moby/moby/api/types/container ++ description: | ++ represents system data usage information for container resources. ++ properties: ++ ActiveCount: ++ description: | ++ Count of active containers. ++ type: integer ++ format: int64 ++ example: 1 ++ TotalCount: ++ description: | ++ Count of all containers. ++ type: integer ++ format: int64 ++ example: 4 ++ Reclaimable: ++ description: | ++ Disk space that can be reclaimed by removing inactive containers. ++ type: integer ++ format: int64 ++ example: 12345678 ++ TotalSize: ++ description: | ++ Disk space in use by containers. ++ type: integer ++ format: int64 ++ example: 98765432 ++ Items: ++ description: | ++ List of container summaries. ++ type: array ++ x-omitempty: true ++ items: ++ x-go-type: ++ type: Summary ++ Driver: ++ description: Driver represents a driver (network, logging, secrets). ++ type: object ++ required: ++ - Name ++ properties: ++ Name: ++ description: Name of the driver. ++ type: string ++ example: some-driver ++ Options: ++ description: Key/value map of driver-specific options. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ OptionA: value for driver-specific option A ++ OptionB: value for driver-specific option B ++ SecretSpec: ++ type: object ++ properties: ++ Name: ++ description: User-defined name of the secret. ++ type: string ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ Data: ++ description: | ++ Data is the data to store as a secret, formatted as a standard base64-encoded ++ ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. ++ It must be empty if the Driver field is set, in which case the data is ++ loaded from an external secret store. The maximum allowed size is 500KB, ++ as defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize). ++ ++ This field is only used to _create_ a secret, and is not returned by ++ other endpoints. ++ type: string ++ example: "" ++ Driver: ++ allOf: ++ - $ref: "#/components/schemas/Driver" ++ - description: | ++ Name of the secrets driver used to fetch the secret's value from an ++ external secret store. ++ Templating: ++ allOf: ++ - $ref: "#/components/schemas/Driver" ++ - description: | ++ Templating driver, if applicable ++ ++ Templating controls whether and how to evaluate the config payload as ++ a template. If no driver is set, no templating is used. ++ Secret: ++ type: object ++ properties: ++ ID: ++ type: string ++ example: blt1owaxmitz71s9v5zh81zun ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ type: string ++ format: dateTime ++ example: 2017-07-20T13:55:28.678958722Z ++ UpdatedAt: ++ type: string ++ format: dateTime ++ example: 2017-07-20T13:55:28.678958722Z ++ Spec: ++ $ref: "#/components/schemas/SecretSpec" ++ ConfigSpec: ++ type: object ++ properties: ++ Name: ++ description: User-defined name of the config. ++ type: string ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ Data: ++ description: | ++ Data is the data to store as a config, formatted as a standard base64-encoded ++ ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. ++ The maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize). ++ type: string ++ Templating: ++ allOf: ++ - $ref: "#/components/schemas/Driver" ++ - description: | ++ Templating driver, if applicable ++ ++ Templating controls whether and how to evaluate the config payload as ++ a template. If no driver is set, no templating is used. ++ Config: ++ type: object ++ properties: ++ ID: ++ type: string ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ type: string ++ format: dateTime ++ UpdatedAt: ++ type: string ++ format: dateTime ++ Spec: ++ $ref: "#/components/schemas/ConfigSpec" ++ ContainerState: ++ description: | ++ ContainerState stores container's running state. It's part of ContainerJSONBase ++ and will be returned by the "inspect" command. ++ type: ++ - object ++ - "null" ++ properties: ++ Status: ++ description: | ++ String representation of the container state. Can be one of "created", ++ "running", "paused", "restarting", "removing", "exited", or "dead". ++ type: string ++ enum: ++ - created ++ - running ++ - paused ++ - restarting ++ - removing ++ - exited ++ - dead ++ example: running ++ Running: ++ description: | ++ Whether this container is running. ++ ++ Note that a running container can be _paused_. The `Running` and `Paused` ++ booleans are not mutually exclusive: ++ ++ When pausing a container (on Linux), the freezer cgroup is used to suspend ++ all processes in the container. Freezing the process requires the process to ++ be running. As a result, paused containers are both `Running` _and_ `Paused`. ++ ++ Use the `Status` field instead to determine if a container's state is "running". ++ type: boolean ++ example: true ++ Paused: ++ description: Whether this container is paused. ++ type: boolean ++ example: false ++ Restarting: ++ description: Whether this container is restarting. ++ type: boolean ++ example: false ++ OOMKilled: ++ description: | ++ Whether a process within this container has been killed because it ran ++ out of memory since the container was last started. ++ type: boolean ++ example: false ++ Dead: ++ type: boolean ++ example: false ++ Pid: ++ description: The process ID of this container ++ type: integer ++ example: 1234 ++ ExitCode: ++ description: The last exit code of this container ++ type: integer ++ example: 0 ++ Error: ++ type: string ++ StartedAt: ++ description: The time when this container was last started. ++ type: string ++ example: 2020-01-06T09:06:59.461876391Z ++ FinishedAt: ++ description: The time when this container last exited. ++ type: string ++ example: 2020-01-06T09:07:59.461876391Z ++ Health: ++ $ref: "#/components/schemas/Health" ++ ContainerCreateResponse: ++ description: OK response to ContainerCreate operation ++ type: object ++ title: ContainerCreateResponse ++ x-go-name: CreateResponse ++ required: ++ - Id ++ - Warnings ++ properties: ++ Id: ++ description: The ID of the created container ++ type: string ++ example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 ++ Warnings: ++ description: Warnings encountered when creating the container ++ type: array ++ items: ++ type: string ++ example: [] ++ ContainerUpdateResponse: ++ type: object ++ title: ContainerUpdateResponse ++ x-go-name: UpdateResponse ++ description: Response for a successful container-update. ++ properties: ++ Warnings: ++ type: array ++ description: Warnings encountered when updating the container. ++ items: ++ type: string ++ example: ++ - Published ports are discarded when using host network mode ++ ContainerStatsResponse: ++ description: | ++ Statistics sample for a container. ++ type: object ++ x-go-name: StatsResponse ++ title: ContainerStatsResponse ++ properties: ++ id: ++ description: | ++ ID of the container for which the stats were collected. ++ type: ++ - string ++ - "null" ++ example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 ++ name: ++ description: | ++ Name of the container for which the stats were collected. ++ type: ++ - string ++ - "null" ++ example: boring_wozniak ++ os_type: ++ description: | ++ OSType is the OS of the container ("linux" or "windows") to allow ++ platform-specific handling of stats. ++ type: ++ - string ++ - "null" ++ example: linux ++ read: ++ description: | ++ Date and time at which this sample was collected. ++ The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) ++ with nano-seconds. ++ type: string ++ format: date-time ++ example: 2025-01-16T13:55:22.165243637Z ++ cpu_stats: ++ $ref: "#/components/schemas/ContainerCPUStats" ++ memory_stats: ++ $ref: "#/components/schemas/ContainerMemoryStats" ++ networks: ++ description: | ++ Network statistics for the container per interface. ++ ++ This field is omitted if the container has no networking enabled. ++ additionalProperties: ++ $ref: "#/components/schemas/ContainerNetworkStats" ++ example: ++ eth0: ++ rx_bytes: 5338 ++ rx_dropped: 0 ++ rx_errors: 0 ++ rx_packets: 36 ++ tx_bytes: 648 ++ tx_dropped: 0 ++ tx_errors: 0 ++ tx_packets: 8 ++ eth5: ++ rx_bytes: 4641 ++ rx_dropped: 0 ++ rx_errors: 0 ++ rx_packets: 26 ++ tx_bytes: 690 ++ tx_dropped: 0 ++ tx_errors: 0 ++ tx_packets: 9 ++ pids_stats: ++ $ref: "#/components/schemas/ContainerPidsStats" ++ blkio_stats: ++ $ref: "#/components/schemas/ContainerBlkioStats" ++ num_procs: ++ description: | ++ The number of processors on the system. ++ ++ This field is Windows-specific and always zero for Linux containers. ++ type: integer ++ format: uint32 ++ example: 16 ++ storage_stats: ++ $ref: "#/components/schemas/ContainerStorageStats" ++ preread: ++ description: | ++ Date and time at which this first sample was collected. This field ++ is not propagated if the "one-shot" option is set. If the "one-shot" ++ option is set, this field may be omitted, empty, or set to a default ++ date (`0001-01-01T00:00:00Z`). ++ ++ The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) ++ with nano-seconds. ++ type: string ++ format: date-time ++ example: 2025-01-16T13:55:21.160452595Z ++ precpu_stats: ++ $ref: "#/components/schemas/ContainerCPUStats" ++ ContainerBlkioStats: ++ description: | ++ BlkioStats stores all IO service stats for data read and write. ++ ++ This type is Linux-specific and holds many fields that are specific to cgroups v1. ++ On a cgroup v2 host, all fields other than `io_service_bytes_recursive` ++ are omitted or `null`. ++ ++ This type is only populated on Linux and omitted for Windows containers. ++ type: ++ - object ++ - "null" ++ x-go-name: BlkioStats ++ properties: ++ io_service_bytes_recursive: ++ type: array ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_serviced_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_queue_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_service_time_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_wait_time_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_merged_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_time_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ sectors_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ example: ++ io_service_bytes_recursive: ++ - major: 254 ++ minor: 0 ++ op: read ++ value: 7593984 ++ - major: 254 ++ minor: 0 ++ op: write ++ value: 100 ++ io_serviced_recursive: null ++ io_queue_recursive: null ++ io_service_time_recursive: null ++ io_wait_time_recursive: null ++ io_merged_recursive: null ++ io_time_recursive: null ++ sectors_recursive: null ++ ContainerBlkioStatEntry: ++ description: | ++ Blkio stats entry. ++ ++ This type is Linux-specific and omitted for Windows containers. ++ type: ++ - object ++ - "null" ++ x-go-name: BlkioStatEntry ++ properties: ++ major: ++ type: integer ++ format: uint64 ++ example: 254 ++ minor: ++ type: integer ++ format: uint64 ++ example: 0 ++ op: ++ type: string ++ example: read ++ value: ++ type: integer ++ format: uint64 ++ example: 7593984 ++ ContainerCPUStats: ++ description: | ++ CPU related info of the container ++ type: ++ - object ++ - "null" ++ x-go-name: CPUStats ++ properties: ++ cpu_usage: ++ $ref: "#/components/schemas/ContainerCPUUsage" ++ system_cpu_usage: ++ description: | ++ System Usage. ++ ++ This field is Linux-specific and omitted for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 5 ++ online_cpus: ++ description: | ++ Number of online CPUs. ++ ++ This field is Linux-specific and omitted for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint32 ++ example: 5 ++ throttling_data: ++ $ref: "#/components/schemas/ContainerThrottlingData" ++ ContainerCPUUsage: ++ description: | ++ All CPU stats aggregated since container inception. ++ type: ++ - object ++ - "null" ++ x-go-name: CPUUsage ++ properties: ++ total_usage: ++ description: | ++ Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows). ++ type: integer ++ format: uint64 ++ example: 29912000 ++ percpu_usage: ++ description: | ++ Total CPU time (in nanoseconds) consumed per core (Linux). ++ ++ This field is Linux-specific when using cgroups v1. It is omitted ++ when using cgroups v2 and Windows containers. ++ type: ++ - array ++ - "null" ++ items: ++ type: integer ++ format: uint64 ++ example: 29912000 ++ usage_in_kernelmode: ++ description: | ++ Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux), ++ or time spent (in 100's of nanoseconds) by all container processes in ++ kernel mode (Windows). ++ ++ Not populated for Windows containers using Hyper-V isolation. ++ type: integer ++ format: uint64 ++ example: 21994000 ++ usage_in_usermode: ++ description: | ++ Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux), ++ or time spent (in 100's of nanoseconds) by all container processes in ++ kernel mode (Windows). ++ ++ Not populated for Windows containers using Hyper-V isolation. ++ type: integer ++ format: uint64 ++ example: 7918000 ++ ContainerPidsStats: ++ description: | ++ PidsStats contains Linux-specific stats of a container's process-IDs (PIDs). ++ ++ This type is Linux-specific and omitted for Windows containers. ++ type: ++ - object ++ - "null" ++ x-go-name: PidsStats ++ properties: ++ current: ++ description: | ++ Current is the number of PIDs in the cgroup. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 5 ++ limit: ++ description: | ++ Limit is the hard limit on the number of pids in the cgroup. ++ A "Limit" of 0 means that there is no limit. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: "18446744073709551615" ++ ContainerThrottlingData: ++ description: | ++ CPU throttling stats of the container. ++ ++ This type is Linux-specific and omitted for Windows containers. ++ type: ++ - object ++ - "null" ++ x-go-name: ThrottlingData ++ properties: ++ periods: ++ description: | ++ Number of periods with throttling active. ++ type: integer ++ format: uint64 ++ example: 0 ++ throttled_periods: ++ description: | ++ Number of periods when the container hit its throttling limit. ++ type: integer ++ format: uint64 ++ example: 0 ++ throttled_time: ++ description: | ++ Aggregated time (in nanoseconds) the container was throttled for. ++ type: integer ++ format: uint64 ++ example: 0 ++ ContainerMemoryStats: ++ description: | ++ Aggregates all memory stats since container inception on Linux. ++ Windows returns stats for commit and private working set only. ++ type: object ++ x-go-name: MemoryStats ++ properties: ++ usage: ++ description: | ++ Current `res_counter` usage for memory. ++ ++ This field is Linux-specific and omitted for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ max_usage: ++ description: | ++ Maximum usage ever recorded. ++ ++ This field is Linux-specific and only supported on cgroups v1. ++ It is omitted when using cgroups v2 and for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ stats: ++ description: | ++ All the stats exported via memory.stat. ++ ++ The fields in this object differ between cgroups v1 and v2. ++ On cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available. ++ On cgroups v2, fields such as `file`, `anon`, `inactive_file` are available. ++ ++ This field is Linux-specific and omitted for Windows containers. ++ type: object ++ additionalProperties: ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: ++ active_anon: 1572864 ++ active_file: 5115904 ++ anon: 1572864 ++ anon_thp: 0 ++ file: 7626752 ++ file_dirty: 0 ++ file_mapped: 2723840 ++ file_writeback: 0 ++ inactive_anon: 0 ++ inactive_file: 2510848 ++ kernel_stack: 16384 ++ pgactivate: 0 ++ pgdeactivate: 0 ++ pgfault: 2042 ++ pglazyfree: 0 ++ pglazyfreed: 0 ++ pgmajfault: 45 ++ pgrefill: 0 ++ pgscan: 0 ++ pgsteal: 0 ++ shmem: 0 ++ slab: 1180928 ++ slab_reclaimable: 725576 ++ slab_unreclaimable: 455352 ++ sock: 0 ++ thp_collapse_alloc: 0 ++ thp_fault_alloc: 1 ++ unevictable: 0 ++ workingset_activate: 0 ++ workingset_nodereclaim: 0 ++ workingset_refault: 0 ++ failcnt: ++ description: | ++ Number of times memory usage hits limits. ++ ++ This field is Linux-specific and only supported on cgroups v1. ++ It is omitted when using cgroups v2 and for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ limit: ++ description: | ++ This field is Linux-specific and omitted for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 8217579520 ++ commitbytes: ++ description: | ++ Committed bytes. ++ ++ This field is Windows-specific and omitted for Linux containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ commitpeakbytes: ++ description: | ++ Peak committed bytes. ++ ++ This field is Windows-specific and omitted for Linux containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ privateworkingset: ++ description: | ++ Private working set. ++ ++ This field is Windows-specific and omitted for Linux containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ ContainerNetworkStats: ++ description: | ++ Aggregates the network stats of one container ++ type: ++ - object ++ - "null" ++ x-go-name: NetworkStats ++ properties: ++ rx_bytes: ++ description: | ++ Bytes received. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 5338 ++ rx_packets: ++ description: | ++ Packets received. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 36 ++ rx_errors: ++ description: | ++ Received errors. Not used on Windows. ++ ++ This field is Linux-specific and always zero for Windows containers. ++ type: integer ++ format: uint64 ++ example: 0 ++ rx_dropped: ++ description: | ++ Incoming packets dropped. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 0 ++ tx_bytes: ++ description: | ++ Bytes sent. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 1200 ++ tx_packets: ++ description: | ++ Packets sent. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 12 ++ tx_errors: ++ description: | ++ Sent errors. Not used on Windows. ++ ++ This field is Linux-specific and always zero for Windows containers. ++ type: integer ++ format: uint64 ++ example: 0 ++ tx_dropped: ++ description: | ++ Outgoing packets dropped. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 0 ++ endpoint_id: ++ description: | ++ Endpoint ID. Not used on Linux. ++ ++ This field is Windows-specific and omitted for Linux containers. ++ type: ++ - string ++ - "null" ++ instance_id: ++ description: | ++ Instance ID. Not used on Linux. ++ ++ This field is Windows-specific and omitted for Linux containers. ++ type: ++ - string ++ - "null" ++ ContainerStorageStats: ++ description: | ++ StorageStats is the disk I/O stats for read/write on Windows. ++ ++ This type is Windows-specific and omitted for Linux containers. ++ type: ++ - object ++ - "null" ++ x-go-name: StorageStats ++ properties: ++ read_count_normalized: ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 7593984 ++ read_size_bytes: ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 7593984 ++ write_count_normalized: ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 7593984 ++ write_size_bytes: ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 7593984 ++ ContainerTopResponse: ++ type: object ++ x-go-name: TopResponse ++ title: ContainerTopResponse ++ description: Container "top" response. ++ properties: ++ Titles: ++ description: The ps column titles ++ type: array ++ items: ++ type: string ++ example: ++ Titles: ++ - UID ++ - PID ++ - PPID ++ - C ++ - STIME ++ - TTY ++ - TIME ++ - CMD ++ Processes: ++ description: |- ++ Each process running in the container, where each process ++ is an array of values corresponding to the titles. ++ type: array ++ items: ++ type: array ++ items: ++ type: string ++ example: ++ Processes: ++ - - root ++ - "13642" ++ - "882" ++ - "0" ++ - 17:03 ++ - pts/0 ++ - 00:00:00 ++ - /bin/bash ++ - - root ++ - "13735" ++ - "13642" ++ - "0" ++ - 17:06 ++ - pts/0 ++ - 00:00:00 ++ - sleep 10 ++ ContainerWaitResponse: ++ description: OK response to ContainerWait operation ++ type: object ++ x-go-name: WaitResponse ++ title: ContainerWaitResponse ++ required: ++ - StatusCode ++ properties: ++ StatusCode: ++ description: Exit code of the container ++ type: integer ++ format: int64 ++ Error: ++ $ref: "#/components/schemas/ContainerWaitExitError" ++ ContainerWaitExitError: ++ description: container waiting error, if any ++ type: object ++ x-go-name: WaitExitError ++ properties: ++ Message: ++ description: Details of an error ++ type: string ++ SystemVersion: ++ type: object ++ description: | ++ Response of Engine API: GET "/version" ++ properties: ++ Platform: ++ type: object ++ required: ++ - Name ++ properties: ++ Name: ++ type: string ++ Components: ++ type: array ++ description: | ++ Information about system components ++ items: ++ type: object ++ x-go-name: ComponentVersion ++ required: ++ - Name ++ - Version ++ properties: ++ Name: ++ description: | ++ Name of the component ++ type: string ++ example: Engine ++ Version: ++ description: | ++ Version of the component ++ type: string ++ example: 27.0.1 ++ Details: ++ description: | ++ Key/value pairs of strings with additional information about the ++ component. These values are intended for informational purposes ++ only, and their content is not defined, and not part of the API ++ specification. ++ ++ These messages can be printed by the client as information to the user. ++ type: ++ - object ++ - "null" ++ Version: ++ description: The version of the daemon ++ type: string ++ example: 27.0.1 ++ ApiVersion: ++ description: | ++ The default (and highest) API version that is supported by the daemon ++ type: string ++ example: "1.47" ++ MinAPIVersion: ++ description: | ++ The minimum API version that is supported by the daemon ++ type: string ++ example: "1.24" ++ GitCommit: ++ description: | ++ The Git commit of the source code that was used to build the daemon ++ type: string ++ example: 48a66213fe ++ GoVersion: ++ description: | ++ The version Go used to compile the daemon, and the version of the Go ++ runtime in use. ++ type: string ++ example: go1.22.7 ++ Os: ++ description: | ++ The operating system that the daemon is running on ("linux" or "windows") ++ type: string ++ example: linux ++ Arch: ++ description: | ++ Architecture of the daemon, as returned by the Go runtime (`GOARCH`). ++ ++ A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). ++ type: string ++ example: amd64 ++ KernelVersion: ++ description: | ++ The kernel version (`uname -r`) that the daemon is running on. ++ ++ This field is omitted when empty. ++ type: string ++ example: 6.8.0-31-generic ++ Experimental: ++ description: | ++ Indicates if the daemon is started with experimental features enabled. ++ ++ This field is omitted when empty / false. ++ type: boolean ++ example: true ++ BuildTime: ++ description: | ++ The date and time that the daemon was compiled. ++ type: string ++ example: 2020-06-22T15:49:27.000000000+00:00 ++ SystemInfo: ++ type: object ++ properties: ++ ID: ++ description: | ++ Unique identifier of the daemon. ++ ++ ++ ++ ++ ++ ++ > **Note**: The format of the ID itself is not part of the API, and ++ > should not be considered stable. ++ type: string ++ example: 7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS ++ Containers: ++ description: Total number of containers on the host. ++ type: integer ++ example: 14 ++ ContainersRunning: ++ description: | ++ Number of containers with status `"running"`. ++ type: integer ++ example: 3 ++ ContainersPaused: ++ description: | ++ Number of containers with status `"paused"`. ++ type: integer ++ example: 1 ++ ContainersStopped: ++ description: | ++ Number of containers with status `"stopped"`. ++ type: integer ++ example: 10 ++ Images: ++ description: | ++ Total number of images on the host. ++ ++ Both _tagged_ and _untagged_ (dangling) images are counted. ++ type: integer ++ example: 508 ++ Driver: ++ description: Name of the storage driver in use. ++ type: string ++ example: overlay2 ++ DriverStatus: ++ description: | ++ Information specific to the storage driver, provided as ++ "label" / "value" pairs. ++ ++ This information is provided by the storage driver, and formatted ++ in a way consistent with the output of `docker info` on the command ++ line. ++ ++ ++ ++ ++ ++ ++ > **Note**: The information returned in this field, including the ++ > formatting of values and labels, should not be considered stable, ++ > and may change without notice. ++ type: array ++ items: ++ type: array ++ items: ++ type: string ++ example: ++ - - Backing Filesystem ++ - extfs ++ - - Supports d_type ++ - "true" ++ - - Native Overlay Diff ++ - "true" ++ DockerRootDir: ++ description: | ++ Root directory of persistent Docker state. ++ ++ Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` ++ on Windows. ++ type: string ++ example: /var/lib/docker ++ Plugins: ++ $ref: "#/components/schemas/PluginsInfo" ++ MemoryLimit: ++ description: Indicates if the host has memory limit support enabled. ++ type: boolean ++ example: true ++ SwapLimit: ++ description: Indicates if the host has memory swap limit support enabled. ++ type: boolean ++ example: true ++ CpuCfsPeriod: ++ description: | ++ Indicates if CPU CFS(Completely Fair Scheduler) period is supported by ++ the host. ++ type: boolean ++ example: true ++ CpuCfsQuota: ++ description: | ++ Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by ++ the host. ++ type: boolean ++ example: true ++ CPUShares: ++ description: | ++ Indicates if CPU Shares limiting is supported by the host. ++ type: boolean ++ example: true ++ CPUSet: ++ description: | ++ Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. ++ ++ See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) ++ type: boolean ++ example: true ++ PidsLimit: ++ description: Indicates if the host kernel has PID limit support enabled. ++ type: boolean ++ example: true ++ OomKillDisable: ++ description: Indicates if OOM killer disable is supported on the host. ++ type: boolean ++ IPv4Forwarding: ++ description: Indicates IPv4 forwarding is enabled. ++ type: boolean ++ example: true ++ Debug: ++ description: | ++ Indicates if the daemon is running in debug-mode / with debug-level ++ logging enabled. ++ type: boolean ++ example: true ++ NFd: ++ description: | ++ The total number of file Descriptors in use by the daemon process. ++ ++ This information is only returned if debug-mode is enabled. ++ type: integer ++ example: 64 ++ NGoroutines: ++ description: | ++ The number of goroutines that currently exist. ++ ++ This information is only returned if debug-mode is enabled. ++ type: integer ++ example: 174 ++ SystemTime: ++ description: | ++ Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) ++ format with nano-seconds. ++ type: string ++ example: 2017-08-08T20:28:29.06202363Z ++ LoggingDriver: ++ description: | ++ The logging driver to use as a default for new containers. ++ type: string ++ CgroupDriver: ++ description: | ++ The driver to use for managing cgroups. ++ type: string ++ enum: ++ - cgroupfs ++ - systemd ++ - none ++ default: cgroupfs ++ example: cgroupfs ++ CgroupVersion: ++ description: | ++ The version of the cgroup. ++ type: string ++ enum: ++ - "1" ++ - "2" ++ default: "1" ++ example: "1" ++ NEventsListener: ++ description: Number of event listeners subscribed. ++ type: integer ++ example: 30 ++ KernelVersion: ++ description: | ++ Kernel version of the host. ++ ++ On Linux, this information obtained from `uname`. On Windows this ++ information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ ++ registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. ++ type: string ++ example: 6.8.0-31-generic ++ OperatingSystem: ++ description: | ++ Name of the host's operating system, for example: "Ubuntu 24.04 LTS" ++ or "Windows Server 2016 Datacenter" ++ type: string ++ example: Ubuntu 24.04 LTS ++ OSVersion: ++ description: | ++ Version of the host's operating system ++ ++ ++ ++ ++ ++ ++ > **Note**: The information returned in this field, including its ++ > very existence, and the formatting of values, should not be considered ++ > stable, and may change without notice. ++ type: string ++ example: "24.04" ++ OSType: ++ description: | ++ Generic type of the operating system of the host, as returned by the ++ Go runtime (`GOOS`). ++ ++ Currently returned values are "linux" and "windows". A full list of ++ possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). ++ type: string ++ example: linux ++ Architecture: ++ description: | ++ Hardware architecture of the host, as returned by the operating system. ++ This is equivalent to the output of `uname -m` on Linux. ++ ++ Unlike `Arch` (from `/version`), this reports the machine's native ++ architecture, which can differ from the Go runtime architecture when ++ running a binary compiled for a different architecture (for example, ++ a 32-bit binary running on 64-bit hardware). ++ type: string ++ example: x86_64 ++ NCPU: ++ description: | ++ The number of logical CPUs usable by the daemon. ++ ++ The number of available CPUs is checked by querying the operating ++ system when the daemon starts. Changes to operating system CPU ++ allocation after the daemon is started are not reflected. ++ type: integer ++ example: 4 ++ MemTotal: ++ description: | ++ Total amount of physical memory available on the host, in bytes. ++ type: integer ++ format: int64 ++ example: 2095882240 ++ IndexServerAddress: ++ description: | ++ Address / URL of the index server that is used for image search, ++ and as a default for user authentication for Docker Hub and Docker Cloud. ++ default: https://index.docker.io/v1/ ++ type: string ++ example: https://index.docker.io/v1/ ++ RegistryConfig: ++ $ref: "#/components/schemas/RegistryServiceConfig" ++ GenericResources: ++ $ref: "#/components/schemas/GenericResources" ++ HttpProxy: ++ description: | ++ HTTP-proxy configured for the daemon. This value is obtained from the ++ [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. ++ Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL ++ are masked in the API response. ++ ++ Containers do not automatically inherit this configuration. ++ type: string ++ example: http://xxxxx:xxxxx@proxy.corp.example.com:8080 ++ HttpsProxy: ++ description: | ++ HTTPS-proxy configured for the daemon. This value is obtained from the ++ [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. ++ Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL ++ are masked in the API response. ++ ++ Containers do not automatically inherit this configuration. ++ type: string ++ example: https://xxxxx:xxxxx@proxy.corp.example.com:4443 ++ NoProxy: ++ description: | ++ Comma-separated list of domain extensions for which no proxy should be ++ used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) ++ environment variable. ++ ++ Containers do not automatically inherit this configuration. ++ type: string ++ example: "*.local, 169.254/16" ++ Name: ++ description: Hostname of the host. ++ type: string ++ example: node5.corp.example.com ++ Labels: ++ description: | ++ User-defined labels (key/value metadata) as set on the daemon. ++ ++ ++ ++ ++ ++ ++ > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, ++ > set through the daemon configuration, and _node_ labels, set from a ++ > manager node in the Swarm. Node labels are not included in this ++ > field. Node labels can be retrieved using the `/nodes/(id)` endpoint ++ > on a manager node in the Swarm. ++ type: array ++ items: ++ type: string ++ example: ++ - storage=ssd ++ - production ++ ExperimentalBuild: ++ description: | ++ Indicates if experimental features are enabled on the daemon. ++ type: boolean ++ example: true ++ ServerVersion: ++ description: | ++ Version string of the daemon. ++ type: string ++ example: 27.0.1 ++ Runtimes: ++ description: | ++ List of [OCI compliant](https://github.com/opencontainers/runtime-spec) ++ runtimes configured on the daemon. Keys hold the "name" used to ++ reference the runtime. ++ ++ The Docker daemon relies on an OCI compliant runtime (invoked via the ++ `containerd` daemon) as its interface to the Linux kernel namespaces, ++ cgroups, and SELinux. ++ ++ The default runtime is `runc`, and automatically configured. Additional ++ runtimes can be configured by the user and will be listed here. ++ type: object ++ additionalProperties: ++ $ref: "#/components/schemas/Runtime" ++ default: ++ runc: ++ path: runc ++ example: ++ runc: ++ path: runc ++ runc-master: ++ path: /go/bin/runc ++ custom: ++ path: /usr/local/bin/my-oci-runtime ++ runtimeArgs: ++ - --debug ++ - --systemd-cgroup=false ++ DefaultRuntime: ++ description: | ++ Name of the default OCI runtime that is used when starting containers. ++ ++ The default can be overridden per-container at create time. ++ type: string ++ default: runc ++ example: runc ++ Swarm: ++ $ref: "#/components/schemas/SwarmInfo" ++ LiveRestoreEnabled: ++ description: | ++ Indicates if live restore is enabled. ++ ++ If enabled, containers are kept running when the daemon is shutdown ++ or upon daemon start if running containers are detected. ++ type: boolean ++ default: false ++ example: false ++ Isolation: ++ description: | ++ Represents the isolation technology to use as a default for containers. ++ The supported values are platform-specific. ++ ++ If no isolation value is specified on daemon start, on Windows client, ++ the default is `hyperv`, and on Windows server, the default is `process`. ++ ++ This option is currently not used on other platforms. ++ default: default ++ type: string ++ enum: ++ - default ++ - hyperv ++ - process ++ - "" ++ InitBinary: ++ description: | ++ Name and, optional, path of the `docker-init` binary. ++ ++ If the path is omitted, the daemon searches the host's `$PATH` for the ++ binary and uses the first result. ++ type: string ++ example: docker-init ++ ContainerdCommit: ++ $ref: "#/components/schemas/Commit" ++ RuncCommit: ++ $ref: "#/components/schemas/Commit" ++ InitCommit: ++ $ref: "#/components/schemas/Commit" ++ SecurityOptions: ++ description: | ++ List of security features that are enabled on the daemon, such as ++ apparmor, seccomp, SELinux, user-namespaces (userns), rootless and ++ no-new-privileges. ++ ++ Additional configuration options for each security feature may ++ be present, and are included as a comma-separated list of key/value ++ pairs. ++ type: array ++ items: ++ type: string ++ example: ++ - name=apparmor ++ - name=seccomp,profile=default ++ - name=selinux ++ - name=userns ++ - name=rootless ++ ProductLicense: ++ description: | ++ Reports a summary of the product license on the daemon. ++ ++ If a commercial license has been applied to the daemon, information ++ such as number of nodes, and expiration are included. ++ type: string ++ example: Community Engine ++ DefaultAddressPools: ++ description: | ++ List of custom default address pools for local networks, which can be ++ specified in the daemon.json file or dockerd option. ++ ++ Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 ++ 10.10.[0-255].0/24 address pools. ++ type: array ++ items: ++ type: object ++ properties: ++ Base: ++ description: The network address in CIDR format ++ type: string ++ example: 10.10.0.0/16 ++ Size: ++ description: The network pool size ++ type: integer ++ example: "24" ++ FirewallBackend: ++ $ref: "#/components/schemas/FirewallInfo" ++ DiscoveredDevices: ++ description: | ++ List of devices discovered by device drivers. ++ ++ Each device includes information about its source driver, kind, name, ++ and additional driver-specific attributes. ++ type: array ++ items: ++ $ref: "#/components/schemas/DeviceInfo" ++ NRI: ++ $ref: "#/components/schemas/NRIInfo" ++ Warnings: ++ description: | ++ List of warnings / informational messages about missing features, or ++ issues related to the daemon configuration. ++ ++ These messages can be printed by the client as information to the user. ++ type: array ++ items: ++ type: string ++ example: ++ - "WARNING: No memory limit support" ++ CDISpecDirs: ++ description: | ++ List of directories where (Container Device Interface) CDI ++ specifications are located. ++ ++ These specifications define vendor-specific modifications to an OCI ++ runtime specification for a container being created. ++ ++ An empty list indicates that CDI device injection is disabled. ++ ++ Note that since using CDI device injection requires the daemon to have ++ experimental enabled. For non-experimental daemons an empty list will ++ always be returned. ++ type: array ++ items: ++ type: string ++ example: ++ - /etc/cdi ++ - /var/run/cdi ++ Containerd: ++ $ref: "#/components/schemas/ContainerdInfo" ++ ContainerdInfo: ++ description: | ++ Information for connecting to the containerd instance that is used by the daemon. ++ This is included for debugging purposes only. ++ type: ++ - object ++ - "null" ++ properties: ++ Address: ++ description: The address of the containerd socket. ++ type: string ++ example: /run/containerd/containerd.sock ++ Namespaces: ++ description: | ++ The namespaces that the daemon uses for running containers and ++ plugins in containerd. These namespaces can be configured in the ++ daemon configuration, and are considered to be used exclusively ++ by the daemon, Tampering with the containerd instance may cause ++ unexpected behavior. ++ ++ As these namespaces are considered to be exclusively accessed ++ by the daemon, it is not recommended to change these values, ++ or to change them to a value that is used by other systems, ++ such as cri-containerd. ++ type: object ++ properties: ++ Containers: ++ description: | ++ The default containerd namespace used for containers managed ++ by the daemon. ++ ++ The default namespace for containers is "moby", but will be ++ suffixed with the `.` of the remapped `root` if ++ user-namespaces are enabled and the containerd image-store ++ is used. ++ type: string ++ default: moby ++ example: moby ++ Plugins: ++ description: | ++ The default containerd namespace used for plugins managed by ++ the daemon. ++ ++ The default namespace for plugins is "plugins.moby", but will be ++ suffixed with the `.` of the remapped `root` if ++ user-namespaces are enabled and the containerd image-store ++ is used. ++ type: string ++ default: plugins.moby ++ example: plugins.moby ++ FirewallInfo: ++ description: | ++ Information about the daemon's firewalling configuration. ++ ++ This field is currently only used on Linux, and omitted on other platforms. ++ type: ++ - object ++ - "null" ++ properties: ++ Driver: ++ description: | ++ The name of the firewall backend driver. ++ type: string ++ example: nftables ++ Info: ++ description: | ++ Information about the firewall backend, provided as ++ "label" / "value" pairs. ++ ++ ++ ++ ++ ++ ++ > **Note**: The information returned in this field, including the ++ > formatting of values and labels, should not be considered stable, ++ > and may change without notice. ++ type: array ++ items: ++ type: array ++ items: ++ type: string ++ example: ++ - - ReloadedAt ++ - 2025-01-01T00:00:00Z ++ PluginsInfo: ++ description: | ++ Available plugins per type. ++ ++ ++ ++ ++ ++ ++ > **Note**: Only unmanaged (V1) plugins are included in this list. ++ > V1 plugins are "lazily" loaded, and are not returned in this list ++ > if there is no resource using the plugin. ++ type: object ++ properties: ++ Volume: ++ description: Names of available volume-drivers, and network-driver plugins. ++ type: array ++ items: ++ type: string ++ example: ++ - local ++ Network: ++ description: Names of available network-drivers, and network-driver plugins. ++ type: array ++ items: ++ type: string ++ example: ++ - bridge ++ - host ++ - ipvlan ++ - macvlan ++ - "null" ++ - overlay ++ Authorization: ++ description: Names of available authorization plugins. ++ type: array ++ items: ++ type: string ++ example: ++ - img-authz-plugin ++ - hbm ++ Log: ++ description: Names of available logging-drivers, and logging-driver plugins. ++ type: array ++ items: ++ type: string ++ example: ++ - awslogs ++ - fluentd ++ - gcplogs ++ - gelf ++ - journald ++ - json-file ++ - splunk ++ - syslog ++ RegistryServiceConfig: ++ description: | ++ RegistryServiceConfig stores daemon registry services configuration. ++ type: ++ - object ++ - "null" ++ properties: ++ InsecureRegistryCIDRs: ++ description: | ++ List of IP ranges of insecure registries, using the CIDR syntax ++ ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries ++ accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates ++ from unknown CAs) communication. ++ ++ By default, local registries (`::1/128` and `127.0.0.0/8`) are configured as ++ insecure. All other registries are secure. Communicating with an ++ insecure registry is not possible if the daemon assumes that registry ++ is secure. ++ ++ This configuration override this behavior, insecure communication with ++ registries whose resolved IP address is within the subnet described by ++ the CIDR syntax. ++ ++ Registries can also be marked insecure by hostname. Those registries ++ are listed under `IndexConfigs` and have their `Secure` field set to ++ `false`. ++ ++ > **Warning**: Using this option can be useful when running a local ++ > registry, but introduces security vulnerabilities. This option ++ > should therefore ONLY be used for testing purposes. For increased ++ > security, users should add their CA to their system's list of trusted ++ > CAs instead of enabling this option. ++ type: array ++ items: ++ type: string ++ example: ++ - ::1/128 ++ - 127.0.0.0/8 ++ IndexConfigs: ++ type: object ++ additionalProperties: ++ $ref: "#/components/schemas/IndexInfo" ++ example: ++ 127.0.0.1:5000: ++ Name: 127.0.0.1:5000 ++ Mirrors: [] ++ Secure: false ++ Official: false ++ "[2001:db8:a0b:12f0::1]:80": ++ Name: "[2001:db8:a0b:12f0::1]:80" ++ Mirrors: [] ++ Secure: false ++ Official: false ++ docker.io: ++ Name: docker.io ++ Mirrors: ++ - https://hub-mirror.corp.example.com:5000/ ++ Secure: true ++ Official: true ++ registry.internal.corp.example.com:3000: ++ Name: registry.internal.corp.example.com:3000 ++ Mirrors: [] ++ Secure: false ++ Official: false ++ Mirrors: ++ description: | ++ List of registry URLs that act as a mirror for the official ++ (`docker.io`) registry. ++ type: array ++ items: ++ type: string ++ example: ++ - https://hub-mirror.corp.example.com:5000/ ++ - https://[2001:db8:a0b:12f0::1]/ ++ IndexInfo: ++ description: IndexInfo contains information about a registry. ++ type: ++ - object ++ - "null" ++ properties: ++ Name: ++ description: | ++ Name of the registry, such as "docker.io". ++ type: string ++ example: docker.io ++ Mirrors: ++ description: | ++ List of mirrors, expressed as URIs. ++ type: array ++ items: ++ type: string ++ example: ++ - https://hub-mirror.corp.example.com:5000/ ++ - https://registry-2.docker.io/ ++ - https://registry-3.docker.io/ ++ Secure: ++ description: | ++ Indicates if the registry is part of the list of insecure ++ registries. ++ ++ If `false`, the registry is insecure. Insecure registries accept ++ un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from ++ unknown CAs) communication. ++ ++ > **Warning**: Insecure registries can be useful when running a local ++ > registry. However, because its use creates security vulnerabilities ++ > it should ONLY be enabled for testing purposes. For increased ++ > security, users should add their CA to their system's list of ++ > trusted CAs instead of enabling this option. ++ type: boolean ++ example: true ++ Official: ++ description: | ++ Indicates whether this is an official registry (i.e., Docker Hub / docker.io) ++ type: boolean ++ example: true ++ Runtime: ++ description: | ++ Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec) ++ runtime. ++ ++ The runtime is invoked by the daemon via the `containerd` daemon. OCI ++ runtimes act as an interface to the Linux kernel namespaces, cgroups, ++ and SELinux. ++ type: object ++ properties: ++ path: ++ description: | ++ Name and, optional, path, of the OCI executable binary. ++ ++ If the path is omitted, the daemon searches the host's `$PATH` for the ++ binary and uses the first result. ++ type: string ++ example: /usr/local/bin/my-oci-runtime ++ runtimeArgs: ++ description: | ++ List of command-line arguments to pass to the runtime when invoked. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - --debug ++ - --systemd-cgroup=false ++ status: ++ description: | ++ Information specific to the runtime. ++ ++ While this API specification does not define data provided by runtimes, ++ the following well-known properties may be provided by runtimes: ++ ++ `org.opencontainers.runtime-spec.features`: features structure as defined ++ in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), ++ in a JSON string representation. ++ ++ ++ ++ ++ ++ ++ > **Note**: The information returned in this field, including the ++ > formatting of values and labels, should not be considered stable, ++ > and may change without notice. ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: string ++ example: ++ org.opencontainers.runtime-spec.features: '{"ociVersionMin":"1.0.0","ociVersionMax":"1.1.0","...":"..."}' ++ Commit: ++ description: | ++ Commit holds the Git-commit (SHA1) that a binary was built from, as ++ reported in the version-string of external tools, such as `containerd`, ++ or `runC`. ++ type: object ++ properties: ++ ID: ++ description: Actual commit ID of external tool. ++ type: string ++ example: cfb82a876ecc11b5ca0977d1733adbe58599088a ++ SwarmInfo: ++ description: | ++ Represents generic information about swarm. ++ type: object ++ properties: ++ NodeID: ++ description: Unique identifier of for this node in the swarm. ++ type: string ++ default: "" ++ example: k67qz4598weg5unwwffg6z1m1 ++ NodeAddr: ++ description: | ++ IP address at which this node can be reached by other nodes in the ++ swarm. ++ type: string ++ default: "" ++ example: 10.0.0.46 ++ LocalNodeState: ++ $ref: "#/components/schemas/LocalNodeState" ++ ControlAvailable: ++ type: boolean ++ default: false ++ example: true ++ Error: ++ type: string ++ default: "" ++ RemoteManagers: ++ description: | ++ List of ID's and addresses of other managers in the swarm. ++ type: ++ - array ++ - "null" ++ default: null ++ items: ++ $ref: "#/components/schemas/PeerNode" ++ example: ++ - NodeID: 71izy0goik036k48jg985xnds ++ Addr: 10.0.0.158:2377 ++ - NodeID: 79y6h1o4gv8n120drcprv5nmc ++ Addr: 10.0.0.159:2377 ++ - NodeID: k67qz4598weg5unwwffg6z1m1 ++ Addr: 10.0.0.46:2377 ++ Nodes: ++ description: Total number of nodes in the swarm. ++ type: ++ - integer ++ - "null" ++ example: 4 ++ Managers: ++ description: Total number of managers in the swarm. ++ type: ++ - integer ++ - "null" ++ example: 3 ++ Cluster: ++ $ref: "#/components/schemas/ClusterInfo" ++ LocalNodeState: ++ description: Current local status of this node. ++ type: string ++ default: "" ++ enum: ++ - "" ++ - inactive ++ - pending ++ - active ++ - error ++ - locked ++ example: active ++ PeerNode: ++ description: Represents a peer-node in the swarm ++ type: object ++ properties: ++ NodeID: ++ description: Unique identifier of for this node in the swarm. ++ type: string ++ Addr: ++ description: | ++ IP address and ports at which this node can be reached. ++ type: string ++ NetworkAttachmentConfig: ++ description: | ++ Specifies how a service should be attached to a particular network. ++ type: object ++ properties: ++ Target: ++ description: | ++ The target network for attachment. Must be a network name or ID. ++ type: string ++ Aliases: ++ description: | ++ Discoverable alternate names for the service on this network. ++ type: array ++ items: ++ type: string ++ DriverOpts: ++ description: | ++ Driver attachment options for the network target. ++ type: object ++ additionalProperties: ++ type: string ++ EventActor: ++ description: | ++ Actor describes something that generates events, like a container, network, ++ or a volume. ++ type: object ++ properties: ++ ID: ++ description: The ID of the object emitting the event ++ type: string ++ example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 ++ Attributes: ++ description: | ++ Various key/value attributes of the object, depending on its type. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-label-value ++ image: alpine:latest ++ name: my-container ++ EventMessage: ++ description: | ++ EventMessage represents the information an event contains. ++ type: object ++ title: SystemEventsResponse ++ properties: ++ Type: ++ description: The type of object emitting the event ++ type: string ++ enum: ++ - builder ++ - config ++ - container ++ - daemon ++ - image ++ - network ++ - node ++ - plugin ++ - secret ++ - service ++ - volume ++ example: container ++ Action: ++ description: The type of event ++ type: string ++ example: create ++ Actor: ++ $ref: "#/components/schemas/EventActor" ++ scope: ++ description: | ++ Scope of the event. Engine events are `local` scope. Cluster (Swarm) ++ events are `swarm` scope. ++ type: string ++ enum: ++ - local ++ - swarm ++ time: ++ description: Timestamp of event ++ type: integer ++ format: int64 ++ example: 1629574695 ++ timeNano: ++ description: Timestamp of event, with nanosecond accuracy ++ type: integer ++ format: int64 ++ example: 1629574695515050000 ++ OCIDescriptor: ++ type: object ++ x-go-name: Descriptor ++ description: | ++ A descriptor struct containing digest, media type, and size, as defined in ++ the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). ++ properties: ++ mediaType: ++ description: | ++ The media type of the object this schema refers to. ++ type: string ++ example: application/vnd.oci.image.manifest.v1+json ++ digest: ++ description: | ++ The digest of the targeted content. ++ type: string ++ example: sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96 ++ size: ++ description: | ++ The size in bytes of the blob. ++ type: integer ++ format: int64 ++ example: 424 ++ urls: ++ description: List of URLs from which this object MAY be downloaded. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ format: uri ++ annotations: ++ description: Arbitrary metadata relating to the targeted content. ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: string ++ example: ++ com.docker.official-images.bashbrew.arch: amd64 ++ org.opencontainers.image.base.digest: sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8 ++ org.opencontainers.image.base.name: scratch ++ org.opencontainers.image.created: 2025-01-27T00:00:00Z ++ org.opencontainers.image.revision: 9fabb4bad5138435b01857e2fe9363e2dc5f6a79 ++ org.opencontainers.image.source: https://git.launchpad.net/cloud-images/+oci/ubuntu-base ++ org.opencontainers.image.url: https://hub.docker.com/_/ubuntu ++ org.opencontainers.image.version: "24.04" ++ data: ++ type: ++ - string ++ - "null" ++ description: |- ++ Data is an embedding of the targeted content. This is encoded as a base64 ++ string when marshalled to JSON (automatically, by encoding/json). If ++ present, Data can be used directly to avoid fetching the targeted content. ++ example: null ++ platform: ++ $ref: "#/components/schemas/OCIPlatform" ++ artifactType: ++ description: ArtifactType is the IANA media type of this artifact. ++ type: ++ - string ++ - "null" ++ example: null ++ OCIPlatform: ++ type: ++ - object ++ - "null" ++ x-go-name: Platform ++ description: | ++ Describes the platform which the image in the manifest runs on, as defined ++ in the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md). ++ properties: ++ architecture: ++ description: | ++ The CPU architecture, for example `amd64` or `ppc64`. ++ type: string ++ example: arm ++ os: ++ description: | ++ The operating system, for example `linux` or `windows`. ++ type: string ++ example: windows ++ os.version: ++ description: | ++ Optional field specifying the operating system version, for example on ++ Windows `10.0.19041.1165`. ++ type: string ++ example: 10.0.19041.1165 ++ os.features: ++ description: | ++ Optional field specifying an array of strings, each listing a required ++ OS feature (for example on Windows `win32k`). ++ type: array ++ items: ++ type: string ++ example: ++ - win32k ++ variant: ++ description: | ++ Optional field specifying a variant of the CPU, for example `v7` to ++ specify ARMv7 when architecture is `arm`. ++ type: string ++ example: v7 ++ DistributionInspect: ++ type: object ++ x-go-name: DistributionInspect ++ title: DistributionInspectResponse ++ required: ++ - Descriptor ++ - Platforms ++ description: | ++ Describes the result obtained from contacting the registry to retrieve ++ image metadata. ++ properties: ++ Descriptor: ++ $ref: "#/components/schemas/OCIDescriptor" ++ Platforms: ++ type: array ++ description: | ++ An array containing all platforms supported by the image. ++ items: ++ $ref: "#/components/schemas/OCIPlatform" ++ ClusterVolume: ++ type: object ++ description: | ++ Options and information specific to, and only present on, Swarm CSI ++ cluster volumes. ++ properties: ++ ID: ++ type: string ++ description: | ++ The Swarm ID of this volume. Because cluster volumes are Swarm ++ objects, they have an ID, unlike non-cluster volumes. This ID can ++ be used to refer to the Volume instead of the name. ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ type: string ++ format: dateTime ++ UpdatedAt: ++ type: string ++ format: dateTime ++ Spec: ++ $ref: "#/components/schemas/ClusterVolumeSpec" ++ Info: ++ type: object ++ description: | ++ Information about the global status of the volume. ++ properties: ++ CapacityBytes: ++ type: integer ++ format: int64 ++ description: | ++ The capacity of the volume in bytes. A value of 0 indicates that ++ the capacity is unknown. ++ VolumeContext: ++ type: object ++ description: | ++ A map of strings to strings returned from the storage plugin when ++ the volume is created. ++ additionalProperties: ++ type: string ++ VolumeID: ++ type: string ++ description: | ++ The ID of the volume as returned by the CSI storage plugin. This ++ is distinct from the volume's ID as provided by Docker. This ID ++ is never used by the user when communicating with Docker to refer ++ to this volume. If the ID is blank, then the Volume has not been ++ successfully created in the plugin yet. ++ AccessibleTopology: ++ type: array ++ description: | ++ The topology this volume is actually accessible from. ++ items: ++ $ref: "#/components/schemas/Topology" ++ PublishStatus: ++ type: array ++ description: | ++ The status of the volume as it pertains to its publishing and use on ++ specific nodes ++ items: ++ type: object ++ properties: ++ NodeID: ++ type: string ++ description: | ++ The ID of the Swarm node the volume is published on. ++ State: ++ type: string ++ description: | ++ The published state of the volume. ++ * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. ++ * `published` The volume is published successfully to the node. ++ * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. ++ * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. ++ enum: ++ - pending-publish ++ - published ++ - pending-node-unpublish ++ - pending-controller-unpublish ++ PublishContext: ++ type: object ++ description: | ++ A map of strings to strings returned by the CSI controller ++ plugin when a volume is published. ++ additionalProperties: ++ type: string ++ ClusterVolumeSpec: ++ type: object ++ description: | ++ Cluster-specific options used to create the volume. ++ properties: ++ Group: ++ type: string ++ description: | ++ Group defines the volume group of this volume. Volumes belonging to ++ the same group can be referred to by group name when creating ++ Services. Referring to a volume by group instructs Swarm to treat ++ volumes in that group interchangeably for the purpose of scheduling. ++ Volumes with an empty string for a group technically all belong to ++ the same, emptystring group. ++ AccessMode: ++ type: object ++ description: | ++ Defines how the volume is used by tasks. ++ properties: ++ Scope: ++ type: string ++ description: | ++ The set of nodes this volume can be used on at one time. ++ - `single` The volume may only be scheduled to one node at a time. ++ - `multi` the volume may be scheduled to any supported number of nodes at a time. ++ default: single ++ enum: ++ - single ++ - multi ++ Sharing: ++ type: string ++ description: | ++ The number and way that different tasks can use this volume ++ at one time. ++ - `none` The volume may only be used by one task at a time. ++ - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly ++ - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. ++ - `all` The volume may have any number of readers and writers. ++ default: none ++ enum: ++ - none ++ - readonly ++ - onewriter ++ - all ++ MountVolume: ++ type: object ++ description: | ++ Options for using this volume as a Mount-type volume. ++ ++ Either MountVolume or BlockVolume, but not both, must be ++ present. ++ properties: ++ FsType: ++ type: "string" ++ description: | ++ Specifies the filesystem type for the mount volume. ++ Optional. ++ MountFlags: ++ type: "array" ++ description: | ++ Flags to pass when mounting the volume. Optional. ++ items: ++ type: "string" ++ BlockVolume: ++ type: "object" ++ description: | ++ Options for using this volume as a Block-type volume. ++ Intentionally empty. ++ Secrets: ++ type: array ++ description: | ++ Swarm Secrets that are passed to the CSI storage plugin when ++ operating on this volume. ++ items: ++ type: object ++ description: | ++ One cluster volume secret entry. Defines a key-value pair that ++ is passed to the plugin. ++ properties: ++ Key: ++ type: string ++ description: | ++ Key is the name of the key of the key-value pair passed to ++ the plugin. ++ Secret: ++ type: string ++ description: | ++ Secret is the swarm Secret object from which to read data. ++ This can be a Secret name or ID. The Secret data is ++ retrieved by swarm and used as the value of the key-value ++ pair passed to the plugin. ++ AccessibilityRequirements: ++ type: object ++ description: | ++ Requirements for the accessible topology of the volume. These ++ fields are optional. For an in-depth description of what these ++ fields mean, see the CSI specification. ++ properties: ++ Requisite: ++ type: array ++ description: | ++ A list of required topologies, at least one of which the ++ volume must be accessible from. ++ items: ++ $ref: "#/components/schemas/Topology" ++ Preferred: ++ type: array ++ description: | ++ A list of topologies that the volume should attempt to be ++ provisioned in. ++ items: ++ $ref: "#/components/schemas/Topology" ++ CapacityRange: ++ type: object ++ description: | ++ The desired capacity that the volume should be created with. If ++ empty, the plugin will decide the capacity. ++ properties: ++ RequiredBytes: ++ type: integer ++ format: int64 ++ description: | ++ The volume must be at least this big. The value of 0 ++ indicates an unspecified minimum ++ LimitBytes: ++ type: integer ++ format: int64 ++ description: | ++ The volume must not be bigger than this. The value of 0 ++ indicates an unspecified maximum. ++ Availability: ++ type: string ++ description: | ++ The availability of the volume for use in tasks. ++ - `active` The volume is fully available for scheduling on the cluster ++ - `pause` No new workloads should use the volume, but existing workloads are not stopped. ++ - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. ++ default: active ++ enum: ++ - active ++ - pause ++ - drain ++ Topology: ++ description: | ++ A map of topological domains to topological segments. For in depth ++ details, see documentation for the Topology object in the CSI ++ specification. ++ type: object ++ properties: ++ Segments: ++ type: object ++ additionalProperties: ++ type: string ++ AttestationStatement: ++ x-go-name: AttestationStatement ++ description: | ++ AttestationStatement is a single in-toto statement attached to an image. ++ type: object ++ required: ++ - Descriptor ++ - PredicateType ++ properties: ++ Descriptor: ++ $ref: "#/components/schemas/OCIDescriptor" ++ PredicateType: ++ description: The in-toto predicate type URI of this statement. ++ type: string ++ example: https://slsa.dev/provenance/v0.2 ++ Statement: ++ description: | ++ The verbatim in-toto statement JSON. Only included when the caller ++ opts in via the `statement=true` query parameter; otherwise absent. ++ type: ++ - object ++ - "null" ++ ImageManifestSummary: ++ x-go-name: ManifestSummary ++ description: | ++ ImageManifestSummary represents a summary of an image manifest. ++ type: object ++ required: ++ - ID ++ - Descriptor ++ - Available ++ - Size ++ - Kind ++ properties: ++ ID: ++ description: | ++ ID is the content-addressable ID of an image and is the same as the ++ digest of the image manifest. ++ type: string ++ example: sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f ++ Descriptor: ++ $ref: "#/components/schemas/OCIDescriptor" ++ Available: ++ description: Indicates whether all the child content (image config, layers) is fully available locally. ++ type: boolean ++ example: true ++ Size: ++ type: object ++ required: ++ - Content ++ - Total ++ properties: ++ Total: ++ type: integer ++ format: int64 ++ example: 8213251 ++ description: | ++ Total is the total size (in bytes) of all the locally present ++ data (both distributable and non-distributable) that's related to ++ this manifest and its children. ++ This equal to the sum of [Content] size AND all the sizes in the ++ [Size] struct present in the Kind-specific data struct. ++ For example, for an image kind (Kind == "image") ++ this would include the size of the image content and unpacked ++ image snapshots ([Size.Content] + [ImageData.Size.Unpacked]). ++ Content: ++ description: | ++ Content is the size (in bytes) of all the locally present ++ content in the content store (e.g. image config, layers) ++ referenced by this manifest and its children. ++ This only includes blobs in the content store. ++ type: integer ++ format: int64 ++ example: 3987495 ++ Kind: ++ type: string ++ example: image ++ enum: ++ - image ++ - attestation ++ - unknown ++ description: | ++ The kind of the manifest. ++ ++ kind | description ++ -------------|----------------------------------------------------------- ++ image | Image manifest that can be used to start a container. ++ attestation | Attestation manifest produced by the Buildkit builder for a specific image manifest. ++ ImageData: ++ description: | ++ The image data for the image manifest. ++ This field is only populated when Kind is "image". ++ type: ++ - object ++ - "null" ++ x-omitempty: true ++ required: ++ - Platform ++ - Containers ++ - Size ++ - UnpackedSize ++ properties: ++ Platform: ++ allOf: ++ - $ref: "#/components/schemas/OCIPlatform" ++ - description: | ++ OCI platform of the image. This will be the platform specified in the ++ manifest descriptor from the index/manifest list. ++ If it's not available, it will be obtained from the image config. ++ Identity: ++ allOf: ++ - $ref: "#/components/schemas/Identity" ++ - anyOf: ++ - description: | ++ Identity holds information about the identity and origin of this image. ++ For image list responses, this can duplicate Build/Pull fields across ++ image manifests, because those parts are image-level metadata. ++ - type: "null" ++ Containers: ++ description: | ++ The IDs of the containers that are using this image. ++ type: array ++ items: ++ type: string ++ example: ++ - ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430 ++ - abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e ++ Size: ++ type: object ++ required: ++ - Unpacked ++ properties: ++ Unpacked: ++ type: integer ++ format: int64 ++ example: 3987495 ++ description: | ++ Unpacked is the size (in bytes) of the locally unpacked ++ (uncompressed) image content that's directly usable by the containers ++ running this image. ++ It's independent of the distributable content - e.g. ++ the image might still have an unpacked data that's still used by ++ some container even when the distributable/compressed content is ++ already gone. ++ AttestationData: ++ description: | ++ The image data for the attestation manifest. ++ This field is only populated when Kind is "attestation". ++ type: ++ - object ++ - "null" ++ x-omitempty: true ++ required: ++ - For ++ properties: ++ For: ++ description: | ++ The digest of the image manifest that this attestation is for. ++ type: string ++ example: sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f ++jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base ++security: [] diff --git a/prototypes/api-docs/migrations/engine-1.56.intermediate.json b/prototypes/api-docs/migrations/engine-1.56.intermediate.json new file mode 100644 index 000000000000..b790eafd4652 --- /dev/null +++ b/prototypes/api-docs/migrations/engine-1.56.intermediate.json @@ -0,0 +1,18836 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Docker Engine API", + "version": "1.56", + "x-logo": { + "url": "https://docs.docker.com/assets/images/logo-docker-main.png" + }, + "description": "The Engine API is an HTTP API served by Docker Engine. It is the API the\nDocker client uses to communicate with the Engine, so everything the Docker\nclient can do can be done with the API.\n\nMost of the client's commands map directly to API endpoints (e.g. `docker ps`\nis `GET /containers/json`). The notable exception is running containers,\nwhich consists of several API calls.\n\n# Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure\nof the API call. The body of the response will be JSON in the following\nformat:\n\n```\n{\n \"message\": \"page not found\"\n}\n```\n\n# Versioning\n\nThe API is usually changed in each release, so API calls are versioned to\nensure that clients don't break. To lock to a specific version of the API,\nyou prefix the URL with its version, for example, call `/v1.30/info` to use\nthe v1.30 version of the `/info` endpoint. If the API version specified in\nthe URL is not supported by the daemon, a HTTP `400 Bad Request` error message\nis returned.\n\nIf you omit the version-prefix, the current version of the API is used.\nFor example, calling `/info` is the same as calling `/v1.56/info`. Using the\nAPI without a version-prefix is deprecated and will be removed in a future release.\n\nEngine releases in the near future should support this version of the API,\nso your client will continue to work even if it is talking to a newer Engine.\n\nThe API uses an open schema model, which means the server may add extra properties\nto responses. Likewise, the server will ignore any extra query parameters and\nrequest body properties. When you write clients, you need to ignore additional\nproperties in responses to ensure they do not break when talking to newer\ndaemons.\n\n\n# Authentication\n\nAuthentication for registries is handled client side. The client has to send\nauthentication details to various endpoints that need to communicate with\nregistries, such as `POST /images/(name)/push`. These are sent as\n`X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5)\n(JSON) string with the following structure:\n\n```\n{\n \"username\": \"string\",\n \"password\": \"string\",\n \"serveraddress\": \"string\"\n}\n```\n\nThe `serveraddress` is a domain/IP without a protocol. Throughout this\nstructure, double quotes are required.\n\nIf you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth),\nyou can just pass this instead of credentials:\n\n```\n{\n \"identitytoken\": \"9cbaf023786cd7...\"\n}\n```\n" + }, + "tags": [ + { + "name": "Container", + "x-displayName": "Containers", + "description": "Create and manage containers.\n" + }, + { + "name": "Image", + "x-displayName": "Images" + }, + { + "name": "Network", + "x-displayName": "Networks", + "description": "Networks are user-defined networks that containers can be attached to.\nSee the [networking documentation](https://docs.docker.com/network/)\nfor more information.\n" + }, + { + "name": "Volume", + "x-displayName": "Volumes", + "description": "Create and manage persistent storage that can be attached to containers.\n" + }, + { + "name": "Exec", + "x-displayName": "Exec", + "description": "Run new commands inside running containers. Refer to the\n[command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\nfor more information.\n\nTo exec a command in a container, you first need to create an exec instance,\nthen start it. These two API endpoints are wrapped up in a single command-line\ncommand, `docker exec`.\n" + }, + { + "name": "Swarm", + "x-displayName": "Swarm", + "description": "Engines can be clustered together in a swarm. Refer to the\n[swarm mode documentation](https://docs.docker.com/engine/swarm/)\nfor more information.\n" + }, + { + "name": "Node", + "x-displayName": "Nodes", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode\nmust be enabled for these endpoints to work.\n" + }, + { + "name": "Service", + "x-displayName": "Services", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must\nbe enabled for these endpoints to work.\n" + }, + { + "name": "Task", + "x-displayName": "Tasks", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit\nof swarm. Swarm mode must be enabled for these endpoints to work.\n" + }, + { + "name": "Secret", + "x-displayName": "Secrets", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must\nbe enabled for these endpoints to work.\n" + }, + { + "name": "Config", + "x-displayName": "Configs", + "description": "Configs are application configurations that can be used by services. Swarm\nmode must be enabled for these endpoints to work.\n" + }, + { + "name": "Plugin", + "x-displayName": "Plugins" + }, + { + "name": "System", + "x-displayName": "System" + } + ], + "paths": { + "/containers/json": { + "get": { + "summary": "List containers", + "description": "Returns a list of containers. For details on the format, see the\n[inspect endpoint](#operation/ContainerInspect).\n\nNote that it uses a different, smaller representation of a container\nthan inspecting a single container. For example, the list of linked\ncontainers is not propagated .\n", + "operationId": "ContainerList", + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "schema": { + "type": "integer" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `annotation=key` or `annotation=\"key=value\"` of a container annotation\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Container" + ] + } + }, + "/containers/create": { + "post": { + "summary": "Create a container", + "operationId": "ContainerCreate", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match\n`/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n", + "schema": { + "type": "string", + "pattern": "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format `os[/arch[/variant]]` used for image lookup.\n\nWhen specified, the daemon checks if the requested image is present\nin the local image cache with the given OS and Architecture, and\notherwise returns a `404` status.\n\nIf the option is not set, the host's native OS and Architecture are\nused to look up the image in the image cache. However, if no platform\nis passed and the given image does exist in the local image cache,\nbut its OS or architecture does not match, the container is created\nwith the available image, and a warning is added to the `Warnings`\nfield in the response, for example;\n\n WARNING: The requested image's platform (linux/arm64/v8) does not\n match the detected host platform (linux/amd64) and no\n specific platform was requested\n", + "schema": { + "type": "string", + "default": "" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ], + "example": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + }, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "HostConfig": { + "Binds": [ + "/tmp:/tmp" + ], + "Links": [ + "redis3:redis" + ], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "NanoCpus": 500000, + "CpuPercent": 80, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuQuota": 50000, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "MemorySwappiness": 60, + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": 0, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "VolumesFrom": [ + "parent", + "other:ro" + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "GroupAdd": [ + "newgroup" + ], + "RestartPolicy": { + "Name": "", + "MaximumRetryCount": 0 + }, + "AutoRemove": true, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [ + {} + ], + "LogConfig": { + "Type": "json-file", + "Config": {} + }, + "SecurityOpt": [], + "StorageOpt": {}, + "CgroupParent": "", + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + } + } + }, + "application/octet-stream": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ], + "example": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + }, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "HostConfig": { + "Binds": [ + "/tmp:/tmp" + ], + "Links": [ + "redis3:redis" + ], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "NanoCpus": 500000, + "CpuPercent": 80, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuQuota": 50000, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "MemorySwappiness": 60, + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": 0, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "VolumesFrom": [ + "parent", + "other:ro" + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "GroupAdd": [ + "newgroup" + ], + "RestartPolicy": { + "Name": "", + "MaximumRetryCount": 0 + }, + "AutoRemove": true, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [ + {} + ], + "LogConfig": { + "Type": "json-file", + "Config": {} + }, + "SecurityOpt": [], + "StorageOpt": {}, + "CgroupParent": "", + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + } + } + } + }, + "description": "Container to create", + "required": true + }, + "responses": { + "201": { + "description": "Container created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: c2ada9df5af8" + } + } + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/json": { + "get": { + "summary": "Inspect a container", + "description": "Return low-level information about a container.", + "operationId": "ContainerInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerInspectResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/top": { + "get": { + "summary": "List processes running inside a container", + "description": "On Unix systems, this is done by running the `ps` command. This endpoint\nis not supported on Windows.\n", + "operationId": "ContainerTop", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerTopResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ContainerTopResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "schema": { + "type": "string", + "default": "-ef" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/logs": { + "get": { + "summary": "Get container logs", + "description": "Get `stdout` and `stderr` logs from a container.\n\nNote: This endpoint works only for containers with the `json-file` or\n`journald` logging driver.\n", + "operationId": "ContainerLogs", + "responses": { + "200": { + "description": "logs returned as a stream in response body.\nFor the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\nNote that unlike the attach endpoint, the logs endpoint does not\nupgrade the connection and does not set Content-Type.\n", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/changes": { + "get": { + "summary": "Get changes on a container’s filesystem", + "description": "Returns which files in a container's filesystem have been added, deleted,\nor modified. The `Kind` of modification can be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "operationId": "ContainerChanges", + "responses": { + "200": { + "description": "The list of changes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilesystemChange" + } + }, + "examples": { + "response": { + "value": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + } + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/export": { + "get": { + "summary": "Export a container", + "description": "Export the contents of a container as a tarball.", + "operationId": "ContainerExport", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/stats": { + "get": { + "summary": "Get container stats based on resource usage", + "description": "This endpoint returns a live stream of a container’s resource usage\nstatistics.\n\nThe `precpu_stats` is the CPU statistic of the *previous* read, and is\nused to calculate the CPU usage percentage. It is not an exact copy\nof the `cpu_stats` field.\n\nIf either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is\nnil then for compatibility with older daemons the length of the\ncorresponding `cpu_usage.percpu_usage` array should be used.\n\nOn a cgroup v2 host, the following fields are not set\n* `blkio_stats`: all fields other than `io_service_bytes_recursive`\n* `cpu_stats`: `cpu_usage.percpu_usage`\n* `memory_stats`: `max_usage` and `failcnt`\nAlso, `memory_stats.stats` fields are incompatible with cgroup v1.\n\nTo calculate the values shown by the `stats` command of the docker cli tool\nthe following formulas can be used:\n* used_memory = `memory_stats.usage - memory_stats.stats.cache` (cgroups v1)\n* used_memory = `memory_stats.usage - memory_stats.stats.inactive_file` (cgroups v2)\n* available_memory = `memory_stats.limit`\n* Memory usage % = `(used_memory / available_memory) * 100.0`\n* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`\n* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`\n* number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`\n* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`\n", + "operationId": "ContainerStats", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerStatsResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then\nit will disconnect.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "one-shot", + "in": "query", + "description": "Only get a single stat instead of waiting for 2 cycles. Must be used\nwith `stream=false`.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/resize": { + "post": { + "summary": "Resize a container TTY", + "description": "Resize the TTY for a container.", + "operationId": "ContainerResize", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "cannot resize container", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/start": { + "post": { + "summary": "Start a container", + "operationId": "ContainerStart", + "responses": { + "204": { + "description": "no error" + }, + "304": { + "description": "container already started" + }, + "400": { + "description": "bad parameter, including an invalid checkpoint ID", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a\nsingle character `[a-Z]` or `ctrl-` where `` is one\nof: `a-z`, `@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/stop": { + "post": { + "summary": "Stop a container", + "operationId": "ContainerStop", + "responses": { + "204": { + "description": "no error" + }, + "304": { + "description": "container already stopped" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/restart": { + "post": { + "summary": "Restart a container", + "operationId": "ContainerRestart", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/kill": { + "post": { + "summary": "Kill a container", + "description": "Send a POSIX signal to a container, defaulting to killing to the\ncontainer.\n", + "operationId": "ContainerKill", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "container is not running", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string", + "default": "SIGKILL" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/update": { + "post": { + "summary": "Update a container", + "description": "Change various configuration options of a container without having to\nrecreate it.\n", + "operationId": "ContainerUpdate", + "responses": { + "200": { + "description": "The container has been updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerUpdateResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + } + } + } + ], + "example": { + "BlkioWeight": 300, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuQuota": 50000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpusetCpus": "0,1", + "CpusetMems": "0", + "Memory": 314572800, + "MemorySwap": 514288000, + "MemoryReservation": 209715200, + "RestartPolicy": { + "MaximumRetryCount": 4, + "Name": "on-failure" + } + } + } + } + }, + "required": true + }, + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/rename": { + "post": { + "summary": "Rename a container", + "operationId": "ContainerRename", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name already in use", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "required": true, + "description": "New name for the container", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/pause": { + "post": { + "summary": "Pause a container", + "description": "Use the freezer cgroup to suspend all processes in a container.\n\nTraditionally, when suspending a process the `SIGSTOP` signal is used,\nwhich is observable by the process being suspended. With the freezer\ncgroup the process is unaware, and unable to capture, that it is being\nsuspended, and subsequently resumed.\n", + "operationId": "ContainerPause", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/unpause": { + "post": { + "summary": "Unpause a container", + "description": "Resume a container which has been paused.", + "operationId": "ContainerUnpause", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/attach": { + "post": { + "summary": "Attach to a container", + "description": "Attach to a container to read its output or send it input. You can attach\nto the same container multiple times and you can reattach to containers\nthat have been detached.\n\nEither the `stream` or `logs` parameter must be `true` for this endpoint\nto do anything.\n\nSee the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/)\nfor more details.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to transport `stdin`, `stdout`,\nand `stderr` on the same socket.\n\nThis is the response from the daemon for an attach request:\n\n```\nHTTP/1.1 200 OK\nContent-Type: application/vnd.docker.raw-stream\n\n[STREAM]\n```\n\nAfter the headers and two new lines, the TCP connection can now be used\nfor raw, bidirectional communication between the client and server.\n\nTo hint potential proxies about connection hijacking, the Docker client\ncan also optionally send connection upgrade headers.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1\nUpgrade: tcp\nConnection: Upgrade\n```\n\nThe Docker daemon will respond with a `101 UPGRADED` response, and will\nsimilarly follow with the raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nContent-Type: application/vnd.docker.raw-stream\nConnection: Upgrade\nUpgrade: tcp\n\n[STREAM]\n```\n\n### Stream format\n\nWhen the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream\nand the stream over the hijacked connected is multiplexed to separate out\n`stdout` and `stderr`. The stream consists of a series of frames, each\ncontaining a header and a payload.\n\nThe header contains the information which the stream writes (`stdout` or\n`stderr`). It also contains the size of the associated frame encoded in\nthe last four bytes (`uint32`).\n\nIt is encoded on the first eight bytes like this:\n\n```go\nheader := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}\n```\n\n`STREAM_TYPE` can be:\n\n- 0: `stdin` (is written on `stdout`)\n- 1: `stdout`\n- 2: `stderr`\n\n`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size\nencoded as big endian.\n\nFollowing the header is the payload, which is the specified number of\nbytes of `STREAM_TYPE`.\n\nThe simplest way to implement this protocol is the following:\n\n1. Read 8 bytes.\n2. Choose `stdout` or `stderr` depending on the first byte.\n3. Extract the frame size from the last four bytes.\n4. Read the extracted size and output it on the correct output.\n5. Goto 1.\n\n### Stream format when using a TTY\n\nWhen the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate),\nthe stream is not multiplexed. The data exchanged over the hijacked\nconnection is simply the raw data from the process PTY and client's\n`stdin`.\n", + "operationId": "ContainerAttach", + "responses": { + "101": { + "description": "no error, hints proxy about hijacking" + }, + "200": { + "description": "no error, no upgrade header found" + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you\nwant to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been\nreturned, it will seamlessly transition into streaming current\noutput.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/attach/ws": { + "get": { + "summary": "Attach to a container via a websocket", + "operationId": "ContainerAttachWebsocket", + "responses": { + "101": { + "description": "no error, hints proxy about hijacking" + }, + "200": { + "description": "no error, no upgrade header found" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,`, or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/wait": { + "post": { + "summary": "Wait for a container", + "description": "Block until a container stops, then returns the exit code.", + "operationId": "ContainerWait", + "responses": { + "200": { + "description": "The container has exit.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerWaitResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition.\n\nDefaults to `not-running` if omitted or empty.\n", + "schema": { + "type": "string", + "enum": [ + "not-running", + "next-exit", + "removed" + ], + "default": "not-running" + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}": { + "delete": { + "summary": "Remove a container", + "operationId": "ContainerDelete", + "responses": { + "204": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the\ncontainer before attempting removal or force remove\n" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "v", + "in": "query", + "description": "Remove anonymous volumes associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Container" + ] + } + }, + "/containers/{id}/archive": { + "head": { + "summary": "Get information about files in a container", + "description": "A response header `X-Docker-Container-Path-Stat` is returned, containing\na base64 - encoded JSON object with some filesystem header information\nabout the path.\n", + "operationId": "ContainerArchiveInfo", + "responses": { + "200": { + "description": "no error", + "headers": { + "X-Docker-Container-Path-Stat": { + "description": "A base64 - encoded JSON object with some filesystem header\ninformation about the path\n", + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + }, + "get": { + "summary": "Get an archive of a filesystem resource in a container", + "description": "Get a tar archive of a resource in the filesystem of container id.", + "operationId": "ContainerArchive", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "Bad parameter", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Container or path does not exist", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Container" + ] + }, + "put": { + "summary": "Extract an archive of files or folders to a directory in a container", + "description": "Upload a tar archive to be extracted to a path in the filesystem of container id.\n`path` parameter is asserted to be a directory. If it exists as a file, 400 error\nwill be returned with message \"not a directory\".\n", + "operationId": "PutContainerArchive", + "responses": { + "200": { + "description": "The content was extracted successfully" + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "not a directory" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Permission denied, the volume or container rootfs is marked as read-only.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such container or path does not exist inside the container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "schema": { + "type": "string" + } + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If `1`, `true`, or `True` then it will be an error if unpacking the\ngiven content would cause an existing directory to be replaced with\na non-directory and vice versa.\n", + "schema": { + "type": "string" + } + }, + { + "name": "copyUIDGID", + "in": "query", + "description": "If `1`, `true`, then it will copy UID/GID maps to the dest file or\ndir\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "The input stream must be a tar archive compressed with one of the\nfollowing algorithms: `identity` (no compression), `gzip`, `bzip2`,\nor `xz`.\n", + "required": true + }, + "tags": [ + "Container" + ] + } + }, + "/containers/prune": { + "post": { + "summary": "Delete stopped containers", + "operationId": "ContainerPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ContainerPruneResponse", + "properties": { + "ContainersDeleted": { + "description": "Container IDs that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Container" + ] + } + }, + "/images/json": { + "get": { + "summary": "List Images", + "description": "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.", + "operationId": "ImageList", + "responses": { + "200": { + "description": "Summary image data for the images matching the query", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the images list.\n\nAvailable filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n- `until=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "shared-size", + "in": "query", + "description": "Compute and show shared size as a `SharedSize` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "manifests", + "in": "query", + "description": "Include `Manifests` in the image summary.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "identity", + "in": "query", + "description": "Include `Identity` in each manifest summary. Requires `manifests=1`.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/build": { + "post": { + "summary": "Build an image", + "description": "Build an image from a tar archive with a `Dockerfile` in it.\n\nThe `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/).\n\nThe Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output.\n\nThe build is canceled if the client drops the connection by quitting or being killed.\n", + "operationId": "ImageBuild", + "parameters": [ + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "schema": { + "type": "string", + "default": "Dockerfile" + } + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "schema": { + "type": "string" + } + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "schema": { + "type": "string" + } + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "schema": { + "type": "string" + } + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "schema": { + "type": "string" + } + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "schema": { + "type": "string" + } + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "schema": { + "type": "string" + } + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "schema": { + "type": "boolean" + } + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "schema": { + "type": "string" + } + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported\nstandard values are: `bridge`, `host`, `none`, and `container:`.\nAny other value is taken as a custom network's name or ID to which this\ncontainer should connect to.\n", + "schema": { + "type": "string" + } + }, + { + "name": "Content-type", + "in": "header", + "schema": { + "type": "string", + "enum": [ + "application/x-tar" + ], + "default": "application/x-tar" + } + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "target", + "in": "query", + "description": "Target build stage", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "outputs", + "in": "query", + "description": "BuildKit output configuration in the format of a stringified JSON array of objects.\nEach object must have two top-level properties: `Type` and `Attrs`.\nThe `Type` property must be set to 'moby'.\nThe `Attrs` property is a map of attributes for the BuildKit output configuration.\nSee https://docs.docker.com/build/exporters/oci-docker/ for more information.\n\nExample:\n\n```\n[{\"Type\":\"moby\",\"Attrs\":{\"type\":\"image\",\"force-compression\":\"true\",\"compression\":\"zstd\"}}]\n```\n", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "version", + "in": "query", + "description": "Version of the builder backend to use.\n\n- `1` is the first generation classic (deprecated) builder in the Docker daemon (default)\n- `2` is [BuildKit](https://github.com/moby/buildkit)\n", + "schema": { + "type": "string", + "enum": [ + "1", + "2" + ], + "default": "1" + } + } + ], + "requestBody": { + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." + }, + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Image" + ] + } + }, + "/build/prune": { + "post": { + "summary": "Delete builder cache", + "operationId": "BuildPrune", + "parameters": [ + { + "name": "reserved-space", + "in": "query", + "description": "Amount of disk space in bytes to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "max-used-space", + "in": "query", + "description": "Maximum amount of disk space allowed to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "min-free-space", + "in": "query", + "description": "Target amount of free disk space after pruning", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "all", + "in": "query", + "description": "Remove all types of build cache", + "schema": { + "type": "boolean" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the list of build cache objects.\n\nAvailable filters:\n\n- `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time.\n- `id=`\n- `parent=`\n- `type=`\n- `description=`\n- `inuse`\n- `shared`\n- `private`\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "BuildPruneResponse", + "properties": { + "CachesDeleted": { + "type": "array", + "items": { + "description": "ID of build cache object", + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Image" + ] + } + }, + "/images/create": { + "post": { + "summary": "Create an image", + "description": "Pull or import an image.", + "operationId": "ImageCreate", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "repository does not exist or no read access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. If the name includes a tag or digest, specific behavior applies:\n\n- If only `fromImage` includes a tag, that tag is used.\n- If both `fromImage` and `tag` are provided, `tag` takes precedence.\n- If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored.\n- If neither a tag nor digest is specified, all tags are pulled.\n", + "schema": { + "type": "string" + } + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "schema": { + "type": "string" + } + }, + { + "name": "message", + "in": "query", + "description": "Set commit message for imported image.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + }, + { + "name": "changes", + "in": "query", + "description": "Apply `Dockerfile` instructions to the image that is created,\nfor example: `changes=ENV DEBUG=true`.\nNote that `ENV DEBUG=true` should be URI component encoded.\n\nSupported `Dockerfile` instructions:\n`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]].\n\nWhen used in combination with the `fromImage` option, the daemon checks\nif the given image is present in the local image cache with the given\nOS and Architecture, and otherwise attempts to pull the image. If the\noption is not set, the host's native OS and Architecture are used.\nIf the given image does not exist in the local image cache, the daemon\nattempts to pull the image with the host's native OS and Architecture.\nIf the given image does exists in the local image cache, but its OS or\narchitecture does not match, a warning is produced.\n\nWhen used with the `fromSrc` option to import an image from an archive,\nthis option sets the platform information for the imported image. If\nthe option is not set, the host's native OS and Architecture are used\nfor the imported image.\n", + "schema": { + "type": "string", + "default": "" + } + } + ], + "requestBody": { + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/octet-stream": { + "schema": { + "type": "string" + } + } + }, + "description": "Image content if the value `-` has been specified in fromSrc query parameter" + }, + "tags": [ + "Image" + ] + } + }, + "/images/{name}/json": { + "get": { + "summary": "Inspect an image", + "description": "Return low-level information about an image.", + "operationId": "ImageInspect", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageInspect" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: someimage (tag: latest)" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "manifests", + "in": "query", + "description": "Include Manifests in the image summary.\n\nThe `manifests` and `platform` options are mutually exclusive, and\nan error is produced if both are set.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show inspect. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nThe `platform` and `manifests` options are mutually exclusive, and\nan error is produced if both are set.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/{name}/attestations": { + "get": { + "summary": "Get attestation statements for an image", + "description": "Return the in-toto attestation statements attached to the image for the\ngiven platform. The daemon locates the attestation manifest(s) that\nreference the matching platform image manifest, reads their statement\nlayers, and returns the verbatim statement JSON together with layer\nmetadata.\n\nIf the image has no attestations an empty array is returned.\n", + "operationId": "ImageAttestations", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AttestationStatement" + } + } + } + } + }, + "400": { + "description": "Bad parameter (e.g. malformed `platform` value)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such image, or no manifest found for the requested platform", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "501": { + "description": "The daemon's image backend does not support attestations. This\nis returned by the legacy (graphdriver) image store, which does\nnot preserve OCI image indexes.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the image variant whose\nattestations to return.\nIf omitted, the daemon's default (host) platform is used.\n\nOnly one platform value is currently accepted; passing more than\none returns an error. The parameter is declared as an array so the\nwire shape can accept multiple values in the future without an\nAPI version bump.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"amd64\"}`", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "type", + "in": "query", + "description": "In-toto predicate type URI to filter returned statements. May be\nrepeated to accept any of several predicate types. If omitted, all\nstatements are returned.\n\nExample: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document`", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "statement", + "in": "query", + "description": "Include the verbatim in-toto statement body in each returned\nentry. Defaults to false; when omitted or false, only the\ndescriptor and predicate type are returned and statement blobs\nare not read.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/{name}/history": { + "get": { + "summary": "Get the history of an image", + "description": "Return parent layers of an image.", + "operationId": "ImageHistory", + "responses": { + "200": { + "description": "List of image layers", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageHistoryResponseItem" + } + }, + "examples": { + "response": { + "value": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + } + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show the history for. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/{name}/push": { + "post": { + "summary": "Push an image", + "description": "Push an image to a registry.\n\nIf you wish to push an image on to a private registry, that image must\nalready have a tag which references the registry. For example,\n`registry.example.com/myimage:latest`.\n\nThe push is cancelled if the HTTP connection is closed.\n", + "operationId": "ImagePush", + "responses": { + "200": { + "description": "No error" + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Name of the image to push. For example, `registry.example.com/myimage`.\nThe image must be present in the local image store with the same name.\n\nThe name should be provided without tag; if a tag is provided, it\nis ignored. For example, `registry.example.com/myimage:latest` is\nconsidered equivalent to `registry.example.com/myimage`.\n\nUse the `tag` parameter to specify the tag to push.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag of the image to push. For example, `latest`. If no tag is provided,\nall tags of the given image that are present in the local image store\nare pushed.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant to push.\nIf not provided, all available variants will attempt to be pushed.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to push to the registry. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/{name}/tag": { + "post": { + "summary": "Tag an image", + "description": "Create a tag that refers to a source image.\n\nThis creates an additional reference (tag) to the source image. The tag\ncan include a different repository name and/or tag. If the repository\nor tag already exists, it will be overwritten.\n", + "operationId": "ImageTag", + "responses": { + "201": { + "description": "No error" + }, + "400": { + "description": "Bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/{name}": { + "delete": { + "summary": "Remove an image", + "description": "Remove an image, along with any untagged parent images that were\nreferenced by that image.\n\nImages can't be removed if they have descendant images, are being\nused by a running container or are being used by a build.\n", + "operationId": "ImageDelete", + "responses": { + "200": { + "description": "The image was deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "examples": { + "response": { + "value": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + } + } + } + } + }, + "404": { + "description": "No such image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platforms", + "in": "query", + "description": "Select platform-specific content to delete.\nMultiple values are accepted.\nEach platform is a OCI platform encoded as a JSON string.\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/search": { + "get": { + "summary": "Search images", + "description": "Search for an image on Docker Hub.", + "operationId": "ImageSearch", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "title": "ImageSearchResponseItem", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "description": "Whether this repository has automated builds enabled.\n\n


\n\n> **Deprecated**: This field is deprecated and will always be \"false\".\n", + "type": "boolean", + "example": false + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "examples": { + "response": { + "value": [ + { + "description": "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!", + "is_official": true, + "is_automated": false, + "name": "alpine", + "star_count": 10093 + }, + { + "description": "Busybox base image.", + "is_official": true, + "is_automated": false, + "name": "Busybox base image.", + "star_count": 3037 + }, + { + "description": "The PostgreSQL object-relational database system provides reliability and data integrity.", + "is_official": true, + "is_automated": false, + "name": "postgres", + "star_count": 12408 + } + ] + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "schema": { + "type": "integer" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/prune": { + "post": { + "summary": "Delete unused images", + "operationId": "ImagePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ImagePruneResponse", + "properties": { + "ImagesDeleted": { + "description": "Images that were deleted", + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Image" + ] + } + }, + "/auth": { + "post": { + "summary": "Check auth configuration", + "description": "Validate credentials for a registry and, if available, get an identity\ntoken for accessing the registry without password.\n", + "operationId": "SystemAuth", + "responses": { + "200": { + "description": "An identity token was generated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + } + } + } + }, + "204": { + "description": "No error" + }, + "401": { + "description": "Auth error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthConfig" + } + } + }, + "description": "Authentication to check" + }, + "tags": [ + "System" + ] + } + }, + "/info": { + "get": { + "summary": "Get system information", + "operationId": "SystemInfo", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemInfo" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "System" + ] + } + }, + "/version": { + "get": { + "summary": "Get version", + "description": "Returns the version of Docker that is running and various information about the system that Docker is running on.", + "operationId": "SystemVersion", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemVersion" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "System" + ] + } + }, + "/_ping": { + "get": { + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPing", + "responses": { + "200": { + "description": "no error", + "headers": { + "Api-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder\n\nThe default on Linux is version \"2\" (BuildKit), but the daemon\ncan be configured to recommend version \"1\" (classic Builder).\nWindows does not yet support BuildKit for native Windows images,\nand uses \"1\" (classic builder) as a default.\n\nThis value is a recommendation as advertised by the daemon, and\nit is up to the client to choose which builder to use.\n", + "schema": { + "type": "string", + "default": "2" + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "default": "inactive" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "OK" + } + } + } + }, + "500": { + "description": "server error", + "headers": { + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + } + }, + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "System" + ] + }, + "head": { + "summary": "Ping", + "description": "This is a dummy endpoint you can use to test if the server is accessible.", + "operationId": "SystemPingHead", + "responses": { + "200": { + "description": "no error", + "headers": { + "Api-Version": { + "description": "Max API Version the server supports", + "schema": { + "type": "string" + } + }, + "Builder-Version": { + "description": "Default version of docker image builder", + "schema": { + "type": "string" + } + }, + "Docker-Experimental": { + "description": "If the server is running with experimental mode enabled", + "schema": { + "type": "boolean" + } + }, + "Swarm": { + "description": "Contains information about Swarm status of the daemon,\nand if the daemon is acting as a manager or worker node.\n", + "schema": { + "type": "string", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "default": "inactive" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + } + }, + "Pragma": { + "schema": { + "type": "string", + "default": "no-cache" + } + } + }, + "content": { + "text/plain": { + "schema": { + "type": "string", + "example": "(empty)" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "System" + ] + } + }, + "/commit": { + "post": { + "summary": "Create a new image from a container", + "operationId": "ImageCommit", + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "schema": { + "type": "string" + } + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "schema": { + "type": "string" + } + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "schema": { + "type": "string" + } + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerConfig" + } + } + }, + "description": "The container configuration" + }, + "tags": [ + "Image" + ] + } + }, + "/events": { + "get": { + "summary": "Monitor events", + "description": "Stream real-time events from the server.\n\nVarious objects within Docker report events when something happens to them.\n\nContainers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune`\n\nImages report these events: `create`, `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune`\n\nVolumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune`\n\nNetworks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune`\n\nThe Docker daemon reports these events: `reload`\n\nServices report these events: `create`, `update`, and `remove`\n\nNodes report these events: `create`, `update`, and `remove`\n\nSecrets report these events: `create`, `update`, and `remove`\n\nConfigs report these events: `create`, `update`, and `remove`\n\nThe Builder reports `prune` events\n", + "operationId": "SystemEvents", + "responses": { + "200": { + "description": "no error", + "content": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "schema": { + "type": "string" + } + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "System" + ] + } + }, + "/system/df": { + "get": { + "summary": "Get data usage information", + "operationId": "SystemDataUsage", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SystemDataUsageResponse", + "properties": { + "ImageUsage": { + "$ref": "#/components/schemas/ImagesDiskUsage" + }, + "ContainerUsage": { + "$ref": "#/components/schemas/ContainersDiskUsage" + }, + "VolumeUsage": { + "$ref": "#/components/schemas/VolumesDiskUsage" + }, + "BuildCacheUsage": { + "$ref": "#/components/schemas/BuildCacheDiskUsage" + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SystemDataUsageResponse", + "properties": { + "ImageUsage": { + "$ref": "#/components/schemas/ImagesDiskUsage" + }, + "ContainerUsage": { + "$ref": "#/components/schemas/ContainersDiskUsage" + }, + "VolumeUsage": { + "$ref": "#/components/schemas/VolumesDiskUsage" + }, + "BuildCacheUsage": { + "$ref": "#/components/schemas/BuildCacheDiskUsage" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "type", + "in": "query", + "description": "Object types, for which to compute and return data.\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "container", + "image", + "volume", + "build-cache" + ] + } + } + }, + { + "name": "verbose", + "in": "query", + "description": "Show detailed information on space usage.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "System" + ] + } + }, + "/images/{name}/get": { + "get": { + "summary": "Export an image", + "description": "Get a tarball containing all images and metadata for a repository.\n\nIf `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced.\n\n### Image tarball format\n\nAn image tarball contains [Content as defined in the OCI Image Layout Specification](https://github.com/opencontainers/image-spec/blob/v1.1.1/image-layout.md#content).\n\nAdditionally, includes the manifest.json file associated with a backwards compatible docker save format.\n\nIf the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs.\n\n```json\n{\n \"hello-world\": {\n \"latest\": \"565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1\"\n }\n}\n```\n", + "operationId": "ImageGet", + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform describing a platform which will be used\nto select a platform-specific image to be saved if the image is\nmulti-platform.\nIf not provided, the full multi-platform image will be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/get": { + "get": { + "summary": "Export several images", + "description": "Get a tarball containing all images and metadata for several image\nrepositories.\n\nFor each value of the `names` parameter: if it is a specific name and\ntag (e.g. `ubuntu:latest`), then only that image (and its parents) are\nreturned; if it is an image ID, similarly only that image (and its parents)\nare returned and there would be no names referenced in the 'repositories'\nfile for this image ID.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageGetAll", + "responses": { + "200": { + "description": "no error", + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to be saved if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "tags": [ + "Image" + ] + } + }, + "/images/load": { + "post": { + "summary": "Import images", + "description": "Load a set of images and tags into a repository.\n\nFor details on the format, see the [export image endpoint](#operation/ImageGet).\n", + "operationId": "ImageLoad", + "responses": { + "200": { + "description": "no error" + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to load if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be loaded.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "requestBody": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "Tar archive containing images" + }, + "tags": [ + "Image" + ] + } + }, + "/containers/{id}/exec": { + "post": { + "summary": "Create an exec instance", + "description": "Run a command inside a running container.", + "operationId": "ContainerExec", + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + } + }, + "404": { + "description": "no such container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + } + }, + "409": { + "description": "container is paused", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecConfig", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ], + "nullable": true + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is\na single character `[a-Z]` or `ctrl-` where ``\nis one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n" + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside\nthe container. Format is one of: `user`, `user:group`, `uid`,\nor `uid:gid`.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container.\n" + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + } + } + }, + "description": "Exec configuration", + "required": true + }, + "tags": [ + "Exec" + ] + } + }, + "/exec/{id}/start": { + "post": { + "summary": "Start an exec instance", + "description": "Starts a previously set up exec instance. If detach is true, this endpoint\nreturns immediately after starting the command. Otherwise, it sets up an\ninteractive session with the command.\n", + "operationId": "ExecStart", + "responses": { + "200": { + "description": "No error" + }, + "404": { + "description": "No such exec instance", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Container is stopped or paused", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecStartConfig", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command.", + "example": false + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY.", + "example": true + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ], + "nullable": true + } + } + } + } + } + }, + "tags": [ + "Exec" + ] + } + }, + "/exec/{id}/resize": { + "post": { + "summary": "Resize an exec instance", + "description": "Resize the TTY session used by an exec instance. This endpoint only works\nif `tty` was specified as part of creating and starting the exec instance.\n", + "operationId": "ExecResize", + "responses": { + "200": { + "description": "No error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "tags": [ + "Exec" + ] + } + }, + "/exec/{id}/json": { + "get": { + "summary": "Inspect an exec instance", + "description": "Return low-level information about an exec instance.", + "operationId": "ExecInspect", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecInspectResponse", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/components/schemas/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "examples": { + "response": { + "value": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + } + } + } + } + }, + "404": { + "description": "No such exec instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Exec" + ] + } + }, + "/volumes": { + "get": { + "summary": "List volumes", + "operationId": "VolumeList", + "responses": { + "200": { + "description": "Summary volume data that matches the query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeListResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "schema": { + "type": "string", + "format": "json" + } + } + ], + "tags": [ + "Volume" + ] + } + }, + "/volumes/create": { + "post": { + "summary": "Create a volume", + "operationId": "VolumeCreate", + "responses": { + "201": { + "description": "The volume was created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeCreateRequest" + } + } + }, + "description": "Volume configuration", + "required": true + }, + "tags": [ + "Volume" + ] + } + }, + "/volumes/{name}": { + "get": { + "summary": "Inspect a volume", + "operationId": "VolumeInspect", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + } + }, + "404": { + "description": "No such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Volume" + ] + }, + "put": { + "summary": "\"Update a volume. Valid only for Swarm cluster volumes\"\n", + "operationId": "VolumeUpdate", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such volume", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name or ID of the volume", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the volume being updated. This is required to\navoid conflicting writes. Found in the volume's `ClusterVolume`\nfield.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Volume configuration", + "properties": { + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + } + } + } + }, + "description": "The spec of the volume to update. Currently, only Availability may\nchange. All other fields must remain unchanged.\n" + }, + "tags": [ + "Volume" + ] + }, + "delete": { + "summary": "Remove a volume", + "description": "Instruct the driver to remove the volume.", + "operationId": "VolumeDelete", + "responses": { + "204": { + "description": "The volume was removed" + }, + "404": { + "description": "No such volume or volume driver", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Volume is in use and cannot be removed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Volume" + ] + } + }, + "/volumes/prune": { + "post": { + "summary": "Delete unused volumes", + "operationId": "VolumePrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n- `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "VolumePruneResponse", + "properties": { + "VolumesDeleted": { + "description": "Volumes that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Volume" + ] + } + }, + "/networks": { + "get": { + "summary": "List networks", + "description": "Returns a list of networks. For details on the format, see the\n[network inspect endpoint](#operation/NetworkInspect).\n\nNote that it uses a different, smaller representation of a network than\ninspecting a single network. For example, the list of containers attached\nto the network is not propagated in API versions 1.28 and up.\n", + "operationId": "NetworkList", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkSummary" + } + }, + "examples": { + "response": { + "value": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv4": true, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process\non the networks list.\n\nAvailable filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n networks that are not in use by a container. When set to `false`\n (or `0`), only networks that are in use by one or more\n containers are returned.\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Network" + ] + } + }, + "/networks/{id}": { + "get": { + "summary": "Inspect a network", + "operationId": "NetworkInspect", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkInspect" + } + } + } + }, + "404": { + "description": "Network not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Network" + ] + }, + "delete": { + "summary": "Remove a network", + "operationId": "NetworkDelete", + "responses": { + "204": { + "description": "No error" + }, + "403": { + "description": "operation not supported for pre-defined networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such network", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Network" + ] + } + }, + "/networks/create": { + "post": { + "summary": "Create a network", + "operationId": "NetworkCreate", + "responses": { + "201": { + "description": "Network created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden operation. This happens when trying to create a network named after a pre-defined network,\nor when trying to create an overlay network on a daemon which is not part of a Swarm cluster.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "plugin not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "NetworkCreateRequest", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "The network's name.", + "type": "string", + "example": "my_network" + }, + "Driver": { + "description": "Name of the network driver plugin to use.", + "type": "string", + "default": "bridge", + "example": "bridge" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level).\n", + "type": "string" + }, + "Internal": { + "description": "Restrict external access to the network.", + "type": "boolean" + }, + "Attachable": { + "description": "Globally scoped network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "example": true + }, + "Ingress": { + "description": "Ingress network is the network which provides the routing-mesh\nin swarm mode.\n", + "type": "boolean", + "example": false + }, + "ConfigOnly": { + "description": "Creates a config-only network. Config-only networks are placeholder\nnetworks for network configurations to be used by other networks.\nConfig-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "default": false, + "example": false + }, + "ConfigFrom": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigReference" + }, + { + "description": "Specifies the source which will provide the configuration for\nthis network. The specified network must be an existing\nconfig-only network; see ConfigOnly.\n" + } + ] + }, + "IPAM": { + "allOf": [ + { + "$ref": "#/components/schemas/IPAM" + }, + { + "description": "Optional custom IP scheme for the network." + } + ] + }, + "EnableIPv4": { + "description": "Enable IPv4 on the network.", + "type": "boolean", + "example": true + }, + "EnableIPv6": { + "description": "Enable IPv6 on the network.", + "type": "boolean", + "example": true + }, + "Options": { + "description": "Network specific options to be used by the drivers.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + } + }, + "description": "Network configuration", + "required": true + }, + "tags": [ + "Network" + ] + } + }, + "/networks/{id}/connect": { + "post": { + "summary": "Connect a container to a network", + "description": "The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container", + "operationId": "NetworkConnect", + "responses": { + "200": { + "description": "No error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Operation forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkConnectRequest" + } + } + }, + "required": true + }, + "tags": [ + "Network" + ] + } + }, + "/networks/{id}/disconnect": { + "post": { + "summary": "Disconnect a container from a network", + "operationId": "NetworkDisconnect", + "responses": { + "200": { + "description": "No error" + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Network or container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkDisconnectRequest" + } + } + }, + "required": true + }, + "tags": [ + "Network" + ] + } + }, + "/networks/prune": { + "post": { + "summary": "Delete unused networks", + "operationId": "NetworkPrune", + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "NetworkPruneResponse", + "properties": { + "NetworksDeleted": { + "description": "Networks that were deleted", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Network" + ] + } + }, + "/plugins": { + "get": { + "summary": "List plugins", + "operationId": "PluginList", + "description": "Returns information about installed plugins.", + "responses": { + "200": { + "description": "No error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plugin" + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the plugin list.\n\nAvailable filters:\n\n- `capability=`\n- `enable=|`\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/privileges": { + "get": { + "summary": "Get plugin privileges", + "operationId": "GetPluginPrivileges", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/pull": { + "post": { + "summary": "Install a plugin", + "operationId": "PluginPull", + "description": "Pulls and installs a plugin. After the plugin is installed, it can be\nenabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable).\n", + "responses": { + "204": { + "description": "no error" + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/PluginPrivilegeArray" + }, + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/json": { + "get": { + "summary": "Inspect a plugin", + "operationId": "PluginInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}": { + "delete": { + "summary": "Remove a plugin", + "operationId": "PluginDelete", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the\nplugin is in use by a container.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/enable": { + "post": { + "summary": "Enable a plugin", + "operationId": "PluginEnable", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "schema": { + "type": "integer", + "default": 0 + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/disable": { + "post": { + "summary": "Disable a plugin", + "operationId": "PluginDisable", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "plugin is not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force disable a plugin even if still in use.\n", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/upgrade": { + "post": { + "summary": "Upgrade a plugin", + "operationId": "PluginUpgrade", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/PluginPrivilegeArray" + }, + "tags": [ + "Plugin" + ] + } + }, + "/plugins/create": { + "post": { + "summary": "Create a plugin", + "operationId": "PluginCreate", + "responses": { + "204": { + "description": "no error" + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "Path to tar containing plugin rootfs and manifest" + }, + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/push": { + "post": { + "summary": "Push a plugin", + "operationId": "PluginPush", + "description": "Push a plugin to the registry.\n", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Plugin" + ] + } + }, + "/plugins/{name}/set": { + "post": { + "summary": "Configure a plugin", + "operationId": "PluginSet", + "parameters": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=1" + ] + } + } + } + }, + "responses": { + "204": { + "description": "No error" + }, + "404": { + "description": "Plugin not installed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Plugin" + ] + } + }, + "/nodes": { + "get": { + "summary": "List nodes", + "operationId": "NodeList", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `node.label=`\n- `role=`(`manager`|`worker`)`\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Node" + ] + } + }, + "/nodes/{id}": { + "get": { + "summary": "Inspect a node", + "operationId": "NodeInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Node" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Node" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Node" + ] + }, + "delete": { + "summary": "Delete a node", + "operationId": "NodeDelete", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Node" + ] + } + }, + "/nodes/{id}/update": { + "post": { + "summary": "Update a node", + "operationId": "NodeUpdate", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such node", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required\nto avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + } + } + }, + "tags": [ + "Node" + ] + } + }, + "/swarm": { + "get": { + "summary": "Inspect swarm", + "operationId": "SwarmInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + } + } + }, + "404": { + "description": "no such swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Swarm" + ] + } + }, + "/swarm/init": { + "post": { + "summary": "Initialize a new swarm", + "operationId": "SwarmInit", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "description": "The node ID", + "type": "string", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + }, + "text/plain": { + "schema": { + "description": "The node ID", + "type": "string", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmInitRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "type": "integer", + "format": "uint32" + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "type": "array", + "items": { + "type": "string", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "ForceNewCluster": { + "description": "Force creation of a new swarm.", + "type": "boolean" + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "type": "integer", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SwarmInitRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "type": "integer", + "format": "uint32" + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "type": "array", + "items": { + "type": "string", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "ForceNewCluster": { + "description": "Force creation of a new swarm.", + "type": "boolean" + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "type": "integer", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + }, + "required": true + }, + "tags": [ + "Swarm" + ] + } + }, + "/swarm/join": { + "post": { + "summary": "Join an existing swarm", + "operationId": "SwarmJoin", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is already part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmJoinRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP). This is\nrequired for joining a swarm. If the port number is omitted,\nthe default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "RemoteAddrs": { + "description": "Addresses of manager nodes already participating in the swarm.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "JoinToken": { + "description": "Secret token for joining this swarm.", + "type": "string" + } + }, + "required": [ + "ListenAddr", + "RemoteAddrs", + "JoinToken" + ], + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathAddr": "192.168.1.1", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SwarmJoinRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP). This is\nrequired for joining a swarm. If the port number is omitted,\nthe default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "RemoteAddrs": { + "description": "Addresses of manager nodes already participating in the swarm.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "JoinToken": { + "description": "Secret token for joining this swarm.", + "type": "string" + } + }, + "required": [ + "ListenAddr", + "RemoteAddrs", + "JoinToken" + ], + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathAddr": "192.168.1.1", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + }, + "required": true + }, + "tags": [ + "Swarm" + ] + } + }, + "/swarm/leave": { + "post": { + "summary": "Leave a swarm", + "operationId": "SwarmLeave", + "responses": { + "200": { + "description": "no error" + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "force", + "description": "Force leave swarm, even if this is the last manager or that it will\nbreak the cluster.\n", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Swarm" + ] + } + }, + "/swarm/update": { + "post": { + "summary": "Update a swarm", + "operationId": "SwarmUpdate", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + } + }, + "required": true + }, + "tags": [ + "Swarm" + ] + } + }, + "/swarm/unlockkey": { + "get": { + "summary": "Get the unlock key", + "operationId": "SwarmUnlockkey", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "UnlockKeyResponse", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "UnlockKeyResponse", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Swarm" + ] + } + }, + "/swarm/unlock": { + "post": { + "summary": "Unlock a locked manager", + "operationId": "SwarmUnlock", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmUnlockRequest", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "no error" + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Swarm" + ] + } + }, + "/services": { + "get": { + "summary": "List services", + "operationId": "ServiceList", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the services list.\n\nAvailable filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "query", + "description": "Include service status, with count of running and desired tasks.\n", + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "Service" + ] + } + }, + "/services/create": { + "post": { + "summary": "Create a service", + "operationId": "ServiceCreate", + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceCreateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "network is not eligible for services", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ], + "OomScoreAdj": 0 + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "required": true + }, + "tags": [ + "Service" + ] + } + }, + "/services/{id}": { + "get": { + "summary": "Inspect a service", + "operationId": "ServiceInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Service" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Service" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "tags": [ + "Service" + ] + }, + "delete": { + "summary": "Delete a service", + "operationId": "ServiceDelete", + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Service" + ] + } + }, + "/services/{id}/update": { + "post": { + "summary": "Update a service", + "operationId": "ServiceUpdate", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUpdateResponse" + } + } + } + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is\nrequired to avoid conflicting writes.\nThis version number should be the value as currently set on the\nservice *before* the update. You can find the current version by\ncalling `GET /services/{id}`\n", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the `X-Registry-Auth` header is not specified, this parameter\nindicates where to find registry authorization credentials.\n", + "schema": { + "type": "string", + "enum": [ + "spec", + "previous-spec" + ], + "default": "spec" + } + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback\nto the previous service spec. The supplied spec will be ignored in\nthis case.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ], + "OomScoreAdj": 0 + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + } + }, + "required": true + }, + "tags": [ + "Service" + ] + } + }, + "/services/{id}/logs": { + "get": { + "summary": "Get service logs", + "description": "Get `stdout` and `stderr` logs from a service. See also\n[`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "ServiceLogs", + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such service", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such service: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the service", + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "tags": [ + "Service" + ] + } + }, + "/tasks": { + "get": { + "summary": "List tasks", + "operationId": "TaskList", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Task" + }, + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ] + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the tasks list.\n\nAvailable filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Task" + ] + } + }, + "/tasks/{id}": { + "get": { + "summary": "Inspect a task", + "operationId": "TaskInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Task" + ] + } + }, + "/tasks/{id}/logs": { + "get": { + "summary": "Get task logs", + "description": "Get `stdout` and `stderr` logs from a task.\nSee also [`/containers/{id}/logs`](#operation/ContainerLogs).\n\n**Note**: This endpoint works only for services with the `local`,\n`json-file` or `journald` logging drivers.\n", + "operationId": "TaskLogs", + "responses": { + "200": { + "description": "logs returned as a stream in response body", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "no such task", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such task: c2ada9df5af8" + } + } + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the task", + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "tags": [ + "Task" + ] + } + }, + "/secrets": { + "get": { + "summary": "List secrets", + "operationId": "SecretList", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Secret" + }, + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the secrets list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a secret name (prefix match)\n- `names=` matches a secret name (exact match)\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Secret" + ] + } + }, + "/secrets/create": { + "post": { + "summary": "Create a secret", + "operationId": "SecretCreate", + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + } + }, + "tags": [ + "Secret" + ] + } + }, + "/secrets/{id}": { + "get": { + "summary": "Inspect a secret", + "operationId": "SecretInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Secret" + }, + "examples": { + "response": { + "value": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + } + } + } + } + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the secret", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Secret" + ] + }, + "delete": { + "summary": "Delete a secret", + "operationId": "SecretDelete", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "secret not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the secret", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Secret" + ] + } + }, + "/secrets/{id}/update": { + "post": { + "summary": "Update a Secret", + "operationId": "SecretUpdate", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such secret", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "description": "The spec of the secret to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[SecretInspect endpoint](#operation/SecretInspect) response values.\n" + }, + "tags": [ + "Secret" + ] + } + }, + "/configs": { + "get": { + "summary": "List configs", + "operationId": "ConfigList", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Config" + }, + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ] + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the configs list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a config name (prefix match)\n", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Config" + ] + } + }, + "/configs/create": { + "post": { + "summary": "Create a config", + "operationId": "ConfigCreate", + "responses": { + "201": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + } + }, + "409": { + "description": "name conflicts with an existing object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + } + }, + "tags": [ + "Config" + ] + } + }, + "/configs/{id}": { + "get": { + "summary": "Inspect a config", + "operationId": "ConfigInspect", + "responses": { + "200": { + "description": "no error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Config" + }, + "examples": { + "response": { + "value": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + } + } + } + } + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the config", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Config" + ] + }, + "delete": { + "summary": "Delete a config", + "operationId": "ConfigDelete", + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "config not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the config", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Config" + ] + } + }, + "/configs/{id}/update": { + "post": { + "summary": "Update a Config", + "operationId": "ConfigUpdate", + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "no such config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "node is not part of a swarm", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "description": "The spec of the config to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[ConfigInspect endpoint](#operation/ConfigInspect) response values.\n" + }, + "tags": [ + "Config" + ] + } + }, + "/distribution/{name}/json": { + "get": { + "summary": "Get image information from the registry", + "description": "Return image digest and platform information by contacting the registry.\n", + "operationId": "DistributionInspect", + "responses": { + "200": { + "description": "descriptor and platform information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DistributionInspect" + } + } + } + }, + "401": { + "description": "Failed authentication or no image found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: someimage (tag: latest)" + } + } + } + } + } + }, + "500": { + "description": "Server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Distribution" + ] + } + }, + "/session": { + "post": { + "summary": "Initialize interactive session", + "description": "Start a new interactive session with a server. Session allows server to\ncall back to the client for advanced capabilities.\n\n> **Deprecated**: This endpoint is deprecated and will be removed in a future version.\n> Server should support gRPC directly on the listening socket.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to HTTP2 transport that allows\nthe client to expose gPRC services on that connection.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /session HTTP/1.1\nUpgrade: h2c\nConnection: Upgrade\n```\n\nThe Docker daemon responds with a `101 UPGRADED` response follow with\nthe raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nConnection: Upgrade\nUpgrade: h2c\n```\n", + "operationId": "Session", + "responses": { + "101": { + "description": "no error, hijacking successful" + }, + "400": { + "description": "bad parameter", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "server error", + "content": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "tags": [ + "Session" + ] + } + } + }, + "servers": [ + { + "url": "/v1.56" + } + ], + "components": { + "requestBodies": { + "PluginPrivilegeArray": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + } + } + }, + "schemas": { + "ImageHistoryResponseItem": { + "type": "object", + "x-go-name": "HistoryResponseItem", + "title": "HistoryResponseItem", + "description": "individual image layer information in response to ImageHistory operation", + "required": [ + "Id", + "Created", + "CreatedBy", + "Tags", + "Size", + "Comment" + ], + "properties": { + "Id": { + "type": "string", + "nullable": false + }, + "Created": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "CreatedBy": { + "type": "string", + "nullable": false + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64", + "nullable": false + }, + "Comment": { + "type": "string", + "nullable": false + } + } + }, + "PortSummary": { + "type": "object", + "description": "Describes a port-mapping between the container and the host.\n", + "required": [ + "PrivatePort", + "Type" + ], + "properties": { + "IP": { + "type": "string", + "format": "ip-address", + "description": "Host IP address that the container's port is mapped to", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "PrivatePort": { + "type": "integer", + "format": "uint16", + "description": "Port on the container", + "nullable": false + }, + "PublicPort": { + "type": "integer", + "format": "uint16", + "description": "Port exposed on the host" + }, + "Type": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ], + "nullable": false + } + }, + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountType": { + "description": "The mount type. Available types:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.", + "type": "string", + "enum": [ + "bind", + "cluster", + "image", + "npipe", + "tmpfs", + "volume" + ], + "example": "volume" + }, + "MountPoint": { + "type": "object", + "description": "MountPoint represents a mount point configuration inside the container.\nThis is used for reporting the mountpoints in use by a container.\n", + "properties": { + "Type": { + "description": "The mount type:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.\n", + "allOf": [ + { + "$ref": "#/components/schemas/MountType" + } + ], + "example": "volume" + }, + "Name": { + "description": "Name is the name reference to the underlying data defined by `Source`\ne.g., the volume name.\n", + "type": "string", + "example": "myvolume" + }, + "Source": { + "description": "Source location of the mount.\n\nFor volumes, this contains the storage location of the volume (within\n`/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\nthe source (host) part of the bind-mount. For `tmpfs` mount points, this\nfield is empty.\n", + "type": "string", + "example": "/var/lib/docker/volumes/myvolume/_data" + }, + "Destination": { + "description": "Destination is the path relative to the container root (`/`) where\nthe `Source` is mounted inside the container.\n", + "type": "string", + "example": "/usr/share/nginx/html/" + }, + "Driver": { + "description": "Driver is the volume driver used to create the volume (if it is a volume).\n", + "type": "string", + "example": "local" + }, + "Mode": { + "description": "Mode is a comma separated list of options supplied by the user when\ncreating the bind/volume mount.\n\nThe default is platform-specific (`\"z\"` on Linux, empty on Windows).\n", + "type": "string", + "example": "z" + }, + "RW": { + "description": "Whether the mount is mounted writable (read-write).\n", + "type": "boolean", + "example": true + }, + "Propagation": { + "description": "Propagation describes how mounts are propagated from the host into the\nmount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)\nfor details. This field is not used on Windows.\n", + "type": "string", + "example": "" + } + } + }, + "DeviceMapping": { + "type": "object", + "description": "A device mapping between the host and container", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "DeviceRequest": { + "type": "object", + "description": "A request for devices to be sent to device drivers", + "properties": { + "Driver": { + "description": "The name of the device driver to use for this request.\n\nNote that if this is specified the capabilities are ignored when\nselecting a device driver.\n", + "type": "string", + "example": "nvidia" + }, + "Count": { + "type": "integer", + "example": -1 + }, + "DeviceIDs": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ] + }, + "Capabilities": { + "description": "A list of capabilities; an OR list of AND lists of capabilities.\n\nNote that if a driver is specified the capabilities have no effect on\nselecting a driver as the driver name is used directly.\n\nNote that if no driver is specified the capabilities are used to\nselect a driver with the required capabilities.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "gpu", + "nvidia", + "compute" + ] + ] + }, + "Options": { + "description": "Driver-specific options, specified as a key/value pairs. These options\nare passed directly to the driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "description": "Device path", + "type": "string" + }, + "Rate": { + "description": "Rate", + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "description": "Container path.", + "type": "string" + }, + "Source": { + "description": "Mount source (e.g. a volume name, a host path). The source cannot be\nspecified when using `Type=tmpfs`. For `Type=bind`, the source path\nmust either exist, or the `CreateMountpoint` must be set to `true` to\ncreate the source path on the host if missing.\n\nFor `Type=npipe`, the pipe must exist prior to creating the container.", + "type": "string" + }, + "Type": { + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container.\n- `cluster` a Swarm cluster volume\n- `image` Mounts an image.\n- `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container.\n- `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n", + "allOf": [ + { + "$ref": "#/components/schemas/MountType" + } + ] + }, + "ReadOnly": { + "description": "Whether the mount should be read-only.", + "type": "boolean" + }, + "Consistency": { + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`.", + "type": "string" + }, + "BindOptions": { + "description": "Optional configuration for the `bind` type.", + "type": "object", + "properties": { + "Propagation": { + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "type": "string", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + }, + "NonRecursive": { + "description": "Disable recursive bind mount.", + "type": "boolean", + "default": false + }, + "CreateMountpoint": { + "description": "Create mount point on host if missing", + "type": "boolean", + "default": false + }, + "ReadOnlyNonRecursive": { + "description": "Make the mount non-recursively read-only, but still leave the mount recursive\n(unless NonRecursive is set to `true` in conjunction).\n\nAdded in v1.44, before that version all read-only mounts were\nnon-recursive by default. To match the previous behaviour this\nwill default to `true` for clients on versions prior to v1.44.\n", + "type": "boolean", + "default": false + }, + "ReadOnlyForceRecursive": { + "description": "Raise an error if the mount cannot be made recursively read-only.", + "type": "boolean", + "default": false + } + } + }, + "VolumeOptions": { + "description": "Optional configuration for the `volume` type.", + "type": "object", + "properties": { + "NoCopy": { + "description": "Populate volume with data from the target.", + "type": "boolean", + "default": false + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "DriverConfig": { + "description": "Map of driver specific options", + "type": "object", + "properties": { + "Name": { + "description": "Name of the driver to use to create the volume.", + "type": "string" + }, + "Options": { + "description": "key/value map of driver specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "Subpath": { + "description": "Source path inside the volume. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-volume/subdirectory" + } + } + }, + "ImageOptions": { + "description": "Optional configuration for the `image` type.", + "type": "object", + "properties": { + "Subpath": { + "description": "Source path inside the image. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-image/subdirectory" + } + } + }, + "TmpfsOptions": { + "description": "Optional configuration for the `tmpfs` type.", + "type": "object", + "properties": { + "SizeBytes": { + "description": "The size for the tmpfs mount in bytes.", + "type": "integer", + "format": "int64" + }, + "Mode": { + "description": "The permission mode for the tmpfs mount in an integer.\nThe value must not be in octal format (e.g. 755) but rather\nthe decimal representation of the octal value (e.g. 493).\n", + "type": "integer" + }, + "Options": { + "description": "The options to be passed to the tmpfs mount. An array of arrays.\nFlag options should be provided as 1-length arrays. Other types\nshould be provided as as 2-length arrays, where the first item is\nthe key and the second the value.\n", + "type": "array", + "items": { + "type": "array", + "minItems": 1, + "maxItems": 2, + "items": { + "type": "string" + } + }, + "example": [ + [ + "noexec" + ] + ] + } + } + } + } + }, + "RestartPolicy": { + "description": "The behavior to apply when the container exits. The default is not to\nrestart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is\nadded before each restart to prevent flooding the server.\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `no` Do not automatically restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "no", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up.\n" + } + } + }, + "Resources": { + "description": "A container's resources (cgroups config, ulimits, etc)", + "type": "object", + "properties": { + "CpuShares": { + "description": "An integer value representing this container's relative CPU weight\nversus other containers.\n", + "type": "integer" + }, + "Memory": { + "description": "Memory limit in bytes.", + "type": "integer", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "description": "Path to `cgroups` under which the container's `cgroup` is created. If\nthe path is not absolute, the path is considered to be relative to the\n`cgroups` path of the init process. Cgroups are created if they do not\nalready exist.\n", + "type": "string" + }, + "BlkioWeight": { + "description": "Block IO weight (relative weight).", + "type": "integer", + "minimum": 0, + "maximum": 1000 + }, + "BlkioWeightDevice": { + "description": "Block IO weight (relative device weight) in the form:\n\n```\n[{\"Path\": \"device_path\", \"Weight\": weight}]\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "type": "integer", + "minimum": 0 + } + } + } + }, + "BlkioDeviceReadBps": { + "description": "Limit read rate (bytes per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "description": "Limit write rate (bytes per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "description": "Limit read rate (IO per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "description": "Limit write rate (IO per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "CpuPeriod": { + "description": "The length of a CPU period in microseconds.", + "type": "integer", + "format": "int64" + }, + "CpuQuota": { + "description": "Microseconds of CPU time that the container can get in a CPU period.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimePeriod": { + "description": "The length of a CPU real-time period in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpusetCpus": { + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n", + "type": "string", + "example": "0-3" + }, + "CpusetMems": { + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\neffective on NUMA systems.\n", + "type": "string" + }, + "Devices": { + "description": "A list of devices to add to the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "description": "a list of cgroup rules to apply to the container", + "type": "array", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DeviceRequests": { + "description": "A list of requests for devices to be sent to device drivers.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceRequest" + } + }, + "MemoryReservation": { + "description": "Memory soft limit in bytes.", + "type": "integer", + "format": "int64" + }, + "MemorySwap": { + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited\nswap.\n", + "type": "integer", + "format": "int64" + }, + "MemorySwappiness": { + "description": "Tune a container's memory swappiness behavior. Accepts an integer\nbetween 0 and 100.\n", + "type": "integer", + "format": "int64", + "minimum": 0, + "maximum": 100 + }, + "NanoCpus": { + "description": "CPU quota in units of 10-9 CPUs.", + "type": "integer", + "format": "int64" + }, + "OomKillDisable": { + "description": "Disable OOM Killer for the container.", + "type": "boolean" + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": "boolean", + "nullable": true + }, + "PidsLimit": { + "description": "Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\nto not change.\n", + "type": "integer", + "format": "int64", + "nullable": true + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example:\n\n```\n{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + }, + "CpuCount": { + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "CpuPercent": { + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "IOMaximumIOps": { + "description": "Maximum IOps for the container system drive (Windows only)", + "type": "integer", + "format": "int64" + }, + "IOMaximumBandwidth": { + "description": "Maximum IO in bytes per second for the container system drive\n(Windows only).\n", + "type": "integer", + "format": "int64" + } + } + }, + "Limit": { + "description": "An object describing a limit on resources which can be requested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "Pids": { + "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n", + "type": "integer", + "format": "int64", + "default": 0, + "example": 100 + } + } + }, + "ResourceObject": { + "description": "An object describing the resources which can be advertised by a node and\nrequested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + } + } + }, + "GenericResources": { + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`).\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + }, + "HealthConfig": { + "description": "A test to perform to check that the container is healthy.\nHealthcheck commands should be side-effect free.\n", + "type": "object", + "properties": { + "Test": { + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n\nA non-zero exit code indicates a failed healthcheck:\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (treated as unhealthy)\n- other values: error running probe\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "Timeout": { + "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n\nIf the health check command does not complete within this timeout,\nthe check is considered failed and the health check process is\nforcibly terminated without a graceful shutdown.\n", + "type": "integer", + "format": "int64" + }, + "Retries": { + "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n", + "type": "integer" + }, + "StartPeriod": { + "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "StartInterval": { + "description": "The time to wait between checks in nanoseconds during the start period.\nIt should be 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + } + } + }, + "Health": { + "description": "Health stores information about the container's healthcheck results.\n", + "type": "object", + "properties": { + "Status": { + "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n", + "type": "string", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + }, + "Log": { + "type": "array", + "description": "Log contains the last few results (oldest first)\n", + "items": { + "$ref": "#/components/schemas/HealthcheckResult" + } + } + }, + "nullable": true + }, + "HealthcheckResult": { + "description": "HealthcheckResult stores information about a single run of a healthcheck probe\n", + "type": "object", + "properties": { + "Start": { + "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2020-01-04T10:44:24.496525531Z" + }, + "End": { + "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2020-01-04T10:45:21.364524523Z" + }, + "ExitCode": { + "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n", + "type": "integer", + "example": 0 + }, + "Output": { + "description": "Output from last check", + "type": "string" + } + }, + "nullable": true + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written", + "example": "" + }, + "LogConfig": { + "type": "object", + "description": "The logging configuration for this container", + "properties": { + "Type": { + "description": "Name of the logging driver used for the container or \"none\"\nif logging is disabled.", + "type": "string", + "enum": [ + "local", + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "description": "Driver-specific configuration options for the logging driver.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "5", + "max-size": "10m" + } + } + } + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to the container.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.\n", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ], + "nullable": true + }, + "Annotations": { + "type": "object", + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n", + "additionalProperties": { + "type": "string" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "enum": [ + "private", + "host" + ], + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n" + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string", + "format": "ip-address", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n", + "additionalProperties": { + "type": "string" + } + }, + "Tmpfs": { + "type": "object", + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n", + "additionalProperties": { + "type": "string" + } + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "type": "integer", + "format": "int64", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "minimum": 0 + }, + "Sysctls": { + "type": "object", + "description": "A list of kernel parameters (sysctls) to set in the container.\n\nThis field is omitted if not set.", + "additionalProperties": { + "type": "string" + }, + "example": { + "net.ipv4.ip_forward": "1" + }, + "nullable": true + }, + "Runtime": { + "type": "string", + "description": "Runtime to use with this container.", + "nullable": true + }, + "Umask": { + "type": "integer", + "format": "uint32", + "description": "Set the initial umask for a Unix container.\n\nIf omitted, the daemon does not set a umask in the OCI process\nspecification, and the runtime's default behavior applies.\n\nJSON integers are decimal. For example, use `18` for the octal\numask `0022`, and `511` for the octal umask `0777`.", + "nullable": true + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/asound", + "/proc/acpi", + "/proc/kcore", + "/proc/keys", + "/proc/latency_stats", + "/proc/timer_list", + "/proc/timer_stats", + "/proc/sched_debug", + "/proc/scsi", + "/sys/firmware", + "/sys/devices/virtual/powercap" + ] + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/bus", + "/proc/fs", + "/proc/irq", + "/proc/sys", + "/proc/sysrq-trigger" + ] + } + } + } + ] + }, + "ContainerConfig": { + "description": "Configuration for a container that is portable between hosts.\n", + "type": "object", + "properties": { + "Hostname": { + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.\n", + "type": "string", + "example": "439f4e91bd1d" + }, + "Domainname": { + "description": "The domain name to use for the container.\n", + "type": "string" + }, + "User": { + "description": "Commands run as this user inside the container. If omitted, commands\nrun as the user specified in the image the container was started from.\n\nCan be either user-name or UID, and optional group-name or GID,\nseparated by a colon (`[<:group-name|GID>]`).", + "type": "string", + "example": "123:456" + }, + "AttachStdin": { + "description": "Whether to attach to `stdin`.", + "type": "boolean", + "default": false + }, + "AttachStdout": { + "description": "Whether to attach to `stdout`.", + "type": "boolean", + "default": true + }, + "AttachStderr": { + "description": "Whether to attach to `stderr`.", + "type": "boolean", + "default": true + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + }, + "nullable": true + }, + "Tty": { + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.\n", + "type": "boolean", + "default": false + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean", + "default": false + }, + "StdinOnce": { + "description": "Close `stdin` after one attached client disconnects", + "type": "boolean", + "default": false + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": "boolean", + "default": false, + "example": false, + "nullable": true + }, + "Image": { + "description": "The name (or reference) of the image to use when creating the container,\nor which was used when the container was created.\n", + "type": "string", + "example": "example-image:1.0" + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "NetworkDisabled": { + "description": "Disable networking for the container.", + "type": "boolean", + "nullable": true + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [], + "nullable": true + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": "string", + "example": "SIGTERM", + "nullable": true + }, + "StopTimeout": { + "description": "Timeout to stop a container in seconds. If omitted, the daemon-wide\ndefault (`default-stop-timeout`) is used.\n", + "type": "integer", + "nullable": true + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ], + "nullable": true + } + } + }, + "ImageConfig": { + "description": "Configuration of the image. These fields are used as defaults\nwhen starting a container from the image.\n", + "type": "object", + "properties": { + "User": { + "description": "The user that commands are run as inside the container.", + "type": "string", + "example": "web:web" + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + }, + "nullable": true + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": "boolean", + "default": false, + "example": false, + "nullable": true + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "/app/data": {}, + "/app/config": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [], + "nullable": true + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": "string", + "example": "SIGTERM", + "nullable": true + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ], + "nullable": true + } + } + }, + "NetworkingConfig": { + "description": "NetworkingConfig represents the container's networking configuration for\neach of its interfaces.\nIt is used for the networking configs specified in the `docker create`\nand `docker network connect` commands.\n", + "type": "object", + "properties": { + "EndpointsConfig": { + "description": "A mapping of network name to endpoint configuration for that network.\nThe endpoint configuration can be left empty to connect to that\nnetwork with no particular endpoint configuration.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + }, + "example": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "MacAddress": "02:42:ac:12:05:02", + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + }, + "NetworkSettings": { + "description": "NetworkSettings exposes the network settings in the API", + "type": "object", + "properties": { + "SandboxID": { + "description": "SandboxID uniquely represents a container's network stack.", + "type": "string", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "SandboxKey": { + "description": "SandboxKey is the full path of the netns handle", + "type": "string", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "Ports": { + "$ref": "#/components/schemas/PortMap" + }, + "Networks": { + "description": "Information about all networks that the container is connected to.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + } + }, + "Address": { + "description": "Address represents an IPv4 or IPv6 IP address.", + "type": "object", + "properties": { + "Addr": { + "description": "IP address.", + "type": "string" + }, + "PrefixLen": { + "description": "Mask length of the IP address.", + "type": "integer" + } + } + }, + "PortMap": { + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PortBinding" + }, + "nullable": true + }, + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ], + "2377/tcp": null + } + }, + "PortBinding": { + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n", + "type": "object", + "properties": { + "HostIp": { + "description": "Host IP address that the container's port is mapped to.", + "type": "string", + "example": "127.0.0.1", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "HostPort": { + "description": "Host port number that the container's port is mapped to.", + "type": "string", + "example": "4443" + } + } + }, + "DriverData": { + "description": "Information about the storage driver used to store the container's and\nimage's filesystem.\n", + "type": "object", + "required": [ + "Name", + "Data" + ], + "properties": { + "Name": { + "description": "Name of the storage driver.", + "type": "string", + "example": "overlay2", + "nullable": false + }, + "Data": { + "description": "Low-level storage metadata, provided as key/value pairs.\n\nThis information is driver-specific, and depends on the storage-driver\nin use, and should be used for informational purposes only.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + }, + "nullable": false + } + } + }, + "Storage": { + "description": "Information about the storage used by the container.\n", + "type": "object", + "properties": { + "RootFS": { + "allOf": [ + { + "$ref": "#/components/schemas/RootFSStorage" + }, + { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true + } + ] + } + } + }, + "RootFSStorage": { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorage", + "properties": { + "Snapshot": { + "allOf": [ + { + "$ref": "#/components/schemas/RootFSStorageSnapshot" + }, + { + "description": "Information about the snapshot used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true + } + ] + } + } + }, + "RootFSStorageSnapshot": { + "description": "Information about a snapshot backend of the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorageSnapshot", + "properties": { + "Name": { + "description": "Name of the snapshotter.", + "type": "string", + "nullable": false + } + } + }, + "FilesystemChange": { + "description": "Change in the container's filesystem.\n", + "type": "object", + "required": [ + "Path", + "Kind" + ], + "properties": { + "Path": { + "description": "Path to file or directory that has changed.\n", + "type": "string", + "nullable": false + }, + "Kind": { + "$ref": "#/components/schemas/ChangeType" + } + } + }, + "ChangeType": { + "description": "Kind of change\n\nCan be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "type": "integer", + "format": "uint8", + "enum": [ + 0, + 1, + 2 + ], + "nullable": false + }, + "ImageInspect": { + "description": "Information about an image in the local image cache.\n", + "type": "object", + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710", + "nullable": false + }, + "Descriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true + } + ] + }, + "Manifests": { + "description": "Manifests is a list of image manifests available in this image. It\nprovides a more detailed view of the platform-specific image manifests or\nother image-attached data like build attestations.\n\nOnly available if the daemon provides a multi-platform image store\nand the `manifests` option is set in the inspect request.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageManifestSummary" + }, + "nullable": true + }, + "Identity": { + "allOf": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "x-nullable": true + } + ] + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ] + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + }, + "Comment": { + "description": "Optional message that was set when committing or importing the image.\n", + "type": "string", + "example": "", + "nullable": true + }, + "Created": { + "description": "Date and time at which the image was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if present in the image,\nand omitted otherwise.\n", + "type": "string", + "format": "dateTime", + "example": "2022-02-04T21:20:12.497794809Z", + "nullable": true + }, + "Author": { + "description": "Name of the author that was specified when committing the image, or as\nspecified through MAINTAINER (deprecated) in the Dockerfile.\n", + "type": "string", + "example": "", + "nullable": true + }, + "Config": { + "$ref": "#/components/schemas/ImageConfig" + }, + "Architecture": { + "description": "Hardware CPU architecture that the image runs on.\n", + "type": "string", + "example": "arm", + "nullable": false + }, + "Variant": { + "description": "CPU architecture variant (presently ARM-only).\n", + "type": "string", + "example": "v7", + "nullable": true + }, + "Os": { + "description": "Operating System the image is built to run on.\n", + "type": "string", + "example": "linux", + "nullable": false + }, + "OsVersion": { + "description": "Operating System version the image is built to run on (especially\nfor Windows).\n", + "type": "string", + "example": "", + "nullable": true + }, + "Size": { + "description": "Total size of the image variant, including all layers it is composed of.\n\nFor multi-platform images, this is the size of the platform variant\nselected by the `platform` query parameter. If no platform is specified,\nthe daemon selects a platform as described in the `platform` parameter.\n\nWhen using the containerd image store, this includes both the image content\nthat's present locally and the unpacked snapshot data for the selected\nvariant.\n\nImage data may be shared between images, so this size does not indicate\nhow much space would be reclaimed by deleting the image.\n", + "type": "integer", + "format": "int64", + "example": 1239828, + "nullable": false + }, + "GraphDriver": { + "allOf": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "x-nullable": true + } + ] + }, + "RootFS": { + "description": "Information about the image's RootFS, including the layer IDs.\n", + "type": "object", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "example": "layers", + "nullable": false + }, + "Layers": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ] + } + } + }, + "Metadata": { + "description": "Additional metadata of the image in the local cache. This information\nis local to the daemon, and not part of the image itself.\n", + "type": "object", + "properties": { + "LastTagTime": { + "description": "Date and time at which the image was last tagged in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if the image was tagged locally,\nand omitted otherwise.\n", + "type": "string", + "format": "dateTime", + "example": "2022-02-28T14:40:02.623929178Z", + "nullable": true + } + } + } + } + }, + "Identity": { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "type": "object", + "properties": { + "Signature": { + "description": "Signature contains the properties of verified signatures for the image.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SignatureIdentity" + } + }, + "Pull": { + "description": "Pull contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.\nAfter successful push this images also contains the pushed repository location.", + "type": "array", + "items": { + "$ref": "#/components/schemas/PullIdentity" + } + }, + "Build": { + "description": "Build contains build reference information if image was created via build.", + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildIdentity" + } + } + } + }, + "BuildIdentity": { + "description": "BuildIdentity contains build reference information if image was created via build.", + "type": "object", + "properties": { + "Ref": { + "description": "Ref is the identifier for the build request. This reference can be used to\nlook up the build details in BuildKit history API.", + "type": "string" + }, + "CreatedAt": { + "description": "CreatedAt is the time when the build ran.", + "type": "string", + "format": "date-time" + } + } + }, + "PullIdentity": { + "description": "PullIdentity contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.", + "type": "object", + "properties": { + "Repository": { + "description": "Repository is the remote repository location the image was pulled from.", + "type": "string" + } + } + }, + "SignatureIdentity": { + "description": "SignatureIdentity contains the properties of verified signatures for the image.", + "type": "object", + "properties": { + "Name": { + "description": "Name is a textual description summarizing the type of signature.", + "type": "string" + }, + "Timestamps": { + "description": "Timestamps contains a list of verified signed timestamps for the signature.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SignatureTimestamp" + } + }, + "KnownSigner": { + "allOf": [ + { + "$ref": "#/components/schemas/KnownSignerIdentity" + }, + { + "description": "KnownSigner is an identifier for a special signer identity that is known to the implementation." + } + ] + }, + "DockerReference": { + "description": "DockerReference is the Docker image reference associated with the signature.\nThis is an optional field only present in older hashedrecord signatures.", + "type": "string" + }, + "Signer": { + "allOf": [ + { + "$ref": "#/components/schemas/SignerIdentity" + }, + { + "description": "Signer contains information about the signer certificate used to sign the image." + } + ] + }, + "SignatureType": { + "allOf": [ + { + "$ref": "#/components/schemas/SignatureType" + }, + { + "description": "SignatureType is the type of signature format. E.g. \"bundle-v0.3\" or \"hashedrecord\"." + } + ] + }, + "Error": { + "description": "Error contains error information if signature verification failed.\nOther fields will be empty in this case.", + "type": "string" + }, + "Warnings": { + "description": "Warnings contains any warnings that occurred during signature verification.\nFor example, if there was no internet connectivity and cached trust roots were used.\nWarning does not indicate a failed verification but may point to configuration issues.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SignatureTimestamp": { + "description": "SignatureTimestamp contains information about a verified signed timestamp for an image signature.", + "type": "object", + "properties": { + "Type": { + "$ref": "#/components/schemas/SignatureTimestampType" + }, + "URI": { + "type": "string" + }, + "Timestamp": { + "type": "string", + "format": "date-time" + } + } + }, + "SignatureTimestampType": { + "description": "SignatureTimestampType is the type of timestamp used in the signature.", + "type": "string", + "enum": [ + "Tlog", + "TimestampAuthority" + ] + }, + "SignatureType": { + "description": "SignatureType is the type of signature format.", + "type": "string", + "enum": [ + "bundle-v0.3", + "simplesigning-v1" + ] + }, + "KnownSignerIdentity": { + "description": "KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation.", + "type": "string", + "enum": [ + "DHI" + ] + }, + "SignerIdentity": { + "description": "SignerIdentity contains information about the signer certificate used to sign the image.", + "type": "object", + "properties": { + "CertificateIssuer": { + "type": "string", + "description": "CertificateIssuer is the certificate issuer." + }, + "SubjectAlternativeName": { + "type": "string", + "description": "SubjectAlternativeName is the certificate subject alternative name." + }, + "Issuer": { + "type": "string", + "description": "The OIDC issuer. Should match `iss` claim of ID token or, in the case of\na federated login like Dex it should match the issuer URL of the\nupstream issuer. The issuer is not set the extensions are invalid and\nwill fail to render." + }, + "BuildSignerURI": { + "type": "string", + "description": "Reference to specific build instructions that are responsible for signing." + }, + "BuildSignerDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the build instructions that is responsible for signing." + }, + "RunnerEnvironment": { + "type": "string", + "description": "Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure." + }, + "SourceRepositoryURI": { + "type": "string", + "description": "Source repository URL that the build was based on." + }, + "SourceRepositoryDigest": { + "type": "string", + "description": "Immutable reference to a specific version of the source code that the build was based upon." + }, + "SourceRepositoryRef": { + "type": "string", + "description": "Source Repository Ref that the build run was based upon." + }, + "SourceRepositoryIdentifier": { + "type": "string", + "description": "Immutable identifier for the source repository the workflow was based upon." + }, + "SourceRepositoryOwnerURI": { + "type": "string", + "description": "Source repository owner URL of the owner of the source repository that the build was based on." + }, + "SourceRepositoryOwnerIdentifier": { + "type": "string", + "description": "Immutable identifier for the owner of the source repository that the workflow was based upon." + }, + "BuildConfigURI": { + "type": "string", + "description": "Build Config URL to the top-level/initiating build instructions." + }, + "BuildConfigDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the top-level/initiating build instructions." + }, + "BuildTrigger": { + "type": "string", + "description": "Event or action that initiated the build." + }, + "RunInvocationURI": { + "type": "string", + "description": "Run Invocation URL to uniquely identify the build execution." + }, + "SourceRepositoryVisibilityAtSigning": { + "type": "string", + "description": "Source repository visibility at the time of signing the certificate." + } + } + }, + "ImageSummary": { + "type": "object", + "x-go-name": "Summary", + "required": [ + "Id", + "ParentId", + "RepoTags", + "RepoDigests", + "Created", + "Size", + "SharedSize", + "Labels", + "Containers" + ], + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710", + "nullable": false + }, + "ParentId": { + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "type": "string", + "example": "", + "nullable": false + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ], + "nullable": false + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ], + "nullable": false + }, + "Created": { + "description": "Date and time at which the image was created as a Unix timestamp\n(number of seconds since EPOCH).\n", + "type": "integer", + "example": "1644009612", + "nullable": false + }, + "Size": { + "description": "Total size of the image including all layers it is composed of.\n", + "type": "integer", + "format": "int64", + "example": 172064416, + "nullable": false + }, + "SharedSize": { + "description": "Total size of image layers that are shared between this image and other\nimages.\n\nThis size is not calculated by default. `-1` indicates that the value\nhas not been set / calculated.\n", + "type": "integer", + "format": "int64", + "example": 1239828, + "nullable": false + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "nullable": false + }, + "Containers": { + "description": "Number of containers using this image. Includes both stopped and running\ncontainers.\n\n`-1` indicates that the value has not been set / calculated.\n", + "type": "integer", + "example": 2, + "nullable": false + }, + "Manifests": { + "description": "Manifests is a list of manifests available in this image.\nIt provides a more detailed view of the platform-specific image manifests\nor other image-attached data like build attestations.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": "array", + "x-omitempty": true, + "items": { + "$ref": "#/components/schemas/ImageManifestSummary" + }, + "nullable": false + }, + "Descriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true + } + ] + } + } + }, + "ImagesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/image", + "description": "represents system data usage for image resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active images.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all images.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing unused images.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by images.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of image summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "AuthResponse": { + "description": "An identity token was generated successfully.\n", + "type": "object", + "required": [ + "Status" + ], + "properties": { + "Status": { + "description": "The status of the authentication", + "type": "string", + "example": "Login Succeeded", + "nullable": false + }, + "IdentityToken": { + "description": "An opaque token used to authenticate a user after a successful login", + "type": "string", + "example": "9cbaf023786cd7...", + "nullable": false + } + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "type": "object", + "required": [ + "Name", + "Driver", + "Mountpoint", + "Labels", + "Scope", + "Options" + ], + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "example": "tardis", + "nullable": false + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "example": "custom", + "nullable": false + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "example": "/var/lib/docker/volumes/tardis", + "nullable": false + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "description": "Date/Time the volume was created.", + "example": "2016-06-07T20:31:11.853781916Z" + }, + "Status": { + "type": "object", + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n", + "additionalProperties": { + "type": "object" + }, + "example": { + "hello": "world" + } + }, + "Labels": { + "type": "object", + "description": "User-defined key/value metadata.", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "nullable": false + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide,\nor `local` for machine level.\n", + "default": "local", + "enum": [ + "local", + "global" + ], + "example": "local", + "nullable": false + }, + "ClusterVolume": { + "$ref": "#/components/schemas/ClusterVolume" + }, + "Options": { + "type": "object", + "description": "The driver specific options used when creating the volume.\n", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "UsageData": { + "type": "object", + "x-go-name": "UsageData", + "required": [ + "Size", + "RefCount" + ], + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "properties": { + "Size": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n", + "nullable": false + }, + "RefCount": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n", + "nullable": false + } + }, + "nullable": true + } + }, + "nullable": false + }, + "VolumesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/volume", + "description": "represents system data usage for volume resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active volumes.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all volumes.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive volumes.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by volumes.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of volumes.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Volume" + } + } + } + } + }, + "VolumeCreateRequest": { + "description": "Volume configuration", + "type": "object", + "title": "VolumeConfig", + "x-go-name": "CreateRequest", + "properties": { + "Name": { + "description": "The new volume's name. If not specified, Docker generates a name.\n", + "type": "string", + "example": "tardis", + "nullable": false + }, + "Driver": { + "description": "Name of the volume driver to use.", + "type": "string", + "default": "local", + "example": "custom", + "nullable": false + }, + "DriverOpts": { + "description": "A mapping of driver options and values. These options are\npassed directly to the driver and are driver specific.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "ClusterVolumeSpec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + } + }, + "VolumeListResponse": { + "type": "object", + "title": "VolumeListResponse", + "x-go-name": "ListResponse", + "description": "Volume list response", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes.\n", + "items": { + "type": "string" + }, + "example": [] + } + } + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "description": "Name of the network.\n", + "type": "string", + "example": "my_network", + "x-omitempty": false + }, + "Id": { + "description": "ID that uniquely identifies a network on a single machine.\n", + "type": "string", + "x-go-name": "ID", + "x-omitempty": false, + "example": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99" + }, + "Created": { + "description": "Date and time at which the network was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "x-omitempty": false, + "x-go-type": { + "type": "Time", + "import": { + "package": "time" + }, + "hints": { + "nullable": false + } + }, + "example": "2016-10-19T04:33:30.360899459Z" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level)\n", + "type": "string", + "x-omitempty": false, + "example": "local" + }, + "Driver": { + "description": "The name of the driver used to create the network (e.g. `bridge`,\n`overlay`).\n", + "type": "string", + "x-omitempty": false, + "example": "overlay" + }, + "EnableIPv4": { + "description": "Whether the network was created with IPv4 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": true + }, + "EnableIPv6": { + "description": "Whether the network was created with IPv6 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": false + }, + "IPAM": { + "allOf": [ + { + "$ref": "#/components/schemas/IPAM" + }, + { + "description": "The network's IP Address Management.\n", + "x-nullable": false, + "x-omitempty": false + } + ] + }, + "Internal": { + "description": "Whether the network is created to only allow internal networking\nconnectivity.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false, + "nullable": false + }, + "Attachable": { + "description": "Whether a global / swarm scope network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false, + "nullable": false + }, + "Ingress": { + "description": "Whether the network is providing the routing-mesh for the swarm cluster.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false, + "nullable": false + }, + "ConfigFrom": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigReference" + }, + { + "x-nullable": false, + "x-omitempty": false + } + ] + }, + "ConfigOnly": { + "description": "Whether the network is a config-only network. Config-only networks are\nplaceholder networks for network configurations to be used by other\nnetworks. Config-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "nullable": false + }, + "Options": { + "description": "Network-specific options uses when creating the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "Metadata specific to the network being created.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Peers": { + "description": "List of peer nodes for an overlay network. This field is only present\nfor overlay networks, and omitted for other network types.\n", + "type": "array", + "x-omitempty": true, + "items": { + "$ref": "#/components/schemas/PeerInfo" + } + } + } + }, + "NetworkSummary": { + "description": "Network list response item", + "x-go-name": "Summary", + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Network" + } + ] + }, + "NetworkInspect": { + "description": "The body of the \"get network\" http response message.", + "x-go-name": "Inspect", + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Network" + } + ], + "properties": { + "Containers": { + "description": "Contains endpoints attached to the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "$ref": "#/components/schemas/EndpointResource" + }, + "example": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + } + }, + "Services": { + "description": "List of services using the network. This field is only present for\nswarm scope networks, and omitted for local scope networks.\n", + "type": "object", + "x-omitempty": true, + "additionalProperties": { + "x-go-type": { + "type": "ServiceInfo", + "hints": { + "nullable": false + } + } + } + }, + "Status": { + "allOf": [ + { + "$ref": "#/components/schemas/NetworkStatus" + }, + { + "description": "provides runtime information about the network such as the number of allocated IPs.\n" + } + ] + } + } + }, + "NetworkStatus": { + "description": "provides runtime information about the network such as the number of allocated IPs.\n", + "type": "object", + "x-go-name": "Status", + "properties": { + "IPAM": { + "$ref": "#/components/schemas/IPAMStatus" + } + } + }, + "ServiceInfo": { + "x-omitempty": false, + "description": "represents service parameters with the list of service's tasks\n", + "type": "object", + "properties": { + "VIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Ports": { + "type": "array", + "x-omitempty": false, + "items": { + "type": "string" + } + }, + "LocalLBIndex": { + "type": "integer", + "format": "int", + "x-omitempty": false, + "x-go-type": { + "type": "int" + } + }, + "Tasks": { + "type": "array", + "x-omitempty": false, + "items": { + "$ref": "#/components/schemas/NetworkTaskInfo" + } + } + }, + "nullable": false + }, + "NetworkTaskInfo": { + "x-omitempty": false, + "x-go-name": "Task", + "description": "carries the information about one backend task\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false + }, + "EndpointID": { + "type": "string", + "x-omitempty": false + }, + "EndpointIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Info": { + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + } + } + }, + "nullable": false + }, + "ConfigReference": { + "x-omitempty": false, + "description": "The config-only network source to provide the configuration for\nthis network.\n", + "type": "object", + "properties": { + "Network": { + "description": "The name of the config-only network that provides the network's\nconfiguration. The specified network must be an existing config-only\nnetwork. Only network names are allowed, not network IDs.\n", + "type": "string", + "x-omitempty": false, + "example": "config_only_network_01" + } + }, + "nullable": false + }, + "IPAM": { + "type": "object", + "x-omitempty": false, + "properties": { + "Driver": { + "description": "Name of the IPAM driver to use.", + "type": "string", + "default": "default", + "example": "default" + }, + "Config": { + "description": "List of IPAM configuration options, specified as a map:\n\n```\n{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/IPAMConfig" + } + }, + "Options": { + "description": "Driver-specific options, specified as a map.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + } + }, + "nullable": false + }, + "IPAMConfig": { + "type": "object", + "properties": { + "Subnet": { + "type": "string", + "example": "172.20.0.0/16" + }, + "IPRange": { + "type": "string", + "example": "172.20.10.0/24" + }, + "Gateway": { + "type": "string", + "example": "172.20.10.11" + }, + "AuxiliaryAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "IPAMStatus": { + "type": "object", + "x-omitempty": false, + "properties": { + "Subnets": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SubnetStatus" + }, + "example": { + "172.16.0.0/16": { + "IPsInUse": 3, + "DynamicIPsAvailable": 65533 + }, + "2001:db8:abcd:0012::0/96": { + "IPsInUse": 5, + "DynamicIPsAvailable": 4294967291 + } + }, + "x-go-type": { + "type": "SubnetStatuses", + "kind": "map" + } + } + }, + "nullable": false + }, + "SubnetStatus": { + "type": "object", + "x-omitempty": false, + "properties": { + "IPsInUse": { + "description": "Number of IP addresses in the subnet that are in use or reserved and are therefore unavailable for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + }, + "DynamicIPsAvailable": { + "description": "Number of IP addresses within the network's IPRange for the subnet that are available for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + } + }, + "nullable": false + }, + "EndpointResource": { + "type": "object", + "description": "contains network resources allocated and used for a container in a network.\n", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false, + "example": "container_1" + }, + "EndpointID": { + "type": "string", + "x-omitempty": false, + "example": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" + }, + "MacAddress": { + "type": "string", + "x-omitempty": false, + "example": "02:42:ac:13:00:02", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "IPv4Address": { + "type": "string", + "x-omitempty": false, + "example": "172.19.0.2/16", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "x-omitempty": false, + "example": "", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + } + } + }, + "PeerInfo": { + "description": "represents one peer of an overlay network.\n", + "type": "object", + "properties": { + "Name": { + "description": "ID of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "6869d7c1732b" + }, + "IP": { + "description": "IP-address of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "10.133.77.91", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "nullable": false + }, + "NetworkCreateResponse": { + "description": "OK response to NetworkCreate operation", + "type": "object", + "title": "NetworkCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warning" + ], + "properties": { + "Id": { + "description": "The ID of the created network.", + "type": "string", + "example": "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d", + "nullable": false + }, + "Warning": { + "description": "Warnings encountered when creating the container", + "type": "string", + "example": "", + "nullable": false + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + }, + "aux": { + "$ref": "#/components/schemas/ImageID" + } + } + }, + "BuildCache": { + "type": "object", + "description": "BuildCache contains information about a build cache record.\n", + "properties": { + "ID": { + "type": "string", + "description": "Unique ID of the build cache record.\n", + "example": "ndlpt0hhvkqcdfkputsk4cq9c" + }, + "Parents": { + "description": "List of parent build cache record IDs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "hw53o5aio51xtltp5xjp8v7fx" + ], + "nullable": true + }, + "Type": { + "type": "string", + "description": "Cache record type.\n", + "example": "regular", + "enum": [ + "internal", + "frontend", + "source.local", + "source.git.checkout", + "exec.cachemount", + "regular" + ] + }, + "Description": { + "type": "string", + "description": "Description of the build-step that produced the build cache.\n", + "example": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + }, + "InUse": { + "type": "boolean", + "description": "Indicates if the build cache is in use.\n", + "example": false + }, + "Shared": { + "type": "boolean", + "description": "Indicates if the build cache is shared.\n", + "example": true + }, + "Size": { + "description": "Amount of disk space used by the build cache (in bytes).\n", + "type": "integer", + "example": 51 + }, + "CreatedAt": { + "description": "Date and time at which the build cache was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "LastUsedAt": { + "description": "Date and time at which the build cache was last used in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z", + "nullable": true + }, + "UsageCount": { + "type": "integer", + "example": 26 + } + } + }, + "BuildCacheDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/build", + "description": "represents system data usage for build cache resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active build cache records.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all build cache records.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive build cache records.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by build cache records.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of build cache records.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "CacheRecord" + } + } + } + } + }, + "ImageID": { + "type": "object", + "description": "Image ID or Digest", + "properties": { + "ID": { + "type": "string" + } + }, + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "DeviceInfo": { + "type": "object", + "description": "DeviceInfo represents a device that can be used by a container.\n", + "properties": { + "Source": { + "type": "string", + "example": "cdi", + "description": "The origin device driver.\n" + }, + "ID": { + "type": "string", + "example": "vendor.com/gpu=0", + "description": "The unique identifier for the device within its source driver.\nFor CDI devices, this would be an FQDN like \"vendor.com/gpu=0\".\n" + } + } + }, + "NRIInfo": { + "description": "Information about the Node Resource Interface (NRI).\n\nThis field is only present if NRI is enabled.\n", + "type": "object", + "properties": { + "Info": { + "description": "Information about NRI, provided as \"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "plugin-path", + "/opt/docker/nri/plugins" + ] + ] + } + }, + "nullable": true + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "description": "Represents an error.", + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "description": "The error message.", + "type": "string", + "nullable": false + } + }, + "example": { + "message": "Something went wrong." + } + }, + "IDResponse": { + "description": "Response to an API call that returns just an Id", + "type": "object", + "x-go-name": "IDResponse", + "required": [ + "Id" + ], + "properties": { + "Id": { + "description": "The id of the newly created object.", + "type": "string", + "nullable": false + } + } + }, + "NetworkConnectRequest": { + "description": "NetworkConnectRequest represents the data to be used to connect a container to a network.\n", + "type": "object", + "x-go-name": "ConnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network.", + "example": "3613f73ba0e4", + "nullable": false + }, + "EndpointConfig": { + "allOf": [ + { + "$ref": "#/components/schemas/EndpointSettings" + }, + { + "x-nullable": true + } + ] + } + } + }, + "NetworkDisconnectRequest": { + "description": "NetworkDisconnectRequest represents the data to be used to disconnect a container from a network.\n", + "type": "object", + "x-go-name": "DisconnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network.", + "example": "3613f73ba0e4", + "nullable": false + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network.", + "default": false, + "x-omitempty": false, + "example": false, + "nullable": false + } + } + }, + "EndpointSettings": { + "description": "Configuration for a network endpoint.", + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/components/schemas/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "container_1", + "container_2" + ] + }, + "MacAddress": { + "description": "MAC address for the endpoint on this network. The network driver might ignore this parameter.\n", + "type": "string", + "example": "02:42:ac:11:00:04", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "server_x", + "server_y" + ] + }, + "DriverOpts": { + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "nullable": true + }, + "GwPriority": { + "description": "This property determines which endpoint will provide the default\ngateway for a container. The endpoint with the highest priority will\nbe used. If multiple endpoints have the same priority, endpoints are\nlexicographically sorted based on their network name, and the one\nthat sorts first is picked.\n", + "type": "integer", + "format": "int64", + "example": [ + 10 + ] + }, + "NetworkID": { + "description": "Unique ID of the network.\n", + "type": "string", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "type": "string", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "description": "Gateway address for this network.\n", + "type": "string", + "example": "172.17.0.1" + }, + "IPAddress": { + "description": "IPv4 address.\n", + "type": "string", + "example": "172.17.0.4", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPPrefixLen": { + "description": "Mask length of the IPv4 address.\n", + "type": "integer", + "example": 16 + }, + "IPv6Gateway": { + "description": "IPv6 gateway address.\n", + "type": "string", + "example": "2001:db8:2::100", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6Address": { + "description": "Global IPv6 address.\n", + "type": "string", + "example": "2001:db8::5689", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6PrefixLen": { + "description": "Mask length of the global IPv6 address.\n", + "type": "integer", + "format": "int64", + "example": 64 + }, + "DNSNames": { + "description": "List of all DNS names an endpoint has on a specific network. This\nlist is based on the container name, network aliases, container short\nID, and hostname.\n\nThese DNS names are non-fully qualified but can contain several dots.\nYou can get fully qualified DNS names by appending `.`.\nFor instance, if container name is `my.ctr` and the network is named\n`testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be\n`my.ctr.testnet`.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "foobar", + "server_x", + "server_y", + "my.ctr" + ] + } + } + }, + "EndpointIPAMConfig": { + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "type": "object", + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "LinkLocalIPs": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "example": [ + "169.254.34.68", + "fe80::3468" + ] + } + }, + "nullable": true + }, + "PluginMount": { + "type": "object", + "x-go-name": "Mount", + "required": [ + "Name", + "Description", + "Settable", + "Source", + "Destination", + "Type", + "Options" + ], + "properties": { + "Name": { + "type": "string", + "example": "some-mount", + "nullable": false + }, + "Description": { + "type": "string", + "example": "This is a mount that's used by the plugin.", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "example": "/mnt/state", + "nullable": false + }, + "Type": { + "type": "string", + "example": "bind", + "nullable": false + }, + "Options": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "rbind", + "rw" + ] + } + }, + "nullable": false + }, + "PluginDevice": { + "type": "object", + "x-go-name": "Device", + "required": [ + "Name", + "Description", + "Settable", + "Path" + ], + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + }, + "nullable": false + }, + "PluginEnv": { + "type": "object", + "x-go-name": "Env", + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "type": "string", + "nullable": false + }, + "Description": { + "type": "string", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + }, + "nullable": false + }, + "PluginPrivilege": { + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n", + "type": "object", + "x-go-name": "Privilege", + "properties": { + "Name": { + "type": "string", + "example": "network" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "host" + ] + } + } + }, + "Plugin": { + "description": "A plugin for the Engine API", + "type": "object", + "x-go-name": "Plugin", + "required": [ + "Settings", + "Enabled", + "Config", + "Name" + ], + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "example": "tiborvass/sample-volume-plugin", + "nullable": false + }, + "Enabled": { + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "type": "boolean", + "example": true, + "nullable": false + }, + "Settings": { + "description": "user-configurable settings for the plugin.", + "type": "object", + "x-go-name": "Settings", + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=0" + ] + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "nullable": false + }, + "PluginReference": { + "description": "plugin remote reference used to push/pull the plugin", + "type": "string", + "x-go-name": "PluginReference", + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest", + "nullable": false + }, + "Config": { + "description": "The config of a plugin.", + "type": "object", + "x-go-name": "Config", + "required": [ + "Description", + "Documentation", + "Interface", + "Entrypoint", + "WorkDir", + "Network", + "Linux", + "PidHost", + "PropagatedMount", + "IpcHost", + "Mounts", + "Env", + "Args" + ], + "properties": { + "Description": { + "type": "string", + "example": "A sample volume plugin for Docker", + "nullable": false + }, + "Documentation": { + "type": "string", + "example": "https://docs.docker.com/engine/extend/plugins/", + "nullable": false + }, + "Interface": { + "description": "The interface between Docker and the plugin", + "type": "object", + "x-go-name": "Interface", + "required": [ + "Types", + "Socket" + ], + "properties": { + "Types": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "CapabilityID" + } + }, + "example": [ + "docker.volumedriver/1.0" + ] + }, + "Socket": { + "type": "string", + "example": "plugins.sock", + "nullable": false + }, + "ProtocolScheme": { + "type": "string", + "example": "some.protocol/v1.0", + "description": "Protocol to use for clients connecting to the plugin.", + "enum": [ + "", + "moby.plugins.http/v1" + ] + } + }, + "nullable": false + }, + "Entrypoint": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ] + }, + "WorkDir": { + "type": "string", + "example": "/bin/", + "nullable": false + }, + "User": { + "type": "object", + "x-go-name": "User", + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + }, + "nullable": false + }, + "Network": { + "type": "object", + "x-go-name": "NetworkConfig", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "example": "host", + "nullable": false + } + }, + "nullable": false + }, + "Linux": { + "type": "object", + "x-go-name": "LinuxConfig", + "required": [ + "Capabilities", + "AllowAllDevices", + "Devices" + ], + "properties": { + "Capabilities": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ] + }, + "AllowAllDevices": { + "type": "boolean", + "example": false, + "nullable": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + }, + "nullable": false + }, + "PropagatedMount": { + "type": "string", + "example": "/mnt/volumes", + "nullable": false + }, + "IpcHost": { + "type": "boolean", + "example": false, + "nullable": false + }, + "PidHost": { + "type": "boolean", + "example": false, + "nullable": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginEnv" + }, + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Settable": null, + "Value": "0" + } + ] + }, + "Args": { + "type": "object", + "x-go-name": "Args", + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "type": "string", + "example": "args", + "nullable": false + }, + "Description": { + "type": "string", + "example": "command line arguments", + "nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "nullable": false + }, + "rootfs": { + "type": "object", + "x-go-name": "RootFS", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ] + } + } + } + }, + "nullable": false + } + } + }, + "ObjectVersion": { + "description": "The version number of the object such as node, service, etc. This is needed\nto avoid conflicting writes. The client must send the version number along\nwith the modified specification when updating these objects.\n\nThis approach ensures safe concurrency and determinism in that the change\non the object may not be applied if the version number has changed from the\nlast read. In other words, if two update requests specify the same base\nversion, only one of the requests can succeed. As a result, two separate\nupdate requests that happen at the same time will not unintentionally\noverwrite each other.\n", + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + } + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "description": "Name for the node.", + "type": "string", + "example": "my-node" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Role": { + "description": "Role of the node.", + "type": "string", + "enum": [ + "worker", + "manager" + ], + "example": "manager" + }, + "Availability": { + "description": "Availability of the node.", + "type": "string", + "enum": [ + "active", + "pause", + "drain" + ], + "example": "active" + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/NodeSpec" + }, + "Description": { + "$ref": "#/components/schemas/NodeDescription" + }, + "Status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/components/schemas/ManagerStatus" + } + } + }, + "NodeDescription": { + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n", + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/components/schemas/Platform" + }, + "Resources": { + "$ref": "#/components/schemas/ResourceObject" + }, + "Engine": { + "$ref": "#/components/schemas/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + } + } + }, + "Platform": { + "description": "Platform represents the platform (Arch/OS).\n", + "type": "object", + "properties": { + "Architecture": { + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "type": "string", + "example": "x86_64" + }, + "OS": { + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "type": "string", + "example": "linux" + } + } + }, + "EngineDescription": { + "description": "EngineDescription provides information about an engine.", + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ] + } + } + }, + "TLSInfo": { + "description": "Information about the issuer of leaf TLS certificates and the trusted root\nCA certificate.\n", + "type": "object", + "properties": { + "TrustRoot": { + "description": "The root CA certificate(s) that are used to validate leaf TLS\ncertificates.\n", + "type": "string" + }, + "CertIssuerSubject": { + "description": "The base64-url-safe-encoded raw subject bytes of the issuer.", + "type": "string" + }, + "CertIssuerPublicKey": { + "description": "The base64-url-safe-encoded raw public key bytes of the issuer.\n", + "type": "string" + } + }, + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n", + "type": "object", + "properties": { + "State": { + "$ref": "#/components/schemas/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "description": "IP address of the node.", + "type": "string", + "example": "172.17.0.2" + } + } + }, + "NodeState": { + "description": "NodeState represents the state of a node.", + "type": "string", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ], + "example": "ready" + }, + "ManagerStatus": { + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "type": "object", + "properties": { + "Leader": { + "type": "boolean", + "default": false, + "example": true + }, + "Reachability": { + "$ref": "#/components/schemas/Reachability" + }, + "Addr": { + "description": "The IP address and port at which the manager is reachable.\n", + "type": "string", + "example": "10.0.0.46:2377" + } + }, + "nullable": true + }, + "Reachability": { + "description": "Reachability represents the reachability of a node.", + "type": "string", + "enum": [ + "unknown", + "unreachable", + "reachable" + ], + "example": "reachable" + }, + "SwarmSpec": { + "description": "User modifiable swarm configuration.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the swarm.", + "type": "string", + "example": "default" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "description": "Orchestration configuration.", + "type": "object", + "properties": { + "TaskHistoryRetentionLimit": { + "description": "The number of historic tasks to keep per instance or node. If\nnegative, never remove completed or failed tasks.\n", + "type": "integer", + "format": "int64", + "example": 10 + } + }, + "nullable": true + }, + "Raft": { + "description": "Raft configuration.", + "type": "object", + "properties": { + "SnapshotInterval": { + "description": "The number of log entries between snapshots.", + "type": "integer", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "description": "The number of snapshots to keep beyond the current snapshot.\n", + "type": "integer", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "description": "The number of log entries to keep around to sync up slow followers\nafter a snapshot is created.\n", + "type": "integer", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "description": "The number of ticks that a follower will wait for a message from\nthe leader before becoming a candidate and starting an election.\n`ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 3 + }, + "HeartbeatTick": { + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks,\nthe leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 1 + } + } + }, + "Dispatcher": { + "description": "Dispatcher configuration.", + "type": "object", + "properties": { + "HeartbeatPeriod": { + "description": "The delay for an agent to send a heartbeat to the dispatcher.\n", + "type": "integer", + "format": "int64", + "example": 5000000000 + } + }, + "nullable": true + }, + "CAConfig": { + "description": "CA configuration.", + "type": "object", + "properties": { + "NodeCertExpiry": { + "description": "The duration node certificates are issued for.", + "type": "integer", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "description": "Configuration for forwarding signing requests to an external\ncertificate authority.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "description": "Protocol for communication with the external CA (currently\nonly `cfssl` is supported).\n", + "type": "string", + "enum": [ + "cfssl" + ], + "default": "cfssl" + }, + "URL": { + "description": "URL where certificate signing requests should be sent.\n", + "type": "string" + }, + "Options": { + "description": "An object with key/value pairs that are interpreted as\nprotocol-specific options for the external CA driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CACert": { + "description": "The root CA certificate (in PEM format) this external CA uses\nto issue TLS certificates (assumed to be to the current swarm\nroot CA certificate if not provided).\n", + "type": "string" + } + } + } + }, + "SigningCACert": { + "description": "The desired signing CA certificate for all swarm node TLS leaf\ncertificates, in PEM format.\n", + "type": "string" + }, + "SigningCAKey": { + "description": "The desired signing CA key for all swarm node TLS leaf certificates,\nin PEM format.\n", + "type": "string" + }, + "ForceRotate": { + "description": "An integer whose purpose is to force swarm to generate a new\nsigning CA certificate and key, if none have been specified in\n`SigningCACert` and `SigningCAKey`\n", + "format": "uint64", + "type": "integer" + } + }, + "nullable": true + }, + "EncryptionConfig": { + "description": "Parameters related to encryption-at-rest.", + "type": "object", + "properties": { + "AutoLockManagers": { + "description": "If set, generate a key and use it to lock data stored on the\nmanagers.\n", + "type": "boolean", + "example": false + } + } + }, + "TaskDefaults": { + "description": "Defaults for creating tasks in this cluster.", + "type": "object", + "properties": { + "LogDriver": { + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n", + "type": "object", + "properties": { + "Name": { + "description": "The log driver to use as a default for new tasks.\n", + "type": "string", + "example": "json-file" + }, + "Options": { + "description": "Driver-specific options for the selected log driver, specified\nas key/value pairs.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "10", + "max-size": "100m" + } + } + } + } + } + } + } + }, + "ClusterInfo": { + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "type": "object", + "properties": { + "ID": { + "description": "The ID of the swarm.", + "type": "string", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + }, + "RootRotationInProgress": { + "description": "Whether there is currently a root CA rotation in progress for the swarm\n", + "type": "boolean", + "example": false + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nIf no port is set or is set to 0, the default port (4789) is used.\n", + "type": "integer", + "format": "uint32", + "default": 4789, + "example": 4789 + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global scope\nnetworks.\n", + "type": "array", + "items": { + "type": "string", + "format": "CIDR", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created from the\ndefault subnet pool.\n", + "type": "integer", + "format": "uint32", + "maximum": 29, + "default": 24, + "example": 24 + } + }, + "nullable": true + }, + "JoinTokens": { + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n", + "type": "object", + "properties": { + "Worker": { + "description": "The token workers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "description": "The token managers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "Swarm": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/components/schemas/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "description": "User modifiable task configuration.", + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Name": { + "description": "The name or 'alias' to use for the plugin.", + "type": "string" + }, + "Remote": { + "description": "The plugin image reference to use.", + "type": "string" + }, + "Disabled": { + "description": "Disable the plugin once scheduled.", + "type": "boolean" + }, + "PluginPrivilege": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "ContainerSpec": { + "type": "object", + "description": "Container spec for the service.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Image": { + "description": "The image name to use for the container", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value data.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Command": { + "description": "The command to be run in the image.", + "type": "array", + "items": { + "type": "string" + } + }, + "Args": { + "description": "Arguments to the command.", + "type": "array", + "items": { + "type": "string" + } + }, + "Hostname": { + "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n", + "type": "string" + }, + "Env": { + "description": "A list of environment variables in the form `VAR=value`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Dir": { + "description": "The working directory for commands to run in.", + "type": "string" + }, + "User": { + "description": "The user inside the container.", + "type": "string" + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "description": "Security options for the container", + "properties": { + "CredentialSpec": { + "type": "object", + "description": "CredentialSpec for managed service account (Windows only)", + "properties": { + "Config": { + "type": "string", + "example": "0bt9dmxjvjiqermk6xrop3ekq", + "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "File": { + "type": "string", + "example": "spec.json", + "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + } + } + }, + "SELinuxContext": { + "type": "object", + "description": "SELinux labels of the container", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + } + }, + "Seccomp": { + "type": "object", + "description": "Options for configuring seccomp on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "unconfined", + "custom" + ] + }, + "Profile": { + "description": "The custom seccomp profile as a json object", + "type": "string" + } + } + }, + "AppArmor": { + "type": "object", + "description": "Options for configuring AppArmor on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "disabled" + ] + } + } + }, + "NoNewPrivileges": { + "type": "boolean", + "description": "Configuration of the no_new_privs bit in the container" + } + } + }, + "TTY": { + "description": "Whether a pseudo-TTY should be allocated.", + "type": "boolean" + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean" + }, + "ReadOnly": { + "description": "Mount the container's root filesystem as read only.", + "type": "boolean" + }, + "Mounts": { + "description": "Specification for mounts to be added to containers created as part\nof the service.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "StopSignal": { + "description": "Signal to stop the container.", + "type": "string" + }, + "StopGracePeriod": { + "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n", + "type": "integer", + "format": "int64" + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n", + "type": "object", + "properties": { + "Nameservers": { + "description": "The IP addresses of the name servers.", + "type": "array", + "items": { + "type": "string" + } + }, + "Search": { + "description": "A search list for host-name lookup.", + "type": "array", + "items": { + "type": "string" + } + }, + "Options": { + "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Secrets": { + "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "SecretID": { + "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n", + "type": "string" + }, + "SecretName": { + "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "OomScoreAdj": { + "type": "integer", + "format": "int64", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 0 + }, + "Configs": { + "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "Runtime": { + "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n", + "type": "object" + }, + "ConfigID": { + "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n", + "type": "string" + }, + "ConfigName": { + "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service.\n(Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": "boolean", + "nullable": true + }, + "Sysctls": { + "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CapabilityAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW", + "CAP_SYS_ADMIN", + "CAP_SYS_CHROOT", + "CAP_SYSLOG" + ] + }, + "CapabilityDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW" + ] + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + } + } + }, + "NetworkAttachmentSpec": { + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "type": "object", + "properties": { + "ContainerID": { + "description": "ID of the container represented by this task", + "type": "string" + } + } + }, + "Resources": { + "description": "Resource requirements which apply to each individual container created\nas part of the service.\n", + "type": "object", + "properties": { + "Limits": { + "allOf": [ + { + "$ref": "#/components/schemas/Limit" + }, + { + "description": "Define resources limits." + } + ] + }, + "Reservations": { + "allOf": [ + { + "$ref": "#/components/schemas/ResourceObject" + }, + { + "description": "Define resources reservation." + } + ] + }, + "SwapBytes": { + "description": "Amount of swap in bytes - can only be used together with a memory limit.\nIf not specified, the default behaviour is to grant a swap space twice\nas big as the memory limit.\nSet to -1 to enable unlimited swap.\n", + "type": "integer", + "format": "int64", + "minimum": -1, + "x-omitempty": true, + "nullable": true + }, + "MemorySwappiness": { + "description": "Tune the service's containers' memory swappiness (0 to 100).\nIf not specified, defaults to the containers' OS' default, generally 60,\nor whatever value was predefined in the image.\nSet to -1 to unset a previously set value.\n", + "type": "integer", + "format": "int64", + "minimum": -1, + "maximum": 100, + "x-omitempty": true, + "nullable": true + } + } + }, + "RestartPolicy": { + "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n", + "type": "object", + "properties": { + "Condition": { + "description": "Condition for restart.", + "type": "string", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "description": "Delay between restart attempts.", + "type": "integer", + "format": "int64" + }, + "MaxAttempts": { + "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Window": { + "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n", + "type": "integer", + "format": "int64", + "default": 0 + } + } + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production", + "node.platform.os==linux", + "node.platform.arch==x86_64" + ] + }, + "Preferences": { + "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "description": "label descriptor, such as `engine.labels.az`.\n", + "type": "string" + } + } + } + } + }, + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ] + }, + "MaxReplicas": { + "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Platforms": { + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Platform" + } + } + } + }, + "ForceUpdate": { + "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n", + "type": "integer", + "format": "uint64" + }, + "Runtime": { + "description": "Runtime is the type of runtime specified for the task executor.\n", + "type": "string" + }, + "Networks": { + "description": "Specifies which networks the service should attach to.", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "LogDriver": { + "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "ContainerStatus": { + "type": "object", + "description": "represents the status of a container.", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + } + }, + "PortStatus": { + "type": "object", + "description": "represents the port status of a task's host ports whose service has published host ports", + "properties": { + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + } + }, + "TaskStatus": { + "type": "object", + "description": "represents the status of a task.", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/components/schemas/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "$ref": "#/components/schemas/ContainerStatus" + }, + "PortStatus": { + "$ref": "#/components/schemas/PortStatus" + } + } + }, + "NetworkAttachment": { + "description": "Specifies how a task is attached to a network, and the addresses the\ntask was assigned on that network.\n", + "type": "object", + "properties": { + "Network": { + "$ref": "#/components/schemas/Network" + }, + "Addresses": { + "description": "The IP addresses (in CIDR notation) assigned to the task on this\nnetwork. To maintain backward compatibility this field accepts CIDR\nnotation, but only the IP address is used.\n", + "type": "array", + "items": { + "type": "string", + "format": "cidr" + } + } + }, + "example": { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1" + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "description": "The ID of the task.", + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "description": "Name of the task.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Spec": { + "$ref": "#/components/schemas/TaskSpec" + }, + "ServiceID": { + "description": "The ID of the service this task is part of.", + "type": "string" + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "description": "The ID of the node that this task is on.", + "type": "string" + }, + "AssignedGenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "Status": { + "$ref": "#/components/schemas/TaskStatus" + }, + "DesiredState": { + "$ref": "#/components/schemas/TaskState" + }, + "JobIteration": { + "allOf": [ + { + "$ref": "#/components/schemas/ObjectVersion" + }, + { + "description": "If the Service this Task belongs to is a job-mode service, contains\nthe JobIteration of the Service this Task was created for. Absent if\nthe Task was created for a Replicated or Global Service.\n" + } + ] + }, + "NetworksAttachments": { + "description": "The networks that this task is attached to, and the addresses the\ntask was assigned on each of them.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachment" + } + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "description": "User modifiable configuration for a service.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the service.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "TaskTemplate": { + "$ref": "#/components/schemas/TaskSpec" + }, + "Mode": { + "description": "Scheduling mode for the service.", + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object" + }, + "ReplicatedJob": { + "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n", + "type": "object", + "properties": { + "MaxConcurrent": { + "description": "The maximum number of replicas to run simultaneously.\n", + "type": "integer", + "format": "int64", + "default": 1 + }, + "TotalCompletions": { + "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n", + "type": "integer", + "format": "int64" + } + } + }, + "GlobalJob": { + "description": "The mode used for services which run a task to the completed state\non each valid node.\n", + "type": "object" + } + } + }, + "UpdateConfig": { + "description": "Specification for the update strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between updates, in nanoseconds.", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n", + "type": "string", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "RollbackConfig": { + "description": "Specification for the rollback strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between rollback iterations, in nanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n", + "type": "string", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "Networks": { + "description": "Specifies which networks the service should attach to.\n\nDeprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "EndpointSpec": { + "$ref": "#/components/schemas/EndpointSpec" + } + } + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "TargetPort": { + "description": "The port inside the container.", + "type": "integer" + }, + "PublishedPort": { + "description": "The port on the swarm hosts.", + "type": "integer" + }, + "PublishMode": { + "description": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "type": "string", + "enum": [ + "ingress", + "host" + ], + "default": "ingress", + "example": "ingress" + } + } + }, + "EndpointSpec": { + "description": "Properties that can be configured to access and load balance a service.", + "type": "object", + "properties": { + "Mode": { + "description": "The mode of resolution to use for internal load balancing between tasks.\n", + "type": "string", + "enum": [ + "vip", + "dnsrr" + ], + "default": "vip" + }, + "Ports": { + "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + } + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "description": "The status of a service update.", + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + } + }, + "ServiceStatus": { + "description": "The status of the service's tasks. Provided only when requested as\npart of a ServiceList operation.\n", + "type": "object", + "properties": { + "RunningTasks": { + "description": "The number of tasks for the service currently in the Running state.\n", + "type": "integer", + "format": "uint64", + "example": 7 + }, + "DesiredTasks": { + "description": "The number of tasks for the service desired to be running.\nFor replicated services, this is the replica count from the\nservice spec. For global services, this is computed by taking\ncount of all tasks for the service with a Desired State other\nthan Shutdown.\n", + "type": "integer", + "format": "uint64", + "example": 10 + }, + "CompletedTasks": { + "description": "The number of tasks for a job that are in the Completed state.\nThis field must be cross-referenced with the service type, as the\nvalue of 0 may mean the service is not in a job mode, or it may\nmean the job-mode service has no tasks yet Completed.\n", + "type": "integer", + "format": "uint64" + } + } + }, + "JobStatus": { + "description": "The status of the service when it is in one of ReplicatedJob or\nGlobalJob modes. Absent on Replicated and Global mode services. The\nJobIteration is an ObjectVersion, but unlike the Service's version,\ndoes not need to be sent with an update request.\n", + "type": "object", + "properties": { + "JobIteration": { + "allOf": [ + { + "$ref": "#/components/schemas/ObjectVersion" + }, + { + "description": "JobIteration is a value increased each time a Job is executed,\nsuccessfully or otherwise. \"Executed\", in this case, means the\njob as a whole has been started, not that an individual Task has\nbeen launched. A job is \"Executed\" when its ServiceSpec is\nupdated. JobIteration can be used to disambiguate Tasks belonging\nto different executions of a job. Though JobIteration will\nincrease with each subsequent execution, it may not necessarily\nincrease by 1, and so JobIteration should not be used to\n" + } + ] + }, + "LastExecution": { + "description": "The last time, as observed by the server, that this job was\nstarted.\n", + "type": "string", + "format": "dateTime" + } + } + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "x-go-name": "DeleteResponse", + "properties": { + "Untagged": { + "description": "The image ID of an image that was untagged", + "type": "string" + }, + "Deleted": { + "description": "The image ID of an image that was deleted", + "type": "string" + } + } + }, + "ServiceCreateResponse": { + "type": "object", + "description": "contains the information returned to a client on the\ncreation of a new service.\n", + "properties": { + "ID": { + "description": "The ID of the created service.", + "type": "string", + "example": "ak7w3gjqoa3kuz8xcpnyy0pvl", + "nullable": false + }, + "Warnings": { + "description": "Optional warning message.\n\nFIXME(thaJeztah): this should have \"omitempty\" in the generated type.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ], + "nullable": true + } + } + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "description": "Optional warning messages", + "type": "array", + "items": { + "type": "string" + } + } + }, + "example": { + "Warnings": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + }, + "ContainerInspectResponse": { + "type": "object", + "title": "ContainerInspectResponse", + "x-go-name": "InspectResponse", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Created": { + "description": "Date and time at which the container was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.", + "type": "string", + "format": "dateTime", + "example": "2025-02-17T17:43:39.64001363Z", + "nullable": true + }, + "Path": { + "description": "The path to the command being run", + "type": "string", + "example": "/bin/sh" + }, + "Args": { + "description": "The arguments to the command being run", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "-c", + "exit 9" + ] + }, + "State": { + "$ref": "#/components/schemas/ContainerState" + }, + "Image": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ResolvConfPath": { + "description": "Location of the `/etc/resolv.conf` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf" + }, + "HostnamePath": { + "description": "Location of the `/etc/hostname` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname" + }, + "HostsPath": { + "description": "Location of the `/etc/hosts` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts" + }, + "LogPath": { + "description": "Location of the file used to buffer the container's logs. Depending on\nthe logging-driver used for the container, this field may be omitted.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log", + "nullable": true + }, + "Name": { + "description": "The name associated with this container.\n\nFor historic reasons, the name may be prefixed with a forward-slash (`/`).", + "type": "string", + "example": "/funny_chatelet" + }, + "RestartCount": { + "description": "Number of times the container was restarted since it was created,\nor since daemon was started.", + "type": "integer", + "example": 0 + }, + "Driver": { + "description": "The storage-driver used for the container's filesystem (graph-driver\nor snapshotter).", + "type": "string", + "example": "overlayfs" + }, + "Platform": { + "description": "The platform (operating system) for which the container was created.\n\nThis field was introduced for the experimental \"LCOW\" (Linux Containers\nOn Windows) features, which has been removed. In most cases, this field\nis equal to the host's operating system (`linux` or `windows`).", + "type": "string", + "example": "linux" + }, + "ImageManifestDescriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store." + } + ] + }, + "MountLabel": { + "description": "SELinux mount label set for the container.", + "type": "string", + "example": "" + }, + "ProcessLabel": { + "description": "SELinux process label set for the container.", + "type": "string", + "example": "" + }, + "AppArmorProfile": { + "description": "The AppArmor profile set for the container.", + "type": "string", + "example": "" + }, + "ExecIDs": { + "description": "IDs of exec instances that are running in the container.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ], + "nullable": true + }, + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "GraphDriver": { + "allOf": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "x-nullable": true + } + ] + }, + "Storage": { + "allOf": [ + { + "$ref": "#/components/schemas/Storage" + }, + { + "x-nullable": true + } + ] + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "example": "122880", + "nullable": true + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "example": "1653948416", + "nullable": true + }, + "Mounts": { + "description": "List of mounts used by the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/components/schemas/NetworkSettings" + } + } + }, + "ContainerSummary": { + "type": "object", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Names": { + "description": "The names associated with this container. Most containers have a single\nname, but when using legacy \"links\", the container can have multiple\nnames.\n\nFor historic reasons, names are prefixed with a forward-slash (`/`).", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/funny_chatelet" + ] + }, + "Image": { + "description": "The name or ID of the image used to create the container.\n\nThis field shows the image reference as was specified when creating the container,\nwhich can be in its canonical form (e.g., `docker.io/library/ubuntu:latest`\nor `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`),\nshort form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`).\n\nThe content of this field can be updated at runtime if the image used to\ncreate the container is untagged, in which case the field is updated to\ncontain the the image ID (digest) it was resolved to in its canonical,\nnon-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`).", + "type": "string", + "example": "docker.io/library/ubuntu:latest" + }, + "ImageID": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ImageManifestDescriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "x-nullable": true, + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store.\n\nThis field is not populated in the `GET /system/df` endpoint.\n" + } + ] + }, + "Command": { + "description": "Command to run when starting the container", + "type": "string", + "example": "/bin/bash" + }, + "Created": { + "description": "Date and time at which the container was created as a Unix timestamp\n(number of seconds since EPOCH).", + "type": "integer", + "format": "int64", + "example": "1739811096" + }, + "Ports": { + "description": "Port-mappings for the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/PortSummary" + } + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "example": "122880", + "nullable": true + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "example": "1653948416", + "nullable": true + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + } + }, + "State": { + "description": "The state of this container.\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "exited", + "removing", + "dead" + ], + "example": "running" + }, + "Status": { + "description": "Additional human-readable status of this container (e.g. `Exit 0`)", + "type": "string", + "example": "Up 4 days" + }, + "HostConfig": { + "type": "object", + "description": "Summary of host-specific runtime information of the container. This\nis a reduced set of information in the container's \"HostConfig\" as\navailable in the container \"inspect\" response.", + "properties": { + "NetworkMode": { + "description": "Networking mode (`host`, `none`, `container:`) or name of the\nprimary network the container is using.\n\nThis field is primarily for backward compatibility. The container\ncan be connected to multiple networks for which information can be\nfound in the `NetworkSettings.Networks` field, which enumerates\nsettings per network.", + "type": "string", + "example": "mynetwork" + }, + "Annotations": { + "description": "Arbitrary key-value metadata attached to the container.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "io.kubernetes.docker.type": "container", + "io.kubernetes.sandbox.id": "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" + }, + "nullable": true + } + } + }, + "NetworkSettings": { + "description": "Summary of the container's network settings", + "type": "object", + "properties": { + "Networks": { + "type": "object", + "description": "Summary of network-settings for each network the container is\nattached to.", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + } + }, + "Mounts": { + "type": "array", + "description": "List of mounts used by the container.", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Health": { + "type": "object", + "description": "Summary of health status\n\nAdded in v1.52, before that version all container summary not include Health.\nAfter this attribute introduced, it includes containers with no health checks configured,\nor containers that are not running with none", + "properties": { + "Status": { + "type": "string", + "description": "the health status of the container", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + } + } + } + } + }, + "ContainersDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/container", + "description": "represents system data usage information for container resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active containers.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all containers.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive containers.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by containers.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of container summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "Driver": { + "description": "Driver represents a driver (network, logging, secrets).", + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "Name of the driver.", + "type": "string", + "example": "some-driver", + "nullable": false + }, + "Options": { + "description": "Key/value map of driver-specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + }, + "nullable": false + } + } + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the secret.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "description": "Data is the data to store as a secret, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nIt must be empty if the Driver field is set, in which case the data is\nloaded from an external secret store. The maximum allowed size is 500KB,\nas defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize).\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "type": "string", + "example": "" + }, + "Driver": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Name of the secrets driver used to fetch the secret's value from an\nexternal secret store.\n" + } + ] + }, + "Templating": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n" + } + ] + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the config.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Data": { + "description": "Data is the data to store as a config, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nThe maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize).\n", + "type": "string" + }, + "Templating": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n" + } + ] + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "ContainerState": { + "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command.\n", + "type": "object", + "properties": { + "Status": { + "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ], + "example": "running" + }, + "Running": { + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "type": "boolean", + "example": true + }, + "Paused": { + "description": "Whether this container is paused.", + "type": "boolean", + "example": false + }, + "Restarting": { + "description": "Whether this container is restarting.", + "type": "boolean", + "example": false + }, + "OOMKilled": { + "description": "Whether a process within this container has been killed because it ran\nout of memory since the container was last started.\n", + "type": "boolean", + "example": false + }, + "Dead": { + "type": "boolean", + "example": false + }, + "Pid": { + "description": "The process ID of this container", + "type": "integer", + "example": 1234 + }, + "ExitCode": { + "description": "The last exit code of this container", + "type": "integer", + "example": 0 + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "description": "The time when this container was last started.", + "type": "string", + "example": "2020-01-06T09:06:59.461876391Z" + }, + "FinishedAt": { + "description": "The time when this container last exited.", + "type": "string", + "example": "2020-01-06T09:07:59.461876391Z" + }, + "Health": { + "$ref": "#/components/schemas/Health" + } + }, + "nullable": true + }, + "ContainerCreateResponse": { + "description": "OK response to ContainerCreate operation", + "type": "object", + "title": "ContainerCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warnings" + ], + "properties": { + "Id": { + "description": "The ID of the created container", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", + "nullable": false + }, + "Warnings": { + "description": "Warnings encountered when creating the container", + "type": "array", + "items": { + "type": "string" + }, + "example": [], + "nullable": false + } + } + }, + "ContainerUpdateResponse": { + "type": "object", + "title": "ContainerUpdateResponse", + "x-go-name": "UpdateResponse", + "description": "Response for a successful container-update.", + "properties": { + "Warnings": { + "type": "array", + "description": "Warnings encountered when updating the container.", + "items": { + "type": "string" + }, + "example": [ + "Published ports are discarded when using host network mode" + ] + } + } + }, + "ContainerStatsResponse": { + "description": "Statistics sample for a container.\n", + "type": "object", + "x-go-name": "StatsResponse", + "title": "ContainerStatsResponse", + "properties": { + "id": { + "description": "ID of the container for which the stats were collected.\n", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", + "nullable": true + }, + "name": { + "description": "Name of the container for which the stats were collected.\n", + "type": "string", + "example": "boring_wozniak", + "nullable": true + }, + "os_type": { + "description": "OSType is the OS of the container (\"linux\" or \"windows\") to allow\nplatform-specific handling of stats.\n", + "type": "string", + "example": "linux", + "nullable": true + }, + "read": { + "description": "Date and time at which this sample was collected.\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:22.165243637Z" + }, + "cpu_stats": { + "$ref": "#/components/schemas/ContainerCPUStats" + }, + "memory_stats": { + "$ref": "#/components/schemas/ContainerMemoryStats" + }, + "networks": { + "description": "Network statistics for the container per interface.\n\nThis field is omitted if the container has no networking enabled.\n", + "additionalProperties": { + "$ref": "#/components/schemas/ContainerNetworkStats" + }, + "example": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + }, + "nullable": true + }, + "pids_stats": { + "$ref": "#/components/schemas/ContainerPidsStats" + }, + "blkio_stats": { + "$ref": "#/components/schemas/ContainerBlkioStats" + }, + "num_procs": { + "description": "The number of processors on the system.\n\nThis field is Windows-specific and always zero for Linux containers.\n", + "type": "integer", + "format": "uint32", + "example": 16 + }, + "storage_stats": { + "$ref": "#/components/schemas/ContainerStorageStats" + }, + "preread": { + "description": "Date and time at which this first sample was collected. This field\nis not propagated if the \"one-shot\" option is set. If the \"one-shot\"\noption is set, this field may be omitted, empty, or set to a default\ndate (`0001-01-01T00:00:00Z`).\n\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:21.160452595Z" + }, + "precpu_stats": { + "$ref": "#/components/schemas/ContainerCPUStats" + } + } + }, + "ContainerBlkioStats": { + "description": "BlkioStats stores all IO service stats for data read and write.\n\nThis type is Linux-specific and holds many fields that are specific to cgroups v1.\nOn a cgroup v2 host, all fields other than `io_service_bytes_recursive`\nare omitted or `null`.\n\nThis type is only populated on Linux and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "BlkioStats", + "properties": { + "io_service_bytes_recursive": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_serviced_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "io_queue_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "io_service_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "io_wait_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "io_merged_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "io_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + }, + "sectors_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + }, + "nullable": true + } + }, + "example": { + "io_service_bytes_recursive": [ + { + "major": 254, + "minor": 0, + "op": "read", + "value": 7593984 + }, + { + "major": 254, + "minor": 0, + "op": "write", + "value": 100 + } + ], + "io_serviced_recursive": null, + "io_queue_recursive": null, + "io_service_time_recursive": null, + "io_wait_time_recursive": null, + "io_merged_recursive": null, + "io_time_recursive": null, + "sectors_recursive": null + }, + "nullable": true + }, + "ContainerBlkioStatEntry": { + "description": "Blkio stats entry.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "BlkioStatEntry", + "properties": { + "major": { + "type": "integer", + "format": "uint64", + "example": 254 + }, + "minor": { + "type": "integer", + "format": "uint64", + "example": 0 + }, + "op": { + "type": "string", + "example": "read" + }, + "value": { + "type": "integer", + "format": "uint64", + "example": 7593984 + } + }, + "nullable": true + }, + "ContainerCPUStats": { + "description": "CPU related info of the container\n", + "type": "object", + "x-go-name": "CPUStats", + "properties": { + "cpu_usage": { + "$ref": "#/components/schemas/ContainerCPUUsage" + }, + "system_cpu_usage": { + "description": "System Usage.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 5, + "nullable": true + }, + "online_cpus": { + "description": "Number of online CPUs.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint32", + "example": 5, + "nullable": true + }, + "throttling_data": { + "$ref": "#/components/schemas/ContainerThrottlingData" + } + }, + "nullable": true + }, + "ContainerCPUUsage": { + "description": "All CPU stats aggregated since container inception.\n", + "type": "object", + "x-go-name": "CPUUsage", + "properties": { + "total_usage": { + "description": "Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows).\n", + "type": "integer", + "format": "uint64", + "example": 29912000 + }, + "percpu_usage": { + "description": "Total CPU time (in nanoseconds) consumed per core (Linux).\n\nThis field is Linux-specific when using cgroups v1. It is omitted\nwhen using cgroups v2 and Windows containers.\n", + "type": "array", + "items": { + "type": "integer", + "format": "uint64", + "example": 29912000 + }, + "nullable": true + }, + "usage_in_kernelmode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 21994000 + }, + "usage_in_usermode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 7918000 + } + }, + "nullable": true + }, + "ContainerPidsStats": { + "description": "PidsStats contains Linux-specific stats of a container's process-IDs (PIDs).\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "PidsStats", + "properties": { + "current": { + "description": "Current is the number of PIDs in the cgroup.\n", + "type": "integer", + "format": "uint64", + "example": 5, + "nullable": true + }, + "limit": { + "description": "Limit is the hard limit on the number of pids in the cgroup.\nA \"Limit\" of 0 means that there is no limit.\n", + "type": "integer", + "format": "uint64", + "example": "18446744073709551615", + "nullable": true + } + }, + "nullable": true + }, + "ContainerThrottlingData": { + "description": "CPU throttling stats of the container.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "ThrottlingData", + "properties": { + "periods": { + "description": "Number of periods with throttling active.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_periods": { + "description": "Number of periods when the container hit its throttling limit.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_time": { + "description": "Aggregated time (in nanoseconds) the container was throttled for.\n", + "type": "integer", + "format": "uint64", + "example": 0 + } + }, + "nullable": true + }, + "ContainerMemoryStats": { + "description": "Aggregates all memory stats since container inception on Linux.\nWindows returns stats for commit and private working set only.\n", + "type": "object", + "x-go-name": "MemoryStats", + "properties": { + "usage": { + "description": "Current `res_counter` usage for memory.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + }, + "max_usage": { + "description": "Maximum usage ever recorded.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + }, + "stats": { + "description": "All the stats exported via memory.stat.\n\nThe fields in this object differ between cgroups v1 and v2.\nOn cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available.\nOn cgroups v2, fields such as `file`, `anon`, `inactive_file` are available.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "uint64", + "nullable": true + }, + "example": { + "active_anon": 1572864, + "active_file": 5115904, + "anon": 1572864, + "anon_thp": 0, + "file": 7626752, + "file_dirty": 0, + "file_mapped": 2723840, + "file_writeback": 0, + "inactive_anon": 0, + "inactive_file": 2510848, + "kernel_stack": 16384, + "pgactivate": 0, + "pgdeactivate": 0, + "pgfault": 2042, + "pglazyfree": 0, + "pglazyfreed": 0, + "pgmajfault": 45, + "pgrefill": 0, + "pgscan": 0, + "pgsteal": 0, + "shmem": 0, + "slab": 1180928, + "slab_reclaimable": 725576, + "slab_unreclaimable": 455352, + "sock": 0, + "thp_collapse_alloc": 0, + "thp_fault_alloc": 1, + "unevictable": 0, + "workingset_activate": 0, + "workingset_nodereclaim": 0, + "workingset_refault": 0 + } + }, + "failcnt": { + "description": "Number of times memory usage hits limits.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + }, + "limit": { + "description": "This field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 8217579520, + "nullable": true + }, + "commitbytes": { + "description": "Committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + }, + "commitpeakbytes": { + "description": "Peak committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + }, + "privateworkingset": { + "description": "Private working set.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "example": 0, + "nullable": true + } + } + }, + "ContainerNetworkStats": { + "description": "Aggregates the network stats of one container\n", + "type": "object", + "x-go-name": "NetworkStats", + "properties": { + "rx_bytes": { + "description": "Bytes received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 5338 + }, + "rx_packets": { + "description": "Packets received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 36 + }, + "rx_errors": { + "description": "Received errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "rx_dropped": { + "description": "Incoming packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_bytes": { + "description": "Bytes sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 1200 + }, + "tx_packets": { + "description": "Packets sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 12 + }, + "tx_errors": { + "description": "Sent errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_dropped": { + "description": "Outgoing packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "endpoint_id": { + "description": "Endpoint ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "string", + "nullable": true + }, + "instance_id": { + "description": "Instance ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "string", + "nullable": true + } + }, + "nullable": true + }, + "ContainerStorageStats": { + "description": "StorageStats is the disk I/O stats for read/write on Windows.\n\nThis type is Windows-specific and omitted for Linux containers.\n", + "type": "object", + "x-go-name": "StorageStats", + "properties": { + "read_count_normalized": { + "type": "integer", + "format": "uint64", + "example": 7593984, + "nullable": true + }, + "read_size_bytes": { + "type": "integer", + "format": "uint64", + "example": 7593984, + "nullable": true + }, + "write_count_normalized": { + "type": "integer", + "format": "uint64", + "example": 7593984, + "nullable": true + }, + "write_size_bytes": { + "type": "integer", + "format": "uint64", + "example": 7593984, + "nullable": true + } + }, + "nullable": true + }, + "ContainerTopResponse": { + "type": "object", + "x-go-name": "TopResponse", + "title": "ContainerTopResponse", + "description": "Container \"top\" response.", + "properties": { + "Titles": { + "description": "The ps column titles", + "type": "array", + "items": { + "type": "string" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ] + } + }, + "Processes": { + "description": "Each process running in the container, where each process\nis an array of values corresponding to the titles.", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": { + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + } + } + }, + "ContainerWaitResponse": { + "description": "OK response to ContainerWait operation", + "type": "object", + "x-go-name": "WaitResponse", + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "properties": { + "StatusCode": { + "description": "Exit code of the container", + "type": "integer", + "format": "int64", + "nullable": false + }, + "Error": { + "$ref": "#/components/schemas/ContainerWaitExitError" + } + } + }, + "ContainerWaitExitError": { + "description": "container waiting error, if any", + "type": "object", + "x-go-name": "WaitExitError", + "properties": { + "Message": { + "description": "Details of an error", + "type": "string" + } + } + }, + "SystemVersion": { + "type": "object", + "description": "Response of Engine API: GET \"/version\"\n", + "properties": { + "Platform": { + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "description": "Information about system components\n", + "items": { + "type": "object", + "x-go-name": "ComponentVersion", + "required": [ + "Name", + "Version" + ], + "properties": { + "Name": { + "description": "Name of the component\n", + "type": "string", + "example": "Engine" + }, + "Version": { + "description": "Version of the component\n", + "type": "string", + "example": "27.0.1", + "nullable": false + }, + "Details": { + "description": "Key/value pairs of strings with additional information about the\ncomponent. These values are intended for informational purposes\nonly, and their content is not defined, and not part of the API\nspecification.\n\nThese messages can be printed by the client as information to the user.\n", + "type": "object", + "nullable": true + } + } + } + }, + "Version": { + "description": "The version of the daemon", + "type": "string", + "example": "27.0.1" + }, + "ApiVersion": { + "description": "The default (and highest) API version that is supported by the daemon\n", + "type": "string", + "example": "1.47" + }, + "MinAPIVersion": { + "description": "The minimum API version that is supported by the daemon\n", + "type": "string", + "example": "1.24" + }, + "GitCommit": { + "description": "The Git commit of the source code that was used to build the daemon\n", + "type": "string", + "example": "48a66213fe" + }, + "GoVersion": { + "description": "The version Go used to compile the daemon, and the version of the Go\nruntime in use.\n", + "type": "string", + "example": "go1.22.7" + }, + "Os": { + "description": "The operating system that the daemon is running on (\"linux\" or \"windows\")\n", + "type": "string", + "example": "linux" + }, + "Arch": { + "description": "Architecture of the daemon, as returned by the Go runtime (`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "amd64" + }, + "KernelVersion": { + "description": "The kernel version (`uname -r`) that the daemon is running on.\n\nThis field is omitted when empty.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "Experimental": { + "description": "Indicates if the daemon is started with experimental features enabled.\n\nThis field is omitted when empty / false.\n", + "type": "boolean", + "example": true + }, + "BuildTime": { + "description": "The date and time that the daemon was compiled.\n", + "type": "string", + "example": "2020-06-22T15:49:27.000000000+00:00" + } + } + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "description": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "type": "string", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "description": "Total number of containers on the host.", + "type": "integer", + "example": 14 + }, + "ContainersRunning": { + "description": "Number of containers with status `\"running\"`.\n", + "type": "integer", + "example": 3 + }, + "ContainersPaused": { + "description": "Number of containers with status `\"paused\"`.\n", + "type": "integer", + "example": 1 + }, + "ContainersStopped": { + "description": "Number of containers with status `\"stopped\"`.\n", + "type": "integer", + "example": 10 + }, + "Images": { + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "type": "integer", + "example": 508 + }, + "Driver": { + "description": "Name of the storage driver in use.", + "type": "string", + "example": "overlay2" + }, + "DriverStatus": { + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ] + }, + "DockerRootDir": { + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "type": "string", + "example": "/var/lib/docker" + }, + "Plugins": { + "$ref": "#/components/schemas/PluginsInfo" + }, + "MemoryLimit": { + "description": "Indicates if the host has memory limit support enabled.", + "type": "boolean", + "example": true + }, + "SwapLimit": { + "description": "Indicates if the host has memory swap limit support enabled.", + "type": "boolean", + "example": true + }, + "CpuCfsPeriod": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CpuCfsQuota": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CPUShares": { + "description": "Indicates if CPU Shares limiting is supported by the host.\n", + "type": "boolean", + "example": true + }, + "CPUSet": { + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "type": "boolean", + "example": true + }, + "PidsLimit": { + "description": "Indicates if the host kernel has PID limit support enabled.", + "type": "boolean", + "example": true + }, + "OomKillDisable": { + "description": "Indicates if OOM killer disable is supported on the host.", + "type": "boolean" + }, + "IPv4Forwarding": { + "description": "Indicates IPv4 forwarding is enabled.", + "type": "boolean", + "example": true + }, + "Debug": { + "description": "Indicates if the daemon is running in debug-mode / with debug-level\nlogging enabled.\n", + "type": "boolean", + "example": true + }, + "NFd": { + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 64 + }, + "NGoroutines": { + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 174 + }, + "SystemTime": { + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "type": "string", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "description": "The logging driver to use as a default for new containers.\n", + "type": "string" + }, + "CgroupDriver": { + "description": "The driver to use for managing cgroups.\n", + "type": "string", + "enum": [ + "cgroupfs", + "systemd", + "none" + ], + "default": "cgroupfs", + "example": "cgroupfs" + }, + "CgroupVersion": { + "description": "The version of the cgroup.\n", + "type": "string", + "enum": [ + "1", + "2" + ], + "default": "1", + "example": "1" + }, + "NEventsListener": { + "description": "Number of event listeners subscribed.", + "type": "integer", + "example": 30 + }, + "KernelVersion": { + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "OperatingSystem": { + "description": "Name of the host's operating system, for example: \"Ubuntu 24.04 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "type": "string", + "example": "Ubuntu 24.04 LTS" + }, + "OSVersion": { + "description": "Version of the host's operating system\n\n


\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "type": "string", + "example": "24.04" + }, + "OSType": { + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "linux" + }, + "Architecture": { + "description": "Hardware architecture of the host, as returned by the operating system.\nThis is equivalent to the output of `uname -m` on Linux.\n\nUnlike `Arch` (from `/version`), this reports the machine's native\narchitecture, which can differ from the Go runtime architecture when\nrunning a binary compiled for a different architecture (for example,\na 32-bit binary running on 64-bit hardware).\n", + "type": "string", + "example": "x86_64" + }, + "NCPU": { + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "type": "integer", + "example": 4 + }, + "MemTotal": { + "description": "Total amount of physical memory available on the host, in bytes.\n", + "type": "integer", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "default": "https://index.docker.io/v1/", + "type": "string", + "example": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/components/schemas/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "HttpProxy": { + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + }, + "NoProxy": { + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "*.local, 169.254/16" + }, + "Name": { + "description": "Hostname of the host.", + "type": "string", + "example": "node5.corp.example.com" + }, + "Labels": { + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "storage=ssd", + "production" + ] + }, + "ExperimentalBuild": { + "description": "Indicates if experimental features are enabled on the daemon.\n", + "type": "boolean", + "example": true + }, + "ServerVersion": { + "description": "Version string of the daemon.\n", + "type": "string", + "example": "27.0.1" + }, + "Runtimes": { + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Runtime" + }, + "default": { + "runc": { + "path": "runc" + } + }, + "example": { + "runc": { + "path": "runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "type": "string", + "default": "runc", + "example": "runc" + }, + "Swarm": { + "$ref": "#/components/schemas/SwarmInfo" + }, + "LiveRestoreEnabled": { + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "type": "boolean", + "default": false, + "example": false + }, + "Isolation": { + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "type": "string", + "enum": [ + "default", + "hyperv", + "process", + "" + ] + }, + "InitBinary": { + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/components/schemas/Commit" + }, + "RuncCommit": { + "$ref": "#/components/schemas/Commit" + }, + "InitCommit": { + "$ref": "#/components/schemas/Commit" + }, + "SecurityOptions": { + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, user-namespaces (userns), rootless and\nno-new-privileges.\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns", + "name=rootless" + ] + }, + "ProductLicense": { + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "type": "string", + "example": "Community Engine" + }, + "DefaultAddressPools": { + "description": "List of custom default address pools for local networks, which can be\nspecified in the daemon.json file or dockerd option.\n\nExample: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n10.10.[0-255].0/24 address pools.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Base": { + "description": "The network address in CIDR format", + "type": "string", + "example": "10.10.0.0/16" + }, + "Size": { + "description": "The network pool size", + "type": "integer", + "example": "24" + } + } + } + }, + "FirewallBackend": { + "$ref": "#/components/schemas/FirewallInfo" + }, + "DiscoveredDevices": { + "description": "List of devices discovered by device drivers.\n\nEach device includes information about its source driver, kind, name,\nand additional driver-specific attributes.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceInfo" + } + }, + "NRI": { + "$ref": "#/components/schemas/NRIInfo" + }, + "Warnings": { + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "WARNING: No memory limit support" + ] + }, + "CDISpecDirs": { + "description": "List of directories where (Container Device Interface) CDI\nspecifications are located.\n\nThese specifications define vendor-specific modifications to an OCI\nruntime specification for a container being created.\n\nAn empty list indicates that CDI device injection is disabled.\n\nNote that since using CDI device injection requires the daemon to have\nexperimental enabled. For non-experimental daemons an empty list will\nalways be returned.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/etc/cdi", + "/var/run/cdi" + ] + }, + "Containerd": { + "$ref": "#/components/schemas/ContainerdInfo" + } + } + }, + "ContainerdInfo": { + "description": "Information for connecting to the containerd instance that is used by the daemon.\nThis is included for debugging purposes only.\n", + "type": "object", + "properties": { + "Address": { + "description": "The address of the containerd socket.", + "type": "string", + "example": "/run/containerd/containerd.sock" + }, + "Namespaces": { + "description": "The namespaces that the daemon uses for running containers and\nplugins in containerd. These namespaces can be configured in the\ndaemon configuration, and are considered to be used exclusively\nby the daemon, Tampering with the containerd instance may cause\nunexpected behavior.\n\nAs these namespaces are considered to be exclusively accessed\nby the daemon, it is not recommended to change these values,\nor to change them to a value that is used by other systems,\nsuch as cri-containerd.\n", + "type": "object", + "properties": { + "Containers": { + "description": "The default containerd namespace used for containers managed\nby the daemon.\n\nThe default namespace for containers is \"moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "moby", + "example": "moby" + }, + "Plugins": { + "description": "The default containerd namespace used for plugins managed by\nthe daemon.\n\nThe default namespace for plugins is \"plugins.moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "plugins.moby", + "example": "plugins.moby" + } + } + } + }, + "nullable": true + }, + "FirewallInfo": { + "description": "Information about the daemon's firewalling configuration.\n\nThis field is currently only used on Linux, and omitted on other platforms.\n", + "type": "object", + "properties": { + "Driver": { + "description": "The name of the firewall backend driver.\n", + "type": "string", + "example": "nftables" + }, + "Info": { + "description": "Information about the firewall backend, provided as\n\"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "ReloadedAt", + "2025-01-01T00:00:00Z" + ] + ] + } + }, + "nullable": true + }, + "PluginsInfo": { + "description": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n", + "type": "object", + "properties": { + "Volume": { + "description": "Names of available volume-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "local" + ] + }, + "Network": { + "description": "Names of available network-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ] + }, + "Authorization": { + "description": "Names of available authorization plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "img-authz-plugin", + "hbm" + ] + }, + "Log": { + "description": "Names of available logging-drivers, and logging-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "splunk", + "syslog" + ] + } + } + }, + "RegistryServiceConfig": { + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "type": "object", + "properties": { + "InsecureRegistryCIDRs": { + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`::1/128` and `127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "::1/128", + "127.0.0.0/8" + ] + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ] + } + }, + "nullable": true + }, + "IndexInfo": { + "description": "IndexInfo contains information about a registry.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the registry, such as \"docker.io\".\n", + "type": "string", + "example": "docker.io" + }, + "Mirrors": { + "description": "List of mirrors, expressed as URIs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ] + }, + "Secure": { + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "type": "boolean", + "example": true + }, + "Official": { + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "type": "boolean", + "example": true + } + }, + "nullable": true + }, + "Runtime": { + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n", + "type": "object", + "properties": { + "path": { + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "--debug", + "--systemd-cgroup=false" + ], + "nullable": true + }, + "status": { + "description": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" + }, + "nullable": true + } + } + }, + "Commit": { + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n", + "type": "object", + "properties": { + "ID": { + "description": "Actual commit ID of external tool.", + "type": "string", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + } + } + }, + "SwarmInfo": { + "description": "Represents generic information about swarm.\n", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string", + "default": "", + "example": "k67qz4598weg5unwwffg6z1m1" + }, + "NodeAddr": { + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "type": "string", + "default": "", + "example": "10.0.0.46" + }, + "LocalNodeState": { + "$ref": "#/components/schemas/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "default": false, + "example": true + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "description": "List of ID's and addresses of other managers in the swarm.\n", + "type": "array", + "default": null, + "items": { + "$ref": "#/components/schemas/PeerNode" + }, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ], + "nullable": true + }, + "Nodes": { + "description": "Total number of nodes in the swarm.", + "type": "integer", + "example": 4, + "nullable": true + }, + "Managers": { + "description": "Total number of managers in the swarm.", + "type": "integer", + "example": 3, + "nullable": true + }, + "Cluster": { + "$ref": "#/components/schemas/ClusterInfo" + } + } + }, + "LocalNodeState": { + "description": "Current local status of this node.", + "type": "string", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ], + "example": "active" + }, + "PeerNode": { + "description": "Represents a peer-node in the swarm", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string" + }, + "Addr": { + "description": "IP address and ports at which this node can be reached.\n", + "type": "string" + } + } + }, + "NetworkAttachmentConfig": { + "description": "Specifies how a service should be attached to a particular network.\n", + "type": "object", + "properties": { + "Target": { + "description": "The target network for attachment. Must be a network name or ID.\n", + "type": "string" + }, + "Aliases": { + "description": "Discoverable alternate names for the service on this network.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "description": "Driver attachment options for the network target.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "EventActor": { + "description": "Actor describes something that generates events, like a container, network,\nor a volume.\n", + "type": "object", + "properties": { + "ID": { + "description": "The ID of the object emitting the event", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Attributes": { + "description": "Various key/value attributes of the object, depending on its type.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-label-value", + "image": "alpine:latest", + "name": "my-container" + } + } + } + }, + "EventMessage": { + "description": "EventMessage represents the information an event contains.\n", + "type": "object", + "title": "SystemEventsResponse", + "properties": { + "Type": { + "description": "The type of object emitting the event", + "type": "string", + "enum": [ + "builder", + "config", + "container", + "daemon", + "image", + "network", + "node", + "plugin", + "secret", + "service", + "volume" + ], + "example": "container" + }, + "Action": { + "description": "The type of event", + "type": "string", + "example": "create" + }, + "Actor": { + "$ref": "#/components/schemas/EventActor" + }, + "scope": { + "description": "Scope of the event. Engine events are `local` scope. Cluster (Swarm)\nevents are `swarm` scope.\n", + "type": "string", + "enum": [ + "local", + "swarm" + ] + }, + "time": { + "description": "Timestamp of event", + "type": "integer", + "format": "int64", + "example": 1629574695 + }, + "timeNano": { + "description": "Timestamp of event, with nanosecond accuracy", + "type": "integer", + "format": "int64", + "example": 1629574695515050000 + } + } + }, + "OCIDescriptor": { + "type": "object", + "x-go-name": "Descriptor", + "description": "A descriptor struct containing digest, media type, and size, as defined in\nthe [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).\n", + "properties": { + "mediaType": { + "description": "The media type of the object this schema refers to.\n", + "type": "string", + "example": "application/vnd.oci.image.manifest.v1+json" + }, + "digest": { + "description": "The digest of the targeted content.\n", + "type": "string", + "example": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + }, + "size": { + "description": "The size in bytes of the blob.\n", + "type": "integer", + "format": "int64", + "example": 424 + }, + "urls": { + "description": "List of URLs from which this object MAY be downloaded.", + "type": "array", + "items": { + "type": "string", + "format": "uri" + }, + "nullable": true + }, + "annotations": { + "description": "Arbitrary metadata relating to the targeted content.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.base.digest": "sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8", + "org.opencontainers.image.base.name": "scratch", + "org.opencontainers.image.created": "2025-01-27T00:00:00Z", + "org.opencontainers.image.revision": "9fabb4bad5138435b01857e2fe9363e2dc5f6a79", + "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base", + "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu", + "org.opencontainers.image.version": "24.04" + }, + "nullable": true + }, + "data": { + "type": "string", + "description": "Data is an embedding of the targeted content. This is encoded as a base64\nstring when marshalled to JSON (automatically, by encoding/json). If\npresent, Data can be used directly to avoid fetching the targeted content.", + "example": null, + "nullable": true + }, + "platform": { + "$ref": "#/components/schemas/OCIPlatform" + }, + "artifactType": { + "description": "ArtifactType is the IANA media type of this artifact.", + "type": "string", + "example": null, + "nullable": true + } + } + }, + "OCIPlatform": { + "type": "object", + "x-go-name": "Platform", + "description": "Describes the platform which the image in the manifest runs on, as defined\nin the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).\n", + "properties": { + "architecture": { + "description": "The CPU architecture, for example `amd64` or `ppc64`.\n", + "type": "string", + "example": "arm" + }, + "os": { + "description": "The operating system, for example `linux` or `windows`.\n", + "type": "string", + "example": "windows" + }, + "os.version": { + "description": "Optional field specifying the operating system version, for example on\nWindows `10.0.19041.1165`.\n", + "type": "string", + "example": "10.0.19041.1165" + }, + "os.features": { + "description": "Optional field specifying an array of strings, each listing a required\nOS feature (for example on Windows `win32k`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "win32k" + ] + }, + "variant": { + "description": "Optional field specifying a variant of the CPU, for example `v7` to\nspecify ARMv7 when architecture is `arm`.\n", + "type": "string", + "example": "v7" + } + }, + "nullable": true + }, + "DistributionInspect": { + "type": "object", + "x-go-name": "DistributionInspect", + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "description": "Describes the result obtained from contacting the registry to retrieve\nimage metadata.\n", + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image.\n", + "items": { + "$ref": "#/components/schemas/OCIPlatform" + } + } + } + }, + "ClusterVolume": { + "type": "object", + "description": "Options and information specific to, and only present on, Swarm CSI\ncluster volumes.\n", + "properties": { + "ID": { + "type": "string", + "description": "The Swarm ID of this volume. Because cluster volumes are Swarm\nobjects, they have an ID, unlike non-cluster volumes. This ID can\nbe used to refer to the Volume instead of the name.\n" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + }, + "Info": { + "type": "object", + "description": "Information about the global status of the volume.\n", + "properties": { + "CapacityBytes": { + "type": "integer", + "format": "int64", + "description": "The capacity of the volume in bytes. A value of 0 indicates that\nthe capacity is unknown.\n" + }, + "VolumeContext": { + "type": "object", + "description": "A map of strings to strings returned from the storage plugin when\nthe volume is created.\n", + "additionalProperties": { + "type": "string" + } + }, + "VolumeID": { + "type": "string", + "description": "The ID of the volume as returned by the CSI storage plugin. This\nis distinct from the volume's ID as provided by Docker. This ID\nis never used by the user when communicating with Docker to refer\nto this volume. If the ID is blank, then the Volume has not been\nsuccessfully created in the plugin yet.\n" + }, + "AccessibleTopology": { + "type": "array", + "description": "The topology this volume is actually accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + } + }, + "PublishStatus": { + "type": "array", + "description": "The status of the volume as it pertains to its publishing and use on\nspecific nodes\n", + "items": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "The ID of the Swarm node the volume is published on.\n" + }, + "State": { + "type": "string", + "description": "The published state of the volume.\n* `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.\n* `published` The volume is published successfully to the node.\n* `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.\n* `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.\n", + "enum": [ + "pending-publish", + "published", + "pending-node-unpublish", + "pending-controller-unpublish" + ] + }, + "PublishContext": { + "type": "object", + "description": "A map of strings to strings returned by the CSI controller\nplugin when a volume is published.\n", + "additionalProperties": { + "type": "string" + } + } + } + } + } + } + }, + "ClusterVolumeSpec": { + "type": "object", + "description": "Cluster-specific options used to create the volume.\n", + "properties": { + "Group": { + "type": "string", + "description": "Group defines the volume group of this volume. Volumes belonging to\nthe same group can be referred to by group name when creating\nServices. Referring to a volume by group instructs Swarm to treat\nvolumes in that group interchangeably for the purpose of scheduling.\nVolumes with an empty string for a group technically all belong to\nthe same, emptystring group.\n" + }, + "AccessMode": { + "type": "object", + "description": "Defines how the volume is used by tasks.\n", + "properties": { + "Scope": { + "type": "string", + "description": "The set of nodes this volume can be used on at one time.\n- `single` The volume may only be scheduled to one node at a time.\n- `multi` the volume may be scheduled to any supported number of nodes at a time.\n", + "default": "single", + "enum": [ + "single", + "multi" + ], + "nullable": false + }, + "Sharing": { + "type": "string", + "description": "The number and way that different tasks can use this volume\nat one time.\n- `none` The volume may only be used by one task at a time.\n- `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly\n- `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.\n- `all` The volume may have any number of readers and writers.\n", + "default": "none", + "enum": [ + "none", + "readonly", + "onewriter", + "all" + ], + "nullable": false + }, + "MountVolume": { + "type": "object", + "description": "Options for using this volume as a Mount-type volume.\n\n Either MountVolume or BlockVolume, but not both, must be\n present.\n properties:\n FsType:\n type: \"string\"\n description: |\n Specifies the filesystem type for the mount volume.\n Optional.\n MountFlags:\n type: \"array\"\n description: |\n Flags to pass when mounting the volume. Optional.\n items:\n type: \"string\"\nBlockVolume:\n type: \"object\"\n description: |\n Options for using this volume as a Block-type volume.\n Intentionally empty.\n" + }, + "Secrets": { + "type": "array", + "description": "Swarm Secrets that are passed to the CSI storage plugin when\noperating on this volume.\n", + "items": { + "type": "object", + "description": "One cluster volume secret entry. Defines a key-value pair that\nis passed to the plugin.\n", + "properties": { + "Key": { + "type": "string", + "description": "Key is the name of the key of the key-value pair passed to\nthe plugin.\n" + }, + "Secret": { + "type": "string", + "description": "Secret is the swarm Secret object from which to read data.\nThis can be a Secret name or ID. The Secret data is\nretrieved by swarm and used as the value of the key-value\npair passed to the plugin.\n" + } + } + } + }, + "AccessibilityRequirements": { + "type": "object", + "description": "Requirements for the accessible topology of the volume. These\nfields are optional. For an in-depth description of what these\nfields mean, see the CSI specification.\n", + "properties": { + "Requisite": { + "type": "array", + "description": "A list of required topologies, at least one of which the\nvolume must be accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + }, + "Preferred": { + "type": "array", + "description": "A list of topologies that the volume should attempt to be\nprovisioned in.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + } + }, + "CapacityRange": { + "type": "object", + "description": "The desired capacity that the volume should be created with. If\nempty, the plugin will decide the capacity.\n", + "properties": { + "RequiredBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must be at least this big. The value of 0\nindicates an unspecified minimum\n" + }, + "LimitBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must not be bigger than this. The value of 0\nindicates an unspecified maximum.\n" + } + } + }, + "Availability": { + "type": "string", + "description": "The availability of the volume for use in tasks.\n- `active` The volume is fully available for scheduling on the cluster\n- `pause` No new workloads should use the volume, but existing workloads are not stopped.\n- `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.\n", + "default": "active", + "enum": [ + "active", + "pause", + "drain" + ], + "nullable": false + } + } + } + } + }, + "Topology": { + "description": "A map of topological domains to topological segments. For in depth\ndetails, see documentation for the Topology object in the CSI\nspecification.\n", + "type": "object", + "properties": { + "Segments": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "AttestationStatement": { + "x-go-name": "AttestationStatement", + "description": "AttestationStatement is a single in-toto statement attached to an image.\n", + "type": "object", + "required": [ + "Descriptor", + "PredicateType" + ], + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "PredicateType": { + "description": "The in-toto predicate type URI of this statement.", + "type": "string", + "example": "https://slsa.dev/provenance/v0.2" + }, + "Statement": { + "description": "The verbatim in-toto statement JSON. Only included when the caller\nopts in via the `statement=true` query parameter; otherwise absent.\n", + "type": "object", + "nullable": true + } + } + }, + "ImageManifestSummary": { + "x-go-name": "ManifestSummary", + "description": "ImageManifestSummary represents a summary of an image manifest.\n", + "type": "object", + "required": [ + "ID", + "Descriptor", + "Available", + "Size", + "Kind" + ], + "properties": { + "ID": { + "description": "ID is the content-addressable ID of an image and is the same as the\ndigest of the image manifest.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + }, + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Available": { + "description": "Indicates whether all the child content (image config, layers) is fully available locally.", + "type": "boolean", + "example": true + }, + "Size": { + "type": "object", + "required": [ + "Content", + "Total" + ], + "properties": { + "Total": { + "type": "integer", + "format": "int64", + "example": 8213251, + "description": "Total is the total size (in bytes) of all the locally present\ndata (both distributable and non-distributable) that's related to\nthis manifest and its children.\nThis equal to the sum of [Content] size AND all the sizes in the\n[Size] struct present in the Kind-specific data struct.\nFor example, for an image kind (Kind == \"image\")\nthis would include the size of the image content and unpacked\nimage snapshots ([Size.Content] + [ImageData.Size.Unpacked]).\n" + }, + "Content": { + "description": "Content is the size (in bytes) of all the locally present\ncontent in the content store (e.g. image config, layers)\nreferenced by this manifest and its children.\nThis only includes blobs in the content store.\n", + "type": "integer", + "format": "int64", + "example": 3987495 + } + }, + "nullable": false + }, + "Kind": { + "type": "string", + "example": "image", + "enum": [ + "image", + "attestation", + "unknown" + ], + "description": "The kind of the manifest.\n\nkind | description\n-------------|-----------------------------------------------------------\nimage | Image manifest that can be used to start a container.\nattestation | Attestation manifest produced by the Buildkit builder for a specific image manifest.\n" + }, + "ImageData": { + "description": "The image data for the image manifest.\nThis field is only populated when Kind is \"image\".\n", + "type": "object", + "x-omitempty": true, + "required": [ + "Platform", + "Containers", + "Size", + "UnpackedSize" + ], + "properties": { + "Platform": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIPlatform" + }, + { + "description": "OCI platform of the image. This will be the platform specified in the\nmanifest descriptor from the index/manifest list.\nIf it's not available, it will be obtained from the image config.\n" + } + ] + }, + "Identity": { + "allOf": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "description": "Identity holds information about the identity and origin of this image.\nFor image list responses, this can duplicate Build/Pull fields across\nimage manifests, because those parts are image-level metadata.\n", + "x-nullable": true + } + ] + }, + "Containers": { + "description": "The IDs of the containers that are using this image.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430", + "abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e" + ] + }, + "Size": { + "type": "object", + "required": [ + "Unpacked" + ], + "properties": { + "Unpacked": { + "type": "integer", + "format": "int64", + "example": 3987495, + "description": "Unpacked is the size (in bytes) of the locally unpacked\n(uncompressed) image content that's directly usable by the containers\nrunning this image.\nIt's independent of the distributable content - e.g.\nthe image might still have an unpacked data that's still used by\nsome container even when the distributable/compressed content is\nalready gone.\n" + } + }, + "nullable": false + } + }, + "nullable": true + }, + "AttestationData": { + "description": "The image data for the attestation manifest.\nThis field is only populated when Kind is \"attestation\".\n", + "type": "object", + "x-omitempty": true, + "required": [ + "For" + ], + "properties": { + "For": { + "description": "The digest of the image manifest that this attestation is for.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + } + }, + "nullable": true + } + } + } + } + } +} diff --git a/prototypes/api-docs/migrations/engine-1.56.json b/prototypes/api-docs/migrations/engine-1.56.json new file mode 100644 index 000000000000..ae1625eab290 --- /dev/null +++ b/prototypes/api-docs/migrations/engine-1.56.json @@ -0,0 +1,52588 @@ +{ + "api": "engine-1.56", + "source": { + "id": "engine-1.56", + "product": "engine", + "title": "Docker Engine", + "source": "_vendor/github.com/moby/moby/api/docs/v1.56.yaml", + "owner": "moby/moby", + "moduleVersion": "github.com/moby/moby/api@v1.56.0", + "manual": "/manuals/engine/", + "connection": "unix", + "auth": "Connect to a daemon you operate. Local socket permissions control access; remote daemons require their configured transport protection. X-Registry-Auth delegates registry credentials and does not authenticate the daemon caller.", + "guides": [ + "/manuals/engine/security/protect-access.md", + "/manuals/engine/daemon/remote-access.md" + ], + "sha256": "f09a22ad220d551dca5d6c402052204d3e9fd1f16943cd78ba6677ea1266616f" + }, + "convertedSha256": "0b732bf19dc1de3234e5cc0bccc20cf37251032d2db6691f2063a8bfe9b434cd", + "profile": "docker-docs-prototype-1", + "changes": [ + { + "pointer": "/basePath", + "beforePresent": true, + "afterPresent": false, + "before": "/v1.56", + "id": "engine-1.56-c20ed503b4c1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/basePath", + "destinationPointer": null + }, + { + "pointer": "/components", + "beforePresent": false, + "afterPresent": true, + "after": { + "requestBodies": { + "PluginPrivilegeArray": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + } + } + }, + "schemas": { + "ImageHistoryResponseItem": { + "type": "object", + "x-go-name": "HistoryResponseItem", + "title": "HistoryResponseItem", + "description": "individual image layer information in response to ImageHistory operation", + "required": [ + "Id", + "Created", + "CreatedBy", + "Tags", + "Size", + "Comment" + ], + "properties": { + "Id": { + "type": "string" + }, + "Created": { + "type": "integer", + "format": "int64" + }, + "CreatedBy": { + "type": "string" + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64" + }, + "Comment": { + "type": "string" + } + } + }, + "PortSummary": { + "type": "object", + "description": "Describes a port-mapping between the container and the host.\n", + "required": [ + "PrivatePort", + "Type" + ], + "properties": { + "IP": { + "type": "string", + "format": "ip-address", + "description": "Host IP address that the container's port is mapped to", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "PrivatePort": { + "type": "integer", + "format": "uint16", + "description": "Port on the container" + }, + "PublicPort": { + "type": "integer", + "format": "uint16", + "description": "Port exposed on the host" + }, + "Type": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + } + }, + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountType": { + "description": "The mount type. Available types:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.", + "type": "string", + "enum": [ + "bind", + "cluster", + "image", + "npipe", + "tmpfs", + "volume" + ], + "example": "volume" + }, + "MountPoint": { + "type": "object", + "description": "MountPoint represents a mount point configuration inside the container.\nThis is used for reporting the mountpoints in use by a container.\n", + "properties": { + "Type": { + "description": "The mount type:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.\n", + "allOf": [ + { + "$ref": "#/components/schemas/MountType" + } + ], + "example": "volume" + }, + "Name": { + "description": "Name is the name reference to the underlying data defined by `Source`\ne.g., the volume name.\n", + "type": "string", + "example": "myvolume" + }, + "Source": { + "description": "Source location of the mount.\n\nFor volumes, this contains the storage location of the volume (within\n`/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\nthe source (host) part of the bind-mount. For `tmpfs` mount points, this\nfield is empty.\n", + "type": "string", + "example": "/var/lib/docker/volumes/myvolume/_data" + }, + "Destination": { + "description": "Destination is the path relative to the container root (`/`) where\nthe `Source` is mounted inside the container.\n", + "type": "string", + "example": "/usr/share/nginx/html/" + }, + "Driver": { + "description": "Driver is the volume driver used to create the volume (if it is a volume).\n", + "type": "string", + "example": "local" + }, + "Mode": { + "description": "Mode is a comma separated list of options supplied by the user when\ncreating the bind/volume mount.\n\nThe default is platform-specific (`\"z\"` on Linux, empty on Windows).\n", + "type": "string", + "example": "z" + }, + "RW": { + "description": "Whether the mount is mounted writable (read-write).\n", + "type": "boolean", + "example": true + }, + "Propagation": { + "description": "Propagation describes how mounts are propagated from the host into the\nmount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)\nfor details. This field is not used on Windows.\n", + "type": "string", + "example": "" + } + } + }, + "DeviceMapping": { + "type": "object", + "description": "A device mapping between the host and container", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "DeviceRequest": { + "type": "object", + "description": "A request for devices to be sent to device drivers", + "properties": { + "Driver": { + "description": "The name of the device driver to use for this request.\n\nNote that if this is specified the capabilities are ignored when\nselecting a device driver.\n", + "type": "string", + "example": "nvidia" + }, + "Count": { + "type": "integer", + "example": -1 + }, + "DeviceIDs": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ] + }, + "Capabilities": { + "description": "A list of capabilities; an OR list of AND lists of capabilities.\n\nNote that if a driver is specified the capabilities have no effect on\nselecting a driver as the driver name is used directly.\n\nNote that if no driver is specified the capabilities are used to\nselect a driver with the required capabilities.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "gpu", + "nvidia", + "compute" + ] + ] + }, + "Options": { + "description": "Driver-specific options, specified as a key/value pairs. These options\nare passed directly to the driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "description": "Device path", + "type": "string" + }, + "Rate": { + "description": "Rate", + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "description": "Container path.", + "type": "string" + }, + "Source": { + "description": "Mount source (e.g. a volume name, a host path). The source cannot be\nspecified when using `Type=tmpfs`. For `Type=bind`, the source path\nmust either exist, or the `CreateMountpoint` must be set to `true` to\ncreate the source path on the host if missing.\n\nFor `Type=npipe`, the pipe must exist prior to creating the container.", + "type": "string" + }, + "Type": { + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container.\n- `cluster` a Swarm cluster volume\n- `image` Mounts an image.\n- `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container.\n- `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n", + "allOf": [ + { + "$ref": "#/components/schemas/MountType" + } + ] + }, + "ReadOnly": { + "description": "Whether the mount should be read-only.", + "type": "boolean" + }, + "Consistency": { + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`.", + "type": "string" + }, + "BindOptions": { + "description": "Optional configuration for the `bind` type.", + "type": "object", + "properties": { + "Propagation": { + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "type": "string", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + }, + "NonRecursive": { + "description": "Disable recursive bind mount.", + "type": "boolean", + "default": false + }, + "CreateMountpoint": { + "description": "Create mount point on host if missing", + "type": "boolean", + "default": false + }, + "ReadOnlyNonRecursive": { + "description": "Make the mount non-recursively read-only, but still leave the mount recursive\n(unless NonRecursive is set to `true` in conjunction).\n\nAdded in v1.44, before that version all read-only mounts were\nnon-recursive by default. To match the previous behaviour this\nwill default to `true` for clients on versions prior to v1.44.\n", + "type": "boolean", + "default": false + }, + "ReadOnlyForceRecursive": { + "description": "Raise an error if the mount cannot be made recursively read-only.", + "type": "boolean", + "default": false + } + } + }, + "VolumeOptions": { + "description": "Optional configuration for the `volume` type.", + "type": "object", + "properties": { + "NoCopy": { + "description": "Populate volume with data from the target.", + "type": "boolean", + "default": false + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "DriverConfig": { + "description": "Map of driver specific options", + "type": "object", + "properties": { + "Name": { + "description": "Name of the driver to use to create the volume.", + "type": "string" + }, + "Options": { + "description": "key/value map of driver specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "Subpath": { + "description": "Source path inside the volume. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-volume/subdirectory" + } + } + }, + "ImageOptions": { + "description": "Optional configuration for the `image` type.", + "type": "object", + "properties": { + "Subpath": { + "description": "Source path inside the image. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-image/subdirectory" + } + } + }, + "TmpfsOptions": { + "description": "Optional configuration for the `tmpfs` type.", + "type": "object", + "properties": { + "SizeBytes": { + "description": "The size for the tmpfs mount in bytes.", + "type": "integer", + "format": "int64" + }, + "Mode": { + "description": "The permission mode for the tmpfs mount in an integer.\nThe value must not be in octal format (e.g. 755) but rather\nthe decimal representation of the octal value (e.g. 493).\n", + "type": "integer" + }, + "Options": { + "description": "The options to be passed to the tmpfs mount. An array of arrays.\nFlag options should be provided as 1-length arrays. Other types\nshould be provided as as 2-length arrays, where the first item is\nthe key and the second the value.\n", + "type": "array", + "items": { + "type": "array", + "minItems": 1, + "maxItems": 2, + "items": { + "type": "string" + } + }, + "example": [ + [ + "noexec" + ] + ] + } + } + } + } + }, + "RestartPolicy": { + "description": "The behavior to apply when the container exits. The default is not to\nrestart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is\nadded before each restart to prevent flooding the server.\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `no` Do not automatically restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "no", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up.\n" + } + } + }, + "Resources": { + "description": "A container's resources (cgroups config, ulimits, etc)", + "type": "object", + "properties": { + "CpuShares": { + "description": "An integer value representing this container's relative CPU weight\nversus other containers.\n", + "type": "integer" + }, + "Memory": { + "description": "Memory limit in bytes.", + "type": "integer", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "description": "Path to `cgroups` under which the container's `cgroup` is created. If\nthe path is not absolute, the path is considered to be relative to the\n`cgroups` path of the init process. Cgroups are created if they do not\nalready exist.\n", + "type": "string" + }, + "BlkioWeight": { + "description": "Block IO weight (relative weight).", + "type": "integer", + "minimum": 0, + "maximum": 1000 + }, + "BlkioWeightDevice": { + "description": "Block IO weight (relative device weight) in the form:\n\n```\n[{\"Path\": \"device_path\", \"Weight\": weight}]\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "type": "integer", + "minimum": 0 + } + } + } + }, + "BlkioDeviceReadBps": { + "description": "Limit read rate (bytes per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "description": "Limit write rate (bytes per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "description": "Limit read rate (IO per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "description": "Limit write rate (IO per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/ThrottleDevice" + } + }, + "CpuPeriod": { + "description": "The length of a CPU period in microseconds.", + "type": "integer", + "format": "int64" + }, + "CpuQuota": { + "description": "Microseconds of CPU time that the container can get in a CPU period.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimePeriod": { + "description": "The length of a CPU real-time period in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpusetCpus": { + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n", + "type": "string", + "example": "0-3" + }, + "CpusetMems": { + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\neffective on NUMA systems.\n", + "type": "string" + }, + "Devices": { + "description": "A list of devices to add to the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "description": "a list of cgroup rules to apply to the container", + "type": "array", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DeviceRequests": { + "description": "A list of requests for devices to be sent to device drivers.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceRequest" + } + }, + "MemoryReservation": { + "description": "Memory soft limit in bytes.", + "type": "integer", + "format": "int64" + }, + "MemorySwap": { + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited\nswap.\n", + "type": "integer", + "format": "int64" + }, + "MemorySwappiness": { + "description": "Tune a container's memory swappiness behavior. Accepts an integer\nbetween 0 and 100.\n", + "type": "integer", + "format": "int64", + "minimum": 0, + "maximum": 100 + }, + "NanoCpus": { + "description": "CPU quota in units of 10-9 CPUs.", + "type": "integer", + "format": "int64" + }, + "OomKillDisable": { + "description": "Disable OOM Killer for the container.", + "type": "boolean" + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": [ + "boolean", + "null" + ] + }, + "PidsLimit": { + "description": "Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\nto not change.\n", + "type": [ + "integer", + "null" + ], + "format": "int64" + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example:\n\n```\n{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + }, + "CpuCount": { + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "CpuPercent": { + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "IOMaximumIOps": { + "description": "Maximum IOps for the container system drive (Windows only)", + "type": "integer", + "format": "int64" + }, + "IOMaximumBandwidth": { + "description": "Maximum IO in bytes per second for the container system drive\n(Windows only).\n", + "type": "integer", + "format": "int64" + } + } + }, + "Limit": { + "description": "An object describing a limit on resources which can be requested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "Pids": { + "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n", + "type": "integer", + "format": "int64", + "default": 0, + "example": 100 + } + } + }, + "ResourceObject": { + "description": "An object describing the resources which can be advertised by a node and\nrequested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + } + } + }, + "GenericResources": { + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`).\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + }, + "HealthConfig": { + "description": "A test to perform to check that the container is healthy.\nHealthcheck commands should be side-effect free.\n", + "type": "object", + "properties": { + "Test": { + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n\nA non-zero exit code indicates a failed healthcheck:\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (treated as unhealthy)\n- other values: error running probe\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "Timeout": { + "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n\nIf the health check command does not complete within this timeout,\nthe check is considered failed and the health check process is\nforcibly terminated without a graceful shutdown.\n", + "type": "integer", + "format": "int64" + }, + "Retries": { + "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n", + "type": "integer" + }, + "StartPeriod": { + "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "StartInterval": { + "description": "The time to wait between checks in nanoseconds during the start period.\nIt should be 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + } + } + }, + "Health": { + "description": "Health stores information about the container's healthcheck results.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Status": { + "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n", + "type": "string", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + }, + "Log": { + "type": "array", + "description": "Log contains the last few results (oldest first)\n", + "items": { + "$ref": "#/components/schemas/HealthcheckResult" + } + } + } + }, + "HealthcheckResult": { + "description": "HealthcheckResult stores information about a single run of a healthcheck probe\n", + "type": [ + "object", + "null" + ], + "properties": { + "Start": { + "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2020-01-04T10:44:24.496525531Z" + }, + "End": { + "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2020-01-04T10:45:21.364524523Z" + }, + "ExitCode": { + "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n", + "type": "integer", + "example": 0 + }, + "Output": { + "description": "Output from last check", + "type": "string" + } + } + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written", + "example": "" + }, + "LogConfig": { + "type": "object", + "description": "The logging configuration for this container", + "properties": { + "Type": { + "description": "Name of the logging driver used for the container or \"none\"\nif logging is disabled.", + "type": "string", + "enum": [ + "local", + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "description": "Driver-specific configuration options for the logging driver.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "5", + "max-size": "10m" + } + } + } + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to the container.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "type": [ + "array", + "null" + ], + "description": "Initial console size, as an `[height, width]` array.\n", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + }, + "Annotations": { + "type": "object", + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n", + "additionalProperties": { + "type": "string" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "enum": [ + "private", + "host" + ], + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n" + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string", + "format": "ip-address", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n", + "additionalProperties": { + "type": "string" + } + }, + "Tmpfs": { + "type": "object", + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n", + "additionalProperties": { + "type": "string" + } + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "type": "integer", + "format": "int64", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "minimum": 0 + }, + "Sysctls": { + "type": [ + "object", + "null" + ], + "description": "A list of kernel parameters (sysctls) to set in the container.\n\nThis field is omitted if not set.", + "additionalProperties": { + "type": "string" + }, + "example": { + "net.ipv4.ip_forward": "1" + } + }, + "Runtime": { + "type": [ + "string", + "null" + ], + "description": "Runtime to use with this container." + }, + "Umask": { + "type": [ + "integer", + "null" + ], + "format": "uint32", + "description": "Set the initial umask for a Unix container.\n\nIf omitted, the daemon does not set a umask in the OCI process\nspecification, and the runtime's default behavior applies.\n\nJSON integers are decimal. For example, use `18` for the octal\numask `0022`, and `511` for the octal umask `0777`." + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/asound", + "/proc/acpi", + "/proc/kcore", + "/proc/keys", + "/proc/latency_stats", + "/proc/timer_list", + "/proc/timer_stats", + "/proc/sched_debug", + "/proc/scsi", + "/sys/firmware", + "/sys/devices/virtual/powercap" + ] + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/bus", + "/proc/fs", + "/proc/irq", + "/proc/sys", + "/proc/sysrq-trigger" + ] + } + } + } + ] + }, + "ContainerConfig": { + "description": "Configuration for a container that is portable between hosts.\n", + "type": "object", + "properties": { + "Hostname": { + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.\n", + "type": "string", + "example": "439f4e91bd1d" + }, + "Domainname": { + "description": "The domain name to use for the container.\n", + "type": "string" + }, + "User": { + "description": "Commands run as this user inside the container. If omitted, commands\nrun as the user specified in the image the container was started from.\n\nCan be either user-name or UID, and optional group-name or GID,\nseparated by a colon (`[<:group-name|GID>]`).", + "type": "string", + "example": "123:456" + }, + "AttachStdin": { + "description": "Whether to attach to `stdin`.", + "type": "boolean", + "default": false + }, + "AttachStdout": { + "description": "Whether to attach to `stdout`.", + "type": "boolean", + "default": true + }, + "AttachStderr": { + "description": "Whether to attach to `stderr`.", + "type": "boolean", + "default": true + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Tty": { + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.\n", + "type": "boolean", + "default": false + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean", + "default": false + }, + "StdinOnce": { + "description": "Close `stdin` after one attached client disconnects", + "type": "boolean", + "default": false + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": [ + "boolean", + "null" + ], + "default": false, + "example": false + }, + "Image": { + "description": "The name (or reference) of the image to use when creating the container,\nor which was used when the container was created.\n", + "type": "string", + "example": "example-image:1.0" + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "NetworkDisabled": { + "description": "Disable networking for the container.", + "type": [ + "boolean", + "null" + ] + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [] + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": [ + "string", + "null" + ], + "example": "SIGTERM" + }, + "StopTimeout": { + "description": "Timeout to stop a container in seconds. If omitted, the daemon-wide\ndefault (`default-stop-timeout`) is used.\n", + "type": [ + "integer", + "null" + ] + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ] + } + } + }, + "ImageConfig": { + "description": "Configuration of the image. These fields are used as defaults\nwhen starting a container from the image.\n", + "type": "object", + "properties": { + "User": { + "description": "The user that commands are run as inside the container.", + "type": "string", + "example": "web:web" + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": [ + "boolean", + "null" + ], + "default": false, + "example": false + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "/app/data": {}, + "/app/config": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [] + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": [ + "string", + "null" + ], + "example": "SIGTERM" + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ] + } + } + }, + "NetworkingConfig": { + "description": "NetworkingConfig represents the container's networking configuration for\neach of its interfaces.\nIt is used for the networking configs specified in the `docker create`\nand `docker network connect` commands.\n", + "type": "object", + "properties": { + "EndpointsConfig": { + "description": "A mapping of network name to endpoint configuration for that network.\nThe endpoint configuration can be left empty to connect to that\nnetwork with no particular endpoint configuration.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + }, + "example": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "MacAddress": "02:42:ac:12:05:02", + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + }, + "NetworkSettings": { + "description": "NetworkSettings exposes the network settings in the API", + "type": "object", + "properties": { + "SandboxID": { + "description": "SandboxID uniquely represents a container's network stack.", + "type": "string", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "SandboxKey": { + "description": "SandboxKey is the full path of the netns handle", + "type": "string", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "Ports": { + "$ref": "#/components/schemas/PortMap" + }, + "Networks": { + "description": "Information about all networks that the container is connected to.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + } + }, + "Address": { + "description": "Address represents an IPv4 or IPv6 IP address.", + "type": "object", + "properties": { + "Addr": { + "description": "IP address.", + "type": "string" + }, + "PrefixLen": { + "description": "Mask length of the IP address.", + "type": "integer" + } + } + }, + "PortMap": { + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "type": "object", + "additionalProperties": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/PortBinding" + } + }, + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ], + "2377/tcp": null + } + }, + "PortBinding": { + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n", + "type": "object", + "properties": { + "HostIp": { + "description": "Host IP address that the container's port is mapped to.", + "type": "string", + "example": "127.0.0.1", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "HostPort": { + "description": "Host port number that the container's port is mapped to.", + "type": "string", + "example": "4443" + } + } + }, + "DriverData": { + "description": "Information about the storage driver used to store the container's and\nimage's filesystem.\n", + "type": "object", + "required": [ + "Name", + "Data" + ], + "properties": { + "Name": { + "description": "Name of the storage driver.", + "type": "string", + "example": "overlay2" + }, + "Data": { + "description": "Low-level storage metadata, provided as key/value pairs.\n\nThis information is driver-specific, and depends on the storage-driver\nin use, and should be used for informational purposes only.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + } + } + } + }, + "Storage": { + "description": "Information about the storage used by the container.\n", + "type": "object", + "properties": { + "RootFS": { + "allOf": [ + { + "$ref": "#/components/schemas/RootFSStorage" + }, + { + "anyOf": [ + { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object" + }, + { + "type": "null" + } + ] + } + ] + } + } + }, + "RootFSStorage": { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorage", + "properties": { + "Snapshot": { + "allOf": [ + { + "$ref": "#/components/schemas/RootFSStorageSnapshot" + }, + { + "anyOf": [ + { + "description": "Information about the snapshot used for the container's root filesystem.\n", + "type": "object" + }, + { + "type": "null" + } + ] + } + ] + } + } + }, + "RootFSStorageSnapshot": { + "description": "Information about a snapshot backend of the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorageSnapshot", + "properties": { + "Name": { + "description": "Name of the snapshotter.", + "type": "string" + } + } + }, + "FilesystemChange": { + "description": "Change in the container's filesystem.\n", + "type": "object", + "required": [ + "Path", + "Kind" + ], + "properties": { + "Path": { + "description": "Path to file or directory that has changed.\n", + "type": "string" + }, + "Kind": { + "$ref": "#/components/schemas/ChangeType" + } + } + }, + "ChangeType": { + "description": "Kind of change\n\nCan be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "type": "integer", + "format": "uint8", + "enum": [ + 0, + 1, + 2 + ] + }, + "ImageInspect": { + "description": "Information about an image in the local image cache.\n", + "type": "object", + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "Descriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n" + }, + { + "type": "null" + } + ] + } + ] + }, + "Manifests": { + "description": "Manifests is a list of image manifests available in this image. It\nprovides a more detailed view of the platform-specific image manifests or\nother image-attached data like build attestations.\n\nOnly available if the daemon provides a multi-platform image store\nand the `manifests` option is set in the inspect request.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ImageManifestSummary" + } + }, + "Identity": { + "allOf": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "anyOf": [ + { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name." + }, + { + "type": "null" + } + ] + } + ] + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ] + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + }, + "Comment": { + "description": "Optional message that was set when committing or importing the image.\n", + "type": [ + "string", + "null" + ], + "example": "" + }, + "Created": { + "description": "Date and time at which the image was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if present in the image,\nand omitted otherwise.\n", + "type": [ + "string", + "null" + ], + "format": "dateTime", + "example": "2022-02-04T21:20:12.497794809Z" + }, + "Author": { + "description": "Name of the author that was specified when committing the image, or as\nspecified through MAINTAINER (deprecated) in the Dockerfile.\n", + "type": [ + "string", + "null" + ], + "example": "" + }, + "Config": { + "$ref": "#/components/schemas/ImageConfig" + }, + "Architecture": { + "description": "Hardware CPU architecture that the image runs on.\n", + "type": "string", + "example": "arm" + }, + "Variant": { + "description": "CPU architecture variant (presently ARM-only).\n", + "type": [ + "string", + "null" + ], + "example": "v7" + }, + "Os": { + "description": "Operating System the image is built to run on.\n", + "type": "string", + "example": "linux" + }, + "OsVersion": { + "description": "Operating System version the image is built to run on (especially\nfor Windows).\n", + "type": [ + "string", + "null" + ], + "example": "" + }, + "Size": { + "description": "Total size of the image variant, including all layers it is composed of.\n\nFor multi-platform images, this is the size of the platform variant\nselected by the `platform` query parameter. If no platform is specified,\nthe daemon selects a platform as described in the `platform` parameter.\n\nWhen using the containerd image store, this includes both the image content\nthat's present locally and the unpacked snapshot data for the selected\nvariant.\n\nImage data may be shared between images, so this size does not indicate\nhow much space would be reclaimed by deleting the image.\n", + "type": "integer", + "format": "int64", + "example": 1239828 + }, + "GraphDriver": { + "allOf": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ] + }, + "RootFS": { + "description": "Information about the image's RootFS, including the layer IDs.\n", + "type": "object", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "example": "layers" + }, + "Layers": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ] + } + } + }, + "Metadata": { + "description": "Additional metadata of the image in the local cache. This information\nis local to the daemon, and not part of the image itself.\n", + "type": "object", + "properties": { + "LastTagTime": { + "description": "Date and time at which the image was last tagged in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if the image was tagged locally,\nand omitted otherwise.\n", + "type": [ + "string", + "null" + ], + "format": "dateTime", + "example": "2022-02-28T14:40:02.623929178Z" + } + } + } + } + }, + "Identity": { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "type": "object", + "properties": { + "Signature": { + "description": "Signature contains the properties of verified signatures for the image.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SignatureIdentity" + } + }, + "Pull": { + "description": "Pull contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.\nAfter successful push this images also contains the pushed repository location.", + "type": "array", + "items": { + "$ref": "#/components/schemas/PullIdentity" + } + }, + "Build": { + "description": "Build contains build reference information if image was created via build.", + "type": "array", + "items": { + "$ref": "#/components/schemas/BuildIdentity" + } + } + } + }, + "BuildIdentity": { + "description": "BuildIdentity contains build reference information if image was created via build.", + "type": "object", + "properties": { + "Ref": { + "description": "Ref is the identifier for the build request. This reference can be used to\nlook up the build details in BuildKit history API.", + "type": "string" + }, + "CreatedAt": { + "description": "CreatedAt is the time when the build ran.", + "type": "string", + "format": "date-time" + } + } + }, + "PullIdentity": { + "description": "PullIdentity contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.", + "type": "object", + "properties": { + "Repository": { + "description": "Repository is the remote repository location the image was pulled from.", + "type": "string" + } + } + }, + "SignatureIdentity": { + "description": "SignatureIdentity contains the properties of verified signatures for the image.", + "type": "object", + "properties": { + "Name": { + "description": "Name is a textual description summarizing the type of signature.", + "type": "string" + }, + "Timestamps": { + "description": "Timestamps contains a list of verified signed timestamps for the signature.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SignatureTimestamp" + } + }, + "KnownSigner": { + "allOf": [ + { + "$ref": "#/components/schemas/KnownSignerIdentity" + }, + { + "description": "KnownSigner is an identifier for a special signer identity that is known to the implementation." + } + ] + }, + "DockerReference": { + "description": "DockerReference is the Docker image reference associated with the signature.\nThis is an optional field only present in older hashedrecord signatures.", + "type": "string" + }, + "Signer": { + "allOf": [ + { + "$ref": "#/components/schemas/SignerIdentity" + }, + { + "description": "Signer contains information about the signer certificate used to sign the image." + } + ] + }, + "SignatureType": { + "allOf": [ + { + "$ref": "#/components/schemas/SignatureType" + }, + { + "description": "SignatureType is the type of signature format. E.g. \"bundle-v0.3\" or \"hashedrecord\"." + } + ] + }, + "Error": { + "description": "Error contains error information if signature verification failed.\nOther fields will be empty in this case.", + "type": "string" + }, + "Warnings": { + "description": "Warnings contains any warnings that occurred during signature verification.\nFor example, if there was no internet connectivity and cached trust roots were used.\nWarning does not indicate a failed verification but may point to configuration issues.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SignatureTimestamp": { + "description": "SignatureTimestamp contains information about a verified signed timestamp for an image signature.", + "type": "object", + "properties": { + "Type": { + "$ref": "#/components/schemas/SignatureTimestampType" + }, + "URI": { + "type": "string" + }, + "Timestamp": { + "type": "string", + "format": "date-time" + } + } + }, + "SignatureTimestampType": { + "description": "SignatureTimestampType is the type of timestamp used in the signature.", + "type": "string", + "enum": [ + "Tlog", + "TimestampAuthority" + ] + }, + "SignatureType": { + "description": "SignatureType is the type of signature format.", + "type": "string", + "enum": [ + "bundle-v0.3", + "simplesigning-v1" + ] + }, + "KnownSignerIdentity": { + "description": "KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation.", + "type": "string", + "enum": [ + "DHI" + ] + }, + "SignerIdentity": { + "description": "SignerIdentity contains information about the signer certificate used to sign the image.", + "type": "object", + "properties": { + "CertificateIssuer": { + "type": "string", + "description": "CertificateIssuer is the certificate issuer." + }, + "SubjectAlternativeName": { + "type": "string", + "description": "SubjectAlternativeName is the certificate subject alternative name." + }, + "Issuer": { + "type": "string", + "description": "The OIDC issuer. Should match `iss` claim of ID token or, in the case of\na federated login like Dex it should match the issuer URL of the\nupstream issuer. The issuer is not set the extensions are invalid and\nwill fail to render." + }, + "BuildSignerURI": { + "type": "string", + "description": "Reference to specific build instructions that are responsible for signing." + }, + "BuildSignerDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the build instructions that is responsible for signing." + }, + "RunnerEnvironment": { + "type": "string", + "description": "Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure." + }, + "SourceRepositoryURI": { + "type": "string", + "description": "Source repository URL that the build was based on." + }, + "SourceRepositoryDigest": { + "type": "string", + "description": "Immutable reference to a specific version of the source code that the build was based upon." + }, + "SourceRepositoryRef": { + "type": "string", + "description": "Source Repository Ref that the build run was based upon." + }, + "SourceRepositoryIdentifier": { + "type": "string", + "description": "Immutable identifier for the source repository the workflow was based upon." + }, + "SourceRepositoryOwnerURI": { + "type": "string", + "description": "Source repository owner URL of the owner of the source repository that the build was based on." + }, + "SourceRepositoryOwnerIdentifier": { + "type": "string", + "description": "Immutable identifier for the owner of the source repository that the workflow was based upon." + }, + "BuildConfigURI": { + "type": "string", + "description": "Build Config URL to the top-level/initiating build instructions." + }, + "BuildConfigDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the top-level/initiating build instructions." + }, + "BuildTrigger": { + "type": "string", + "description": "Event or action that initiated the build." + }, + "RunInvocationURI": { + "type": "string", + "description": "Run Invocation URL to uniquely identify the build execution." + }, + "SourceRepositoryVisibilityAtSigning": { + "type": "string", + "description": "Source repository visibility at the time of signing the certificate." + } + } + }, + "ImageSummary": { + "type": "object", + "x-go-name": "Summary", + "required": [ + "Id", + "ParentId", + "RepoTags", + "RepoDigests", + "Created", + "Size", + "SharedSize", + "Labels", + "Containers" + ], + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "ParentId": { + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "type": "string", + "example": "" + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ] + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + }, + "Created": { + "description": "Date and time at which the image was created as a Unix timestamp\n(number of seconds since EPOCH).\n", + "type": "integer", + "example": "1644009612" + }, + "Size": { + "description": "Total size of the image including all layers it is composed of.\n", + "type": "integer", + "format": "int64", + "example": 172064416 + }, + "SharedSize": { + "description": "Total size of image layers that are shared between this image and other\nimages.\n\nThis size is not calculated by default. `-1` indicates that the value\nhas not been set / calculated.\n", + "type": "integer", + "format": "int64", + "example": 1239828 + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Containers": { + "description": "Number of containers using this image. Includes both stopped and running\ncontainers.\n\n`-1` indicates that the value has not been set / calculated.\n", + "type": "integer", + "example": 2 + }, + "Manifests": { + "description": "Manifests is a list of manifests available in this image.\nIt provides a more detailed view of the platform-specific image manifests\nor other image-attached data like build attestations.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": "array", + "x-omitempty": true, + "items": { + "$ref": "#/components/schemas/ImageManifestSummary" + } + }, + "Descriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n" + }, + { + "type": "null" + } + ] + } + ] + } + } + }, + "ImagesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/image", + "description": "represents system data usage for image resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active images.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all images.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing unused images.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by images.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of image summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "AuthResponse": { + "description": "An identity token was generated successfully.\n", + "type": "object", + "required": [ + "Status" + ], + "properties": { + "Status": { + "description": "The status of the authentication", + "type": "string", + "example": "Login Succeeded" + }, + "IdentityToken": { + "description": "An opaque token used to authenticate a user after a successful login", + "type": "string", + "example": "9cbaf023786cd7..." + } + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "type": "object", + "required": [ + "Name", + "Driver", + "Mountpoint", + "Labels", + "Scope", + "Options" + ], + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "example": "custom" + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "example": "/var/lib/docker/volumes/tardis" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "description": "Date/Time the volume was created.", + "example": "2016-06-07T20:31:11.853781916Z" + }, + "Status": { + "type": "object", + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n", + "additionalProperties": { + "type": "object" + }, + "example": { + "hello": "world" + } + }, + "Labels": { + "type": "object", + "description": "User-defined key/value metadata.", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide,\nor `local` for machine level.\n", + "default": "local", + "enum": [ + "local", + "global" + ], + "example": "local" + }, + "ClusterVolume": { + "$ref": "#/components/schemas/ClusterVolume" + }, + "Options": { + "type": "object", + "description": "The driver specific options used when creating the volume.\n", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "UsageData": { + "type": [ + "object", + "null" + ], + "x-go-name": "UsageData", + "required": [ + "Size", + "RefCount" + ], + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "properties": { + "Size": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n" + }, + "RefCount": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n" + } + } + } + } + }, + "VolumesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/volume", + "description": "represents system data usage for volume resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active volumes.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all volumes.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive volumes.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by volumes.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of volumes.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Volume" + } + } + } + } + }, + "VolumeCreateRequest": { + "description": "Volume configuration", + "type": "object", + "title": "VolumeConfig", + "x-go-name": "CreateRequest", + "properties": { + "Name": { + "description": "The new volume's name. If not specified, Docker generates a name.\n", + "type": "string", + "example": "tardis" + }, + "Driver": { + "description": "Name of the volume driver to use.", + "type": "string", + "default": "local", + "example": "custom" + }, + "DriverOpts": { + "description": "A mapping of driver options and values. These options are\npassed directly to the driver and are driver specific.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "ClusterVolumeSpec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + } + }, + "VolumeListResponse": { + "type": "object", + "title": "VolumeListResponse", + "x-go-name": "ListResponse", + "description": "Volume list response", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "items": { + "$ref": "#/components/schemas/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes.\n", + "items": { + "type": "string" + }, + "example": [] + } + } + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "description": "Name of the network.\n", + "type": "string", + "example": "my_network", + "x-omitempty": false + }, + "Id": { + "description": "ID that uniquely identifies a network on a single machine.\n", + "type": "string", + "x-go-name": "ID", + "x-omitempty": false, + "example": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99" + }, + "Created": { + "description": "Date and time at which the network was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "x-omitempty": false, + "x-go-type": { + "type": "Time", + "import": { + "package": "time" + }, + "hints": { + "nullable": false + } + }, + "example": "2016-10-19T04:33:30.360899459Z" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level)\n", + "type": "string", + "x-omitempty": false, + "example": "local" + }, + "Driver": { + "description": "The name of the driver used to create the network (e.g. `bridge`,\n`overlay`).\n", + "type": "string", + "x-omitempty": false, + "example": "overlay" + }, + "EnableIPv4": { + "description": "Whether the network was created with IPv4 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": true + }, + "EnableIPv6": { + "description": "Whether the network was created with IPv6 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": false + }, + "IPAM": { + "allOf": [ + { + "$ref": "#/components/schemas/IPAM" + }, + { + "description": "The network's IP Address Management.\n", + "x-nullable": false, + "x-omitempty": false + } + ] + }, + "Internal": { + "description": "Whether the network is created to only allow internal networking\nconnectivity.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false + }, + "Attachable": { + "description": "Whether a global / swarm scope network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false + }, + "Ingress": { + "description": "Whether the network is providing the routing-mesh for the swarm cluster.\n", + "type": "boolean", + "x-omitempty": false, + "default": false, + "example": false + }, + "ConfigFrom": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigReference" + }, + { + "x-nullable": false, + "x-omitempty": false + } + ] + }, + "ConfigOnly": { + "description": "Whether the network is a config-only network. Config-only networks are\nplaceholder networks for network configurations to be used by other\nnetworks. Config-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "x-omitempty": false, + "default": false + }, + "Options": { + "description": "Network-specific options uses when creating the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "Metadata specific to the network being created.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Peers": { + "description": "List of peer nodes for an overlay network. This field is only present\nfor overlay networks, and omitted for other network types.\n", + "type": "array", + "x-omitempty": true, + "items": { + "$ref": "#/components/schemas/PeerInfo" + } + } + } + }, + "NetworkSummary": { + "description": "Network list response item", + "x-go-name": "Summary", + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Network" + } + ] + }, + "NetworkInspect": { + "description": "The body of the \"get network\" http response message.", + "x-go-name": "Inspect", + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/Network" + } + ], + "properties": { + "Containers": { + "description": "Contains endpoints attached to the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "$ref": "#/components/schemas/EndpointResource" + }, + "example": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + } + }, + "Services": { + "description": "List of services using the network. This field is only present for\nswarm scope networks, and omitted for local scope networks.\n", + "type": "object", + "x-omitempty": true, + "additionalProperties": { + "x-go-type": { + "type": "ServiceInfo", + "hints": { + "nullable": false + } + } + } + }, + "Status": { + "allOf": [ + { + "$ref": "#/components/schemas/NetworkStatus" + }, + { + "description": "provides runtime information about the network such as the number of allocated IPs.\n" + } + ] + } + } + }, + "NetworkStatus": { + "description": "provides runtime information about the network such as the number of allocated IPs.\n", + "type": "object", + "x-go-name": "Status", + "properties": { + "IPAM": { + "$ref": "#/components/schemas/IPAMStatus" + } + } + }, + "ServiceInfo": { + "x-omitempty": false, + "description": "represents service parameters with the list of service's tasks\n", + "type": "object", + "properties": { + "VIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Ports": { + "type": "array", + "x-omitempty": false, + "items": { + "type": "string" + } + }, + "LocalLBIndex": { + "type": "integer", + "format": "int", + "x-omitempty": false, + "x-go-type": { + "type": "int" + } + }, + "Tasks": { + "type": "array", + "x-omitempty": false, + "items": { + "$ref": "#/components/schemas/NetworkTaskInfo" + } + } + } + }, + "NetworkTaskInfo": { + "x-omitempty": false, + "x-go-name": "Task", + "description": "carries the information about one backend task\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false + }, + "EndpointID": { + "type": "string", + "x-omitempty": false + }, + "EndpointIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Info": { + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + } + } + } + }, + "ConfigReference": { + "x-omitempty": false, + "description": "The config-only network source to provide the configuration for\nthis network.\n", + "type": "object", + "properties": { + "Network": { + "description": "The name of the config-only network that provides the network's\nconfiguration. The specified network must be an existing config-only\nnetwork. Only network names are allowed, not network IDs.\n", + "type": "string", + "x-omitempty": false, + "example": "config_only_network_01" + } + } + }, + "IPAM": { + "type": "object", + "x-omitempty": false, + "properties": { + "Driver": { + "description": "Name of the IPAM driver to use.", + "type": "string", + "default": "default", + "example": "default" + }, + "Config": { + "description": "List of IPAM configuration options, specified as a map:\n\n```\n{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }\n```\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/IPAMConfig" + } + }, + "Options": { + "description": "Driver-specific options, specified as a map.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + } + } + }, + "IPAMConfig": { + "type": "object", + "properties": { + "Subnet": { + "type": "string", + "example": "172.20.0.0/16" + }, + "IPRange": { + "type": "string", + "example": "172.20.10.0/24" + }, + "Gateway": { + "type": "string", + "example": "172.20.10.11" + }, + "AuxiliaryAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "IPAMStatus": { + "type": "object", + "x-omitempty": false, + "properties": { + "Subnets": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SubnetStatus" + }, + "example": { + "172.16.0.0/16": { + "IPsInUse": 3, + "DynamicIPsAvailable": 65533 + }, + "2001:db8:abcd:0012::0/96": { + "IPsInUse": 5, + "DynamicIPsAvailable": 4294967291 + } + }, + "x-go-type": { + "type": "SubnetStatuses", + "kind": "map" + } + } + } + }, + "SubnetStatus": { + "type": "object", + "x-omitempty": false, + "properties": { + "IPsInUse": { + "description": "Number of IP addresses in the subnet that are in use or reserved and are therefore unavailable for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + }, + "DynamicIPsAvailable": { + "description": "Number of IP addresses within the network's IPRange for the subnet that are available for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + } + } + }, + "EndpointResource": { + "type": "object", + "description": "contains network resources allocated and used for a container in a network.\n", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false, + "example": "container_1" + }, + "EndpointID": { + "type": "string", + "x-omitempty": false, + "example": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" + }, + "MacAddress": { + "type": "string", + "x-omitempty": false, + "example": "02:42:ac:13:00:02", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "IPv4Address": { + "type": "string", + "x-omitempty": false, + "example": "172.19.0.2/16", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "x-omitempty": false, + "example": "", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + } + } + }, + "PeerInfo": { + "description": "represents one peer of an overlay network.\n", + "type": "object", + "properties": { + "Name": { + "description": "ID of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "6869d7c1732b" + }, + "IP": { + "description": "IP-address of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "10.133.77.91", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + } + }, + "NetworkCreateResponse": { + "description": "OK response to NetworkCreate operation", + "type": "object", + "title": "NetworkCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warning" + ], + "properties": { + "Id": { + "description": "The ID of the created network.", + "type": "string", + "example": "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d" + }, + "Warning": { + "description": "Warnings encountered when creating the container", + "type": "string", + "example": "" + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + }, + "aux": { + "$ref": "#/components/schemas/ImageID" + } + } + }, + "BuildCache": { + "type": "object", + "description": "BuildCache contains information about a build cache record.\n", + "properties": { + "ID": { + "type": "string", + "description": "Unique ID of the build cache record.\n", + "example": "ndlpt0hhvkqcdfkputsk4cq9c" + }, + "Parents": { + "description": "List of parent build cache record IDs.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "hw53o5aio51xtltp5xjp8v7fx" + ] + }, + "Type": { + "type": "string", + "description": "Cache record type.\n", + "example": "regular", + "enum": [ + "internal", + "frontend", + "source.local", + "source.git.checkout", + "exec.cachemount", + "regular" + ] + }, + "Description": { + "type": "string", + "description": "Description of the build-step that produced the build cache.\n", + "example": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + }, + "InUse": { + "type": "boolean", + "description": "Indicates if the build cache is in use.\n", + "example": false + }, + "Shared": { + "type": "boolean", + "description": "Indicates if the build cache is shared.\n", + "example": true + }, + "Size": { + "description": "Amount of disk space used by the build cache (in bytes).\n", + "type": "integer", + "example": 51 + }, + "CreatedAt": { + "description": "Date and time at which the build cache was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "LastUsedAt": { + "description": "Date and time at which the build cache was last used in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": [ + "string", + "null" + ], + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "UsageCount": { + "type": "integer", + "example": 26 + } + } + }, + "BuildCacheDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/build", + "description": "represents system data usage for build cache resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active build cache records.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all build cache records.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive build cache records.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by build cache records.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of build cache records.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "CacheRecord" + } + } + } + } + }, + "ImageID": { + "type": "object", + "description": "Image ID or Digest", + "properties": { + "ID": { + "type": "string" + } + }, + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "errorDetail": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/components/schemas/ProgressDetail" + } + } + }, + "DeviceInfo": { + "type": "object", + "description": "DeviceInfo represents a device that can be used by a container.\n", + "properties": { + "Source": { + "type": "string", + "example": "cdi", + "description": "The origin device driver.\n" + }, + "ID": { + "type": "string", + "example": "vendor.com/gpu=0", + "description": "The unique identifier for the device within its source driver.\nFor CDI devices, this would be an FQDN like \"vendor.com/gpu=0\".\n" + } + } + }, + "NRIInfo": { + "description": "Information about the Node Resource Interface (NRI).\n\nThis field is only present if NRI is enabled.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Info": { + "description": "Information about NRI, provided as \"label\" / \"value\" pairs.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "plugin-path", + "/opt/docker/nri/plugins" + ] + ] + } + } + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "description": "Represents an error.", + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "description": "The error message.", + "type": "string" + } + }, + "example": { + "message": "Something went wrong." + } + }, + "IDResponse": { + "description": "Response to an API call that returns just an Id", + "type": "object", + "x-go-name": "IDResponse", + "required": [ + "Id" + ], + "properties": { + "Id": { + "description": "The id of the newly created object.", + "type": "string" + } + } + }, + "NetworkConnectRequest": { + "description": "NetworkConnectRequest represents the data to be used to connect a container to a network.\n", + "type": "object", + "x-go-name": "ConnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network.", + "example": "3613f73ba0e4" + }, + "EndpointConfig": { + "allOf": [ + { + "$ref": "#/components/schemas/EndpointSettings" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ] + } + } + }, + "NetworkDisconnectRequest": { + "description": "NetworkDisconnectRequest represents the data to be used to disconnect a container from a network.\n", + "type": "object", + "x-go-name": "DisconnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network.", + "example": "3613f73ba0e4" + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network.", + "default": false, + "x-omitempty": false, + "example": false + } + } + }, + "EndpointSettings": { + "description": "Configuration for a network endpoint.", + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/components/schemas/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "container_1", + "container_2" + ] + }, + "MacAddress": { + "description": "MAC address for the endpoint on this network. The network driver might ignore this parameter.\n", + "type": "string", + "example": "02:42:ac:11:00:04", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "server_x", + "server_y" + ] + }, + "DriverOpts": { + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "GwPriority": { + "description": "This property determines which endpoint will provide the default\ngateway for a container. The endpoint with the highest priority will\nbe used. If multiple endpoints have the same priority, endpoints are\nlexicographically sorted based on their network name, and the one\nthat sorts first is picked.\n", + "type": "integer", + "format": "int64", + "example": [ + 10 + ] + }, + "NetworkID": { + "description": "Unique ID of the network.\n", + "type": "string", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "type": "string", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "description": "Gateway address for this network.\n", + "type": "string", + "example": "172.17.0.1" + }, + "IPAddress": { + "description": "IPv4 address.\n", + "type": "string", + "example": "172.17.0.4", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPPrefixLen": { + "description": "Mask length of the IPv4 address.\n", + "type": "integer", + "example": 16 + }, + "IPv6Gateway": { + "description": "IPv6 gateway address.\n", + "type": "string", + "example": "2001:db8:2::100", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6Address": { + "description": "Global IPv6 address.\n", + "type": "string", + "example": "2001:db8::5689", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6PrefixLen": { + "description": "Mask length of the global IPv6 address.\n", + "type": "integer", + "format": "int64", + "example": 64 + }, + "DNSNames": { + "description": "List of all DNS names an endpoint has on a specific network. This\nlist is based on the container name, network aliases, container short\nID, and hostname.\n\nThese DNS names are non-fully qualified but can contain several dots.\nYou can get fully qualified DNS names by appending `.`.\nFor instance, if container name is `my.ctr` and the network is named\n`testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be\n`my.ctr.testnet`.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "foobar", + "server_x", + "server_y", + "my.ctr" + ] + } + } + }, + "EndpointIPAMConfig": { + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "type": [ + "object", + "null" + ], + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "LinkLocalIPs": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "example": [ + "169.254.34.68", + "fe80::3468" + ] + } + } + }, + "PluginMount": { + "type": "object", + "x-go-name": "Mount", + "required": [ + "Name", + "Description", + "Settable", + "Source", + "Destination", + "Type", + "Options" + ], + "properties": { + "Name": { + "type": "string", + "example": "some-mount" + }, + "Description": { + "type": "string", + "example": "This is a mount that's used by the plugin." + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "example": "/mnt/state" + }, + "Type": { + "type": "string", + "example": "bind" + }, + "Options": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "rbind", + "rw" + ] + } + } + }, + "PluginDevice": { + "type": "object", + "x-go-name": "Device", + "required": [ + "Name", + "Description", + "Settable", + "Path" + ], + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + } + }, + "PluginEnv": { + "type": "object", + "x-go-name": "Env", + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + } + }, + "PluginPrivilege": { + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n", + "type": "object", + "x-go-name": "Privilege", + "properties": { + "Name": { + "type": "string", + "example": "network" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "host" + ] + } + } + }, + "Plugin": { + "description": "A plugin for the Engine API", + "type": "object", + "x-go-name": "Plugin", + "required": [ + "Settings", + "Enabled", + "Config", + "Name" + ], + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "example": "tiborvass/sample-volume-plugin" + }, + "Enabled": { + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "type": "boolean", + "example": true + }, + "Settings": { + "description": "user-configurable settings for the plugin.", + "type": "object", + "x-go-name": "Settings", + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=0" + ] + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + } + }, + "PluginReference": { + "description": "plugin remote reference used to push/pull the plugin", + "type": "string", + "x-go-name": "PluginReference", + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest" + }, + "Config": { + "description": "The config of a plugin.", + "type": "object", + "x-go-name": "Config", + "required": [ + "Description", + "Documentation", + "Interface", + "Entrypoint", + "WorkDir", + "Network", + "Linux", + "PidHost", + "PropagatedMount", + "IpcHost", + "Mounts", + "Env", + "Args" + ], + "properties": { + "Description": { + "type": "string", + "example": "A sample volume plugin for Docker" + }, + "Documentation": { + "type": "string", + "example": "https://docs.docker.com/engine/extend/plugins/" + }, + "Interface": { + "description": "The interface between Docker and the plugin", + "type": "object", + "x-go-name": "Interface", + "required": [ + "Types", + "Socket" + ], + "properties": { + "Types": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "CapabilityID" + } + }, + "example": [ + "docker.volumedriver/1.0" + ] + }, + "Socket": { + "type": "string", + "example": "plugins.sock" + }, + "ProtocolScheme": { + "type": "string", + "example": "some.protocol/v1.0", + "description": "Protocol to use for clients connecting to the plugin.", + "enum": [ + "", + "moby.plugins.http/v1" + ] + } + } + }, + "Entrypoint": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ] + }, + "WorkDir": { + "type": "string", + "example": "/bin/" + }, + "User": { + "type": "object", + "x-go-name": "User", + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + } + }, + "Network": { + "type": "object", + "x-go-name": "NetworkConfig", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "example": "host" + } + } + }, + "Linux": { + "type": "object", + "x-go-name": "LinuxConfig", + "required": [ + "Capabilities", + "AllowAllDevices", + "Devices" + ], + "properties": { + "Capabilities": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ] + }, + "AllowAllDevices": { + "type": "boolean", + "example": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginDevice" + } + } + } + }, + "PropagatedMount": { + "type": "string", + "example": "/mnt/volumes" + }, + "IpcHost": { + "type": "boolean", + "example": false + }, + "PidHost": { + "type": "boolean", + "example": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginEnv" + }, + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Settable": null, + "Value": "0" + } + ] + }, + "Args": { + "type": "object", + "x-go-name": "Args", + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "type": "string", + "example": "args" + }, + "Description": { + "type": "string", + "example": "command line arguments" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "rootfs": { + "type": "object", + "x-go-name": "RootFS", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ] + } + } + } + } + } + } + }, + "ObjectVersion": { + "description": "The version number of the object such as node, service, etc. This is needed\nto avoid conflicting writes. The client must send the version number along\nwith the modified specification when updating these objects.\n\nThis approach ensures safe concurrency and determinism in that the change\non the object may not be applied if the version number has changed from the\nlast read. In other words, if two update requests specify the same base\nversion, only one of the requests can succeed. As a result, two separate\nupdate requests that happen at the same time will not unintentionally\noverwrite each other.\n", + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + } + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "description": "Name for the node.", + "type": "string", + "example": "my-node" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Role": { + "description": "Role of the node.", + "type": "string", + "enum": [ + "worker", + "manager" + ], + "example": "manager" + }, + "Availability": { + "description": "Availability of the node.", + "type": "string", + "enum": [ + "active", + "pause", + "drain" + ], + "example": "active" + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/NodeSpec" + }, + "Description": { + "$ref": "#/components/schemas/NodeDescription" + }, + "Status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/components/schemas/ManagerStatus" + } + } + }, + "NodeDescription": { + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n", + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/components/schemas/Platform" + }, + "Resources": { + "$ref": "#/components/schemas/ResourceObject" + }, + "Engine": { + "$ref": "#/components/schemas/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + } + } + }, + "Platform": { + "description": "Platform represents the platform (Arch/OS).\n", + "type": "object", + "properties": { + "Architecture": { + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "type": "string", + "example": "x86_64" + }, + "OS": { + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "type": "string", + "example": "linux" + } + } + }, + "EngineDescription": { + "description": "EngineDescription provides information about an engine.", + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ] + } + } + }, + "TLSInfo": { + "description": "Information about the issuer of leaf TLS certificates and the trusted root\nCA certificate.\n", + "type": "object", + "properties": { + "TrustRoot": { + "description": "The root CA certificate(s) that are used to validate leaf TLS\ncertificates.\n", + "type": "string" + }, + "CertIssuerSubject": { + "description": "The base64-url-safe-encoded raw subject bytes of the issuer.", + "type": "string" + }, + "CertIssuerPublicKey": { + "description": "The base64-url-safe-encoded raw public key bytes of the issuer.\n", + "type": "string" + } + }, + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n", + "type": "object", + "properties": { + "State": { + "$ref": "#/components/schemas/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "description": "IP address of the node.", + "type": "string", + "example": "172.17.0.2" + } + } + }, + "NodeState": { + "description": "NodeState represents the state of a node.", + "type": "string", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ], + "example": "ready" + }, + "ManagerStatus": { + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Leader": { + "type": "boolean", + "default": false, + "example": true + }, + "Reachability": { + "$ref": "#/components/schemas/Reachability" + }, + "Addr": { + "description": "The IP address and port at which the manager is reachable.\n", + "type": "string", + "example": "10.0.0.46:2377" + } + } + }, + "Reachability": { + "description": "Reachability represents the reachability of a node.", + "type": "string", + "enum": [ + "unknown", + "unreachable", + "reachable" + ], + "example": "reachable" + }, + "SwarmSpec": { + "description": "User modifiable swarm configuration.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the swarm.", + "type": "string", + "example": "default" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "description": "Orchestration configuration.", + "type": [ + "object", + "null" + ], + "properties": { + "TaskHistoryRetentionLimit": { + "description": "The number of historic tasks to keep per instance or node. If\nnegative, never remove completed or failed tasks.\n", + "type": "integer", + "format": "int64", + "example": 10 + } + } + }, + "Raft": { + "description": "Raft configuration.", + "type": "object", + "properties": { + "SnapshotInterval": { + "description": "The number of log entries between snapshots.", + "type": "integer", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "description": "The number of snapshots to keep beyond the current snapshot.\n", + "type": "integer", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "description": "The number of log entries to keep around to sync up slow followers\nafter a snapshot is created.\n", + "type": "integer", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "description": "The number of ticks that a follower will wait for a message from\nthe leader before becoming a candidate and starting an election.\n`ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 3 + }, + "HeartbeatTick": { + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks,\nthe leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 1 + } + } + }, + "Dispatcher": { + "description": "Dispatcher configuration.", + "type": [ + "object", + "null" + ], + "properties": { + "HeartbeatPeriod": { + "description": "The delay for an agent to send a heartbeat to the dispatcher.\n", + "type": "integer", + "format": "int64", + "example": 5000000000 + } + } + }, + "CAConfig": { + "description": "CA configuration.", + "type": [ + "object", + "null" + ], + "properties": { + "NodeCertExpiry": { + "description": "The duration node certificates are issued for.", + "type": "integer", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "description": "Configuration for forwarding signing requests to an external\ncertificate authority.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "description": "Protocol for communication with the external CA (currently\nonly `cfssl` is supported).\n", + "type": "string", + "enum": [ + "cfssl" + ], + "default": "cfssl" + }, + "URL": { + "description": "URL where certificate signing requests should be sent.\n", + "type": "string" + }, + "Options": { + "description": "An object with key/value pairs that are interpreted as\nprotocol-specific options for the external CA driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CACert": { + "description": "The root CA certificate (in PEM format) this external CA uses\nto issue TLS certificates (assumed to be to the current swarm\nroot CA certificate if not provided).\n", + "type": "string" + } + } + } + }, + "SigningCACert": { + "description": "The desired signing CA certificate for all swarm node TLS leaf\ncertificates, in PEM format.\n", + "type": "string" + }, + "SigningCAKey": { + "description": "The desired signing CA key for all swarm node TLS leaf certificates,\nin PEM format.\n", + "type": "string" + }, + "ForceRotate": { + "description": "An integer whose purpose is to force swarm to generate a new\nsigning CA certificate and key, if none have been specified in\n`SigningCACert` and `SigningCAKey`\n", + "format": "uint64", + "type": "integer" + } + } + }, + "EncryptionConfig": { + "description": "Parameters related to encryption-at-rest.", + "type": "object", + "properties": { + "AutoLockManagers": { + "description": "If set, generate a key and use it to lock data stored on the\nmanagers.\n", + "type": "boolean", + "example": false + } + } + }, + "TaskDefaults": { + "description": "Defaults for creating tasks in this cluster.", + "type": "object", + "properties": { + "LogDriver": { + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n", + "type": "object", + "properties": { + "Name": { + "description": "The log driver to use as a default for new tasks.\n", + "type": "string", + "example": "json-file" + }, + "Options": { + "description": "Driver-specific options for the selected log driver, specified\nas key/value pairs.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "10", + "max-size": "100m" + } + } + } + } + } + } + } + }, + "ClusterInfo": { + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "type": [ + "object", + "null" + ], + "properties": { + "ID": { + "description": "The ID of the swarm.", + "type": "string", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/components/schemas/TLSInfo" + }, + "RootRotationInProgress": { + "description": "Whether there is currently a root CA rotation in progress for the swarm\n", + "type": "boolean", + "example": false + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nIf no port is set or is set to 0, the default port (4789) is used.\n", + "type": "integer", + "format": "uint32", + "default": 4789, + "example": 4789 + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global scope\nnetworks.\n", + "type": "array", + "items": { + "type": "string", + "format": "CIDR", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created from the\ndefault subnet pool.\n", + "type": "integer", + "format": "uint32", + "maximum": 29, + "default": 24, + "example": 24 + } + } + }, + "JoinTokens": { + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n", + "type": "object", + "properties": { + "Worker": { + "description": "The token workers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "description": "The token managers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "Swarm": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/components/schemas/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "description": "User modifiable task configuration.", + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Name": { + "description": "The name or 'alias' to use for the plugin.", + "type": "string" + }, + "Remote": { + "description": "The plugin image reference to use.", + "type": "string" + }, + "Disabled": { + "description": "Disable the plugin once scheduled.", + "type": "boolean" + }, + "PluginPrivilege": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + } + } + } + }, + "ContainerSpec": { + "type": "object", + "description": "Container spec for the service.\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Image": { + "description": "The image name to use for the container", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value data.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Command": { + "description": "The command to be run in the image.", + "type": "array", + "items": { + "type": "string" + } + }, + "Args": { + "description": "Arguments to the command.", + "type": "array", + "items": { + "type": "string" + } + }, + "Hostname": { + "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n", + "type": "string" + }, + "Env": { + "description": "A list of environment variables in the form `VAR=value`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Dir": { + "description": "The working directory for commands to run in.", + "type": "string" + }, + "User": { + "description": "The user inside the container.", + "type": "string" + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "description": "Security options for the container", + "properties": { + "CredentialSpec": { + "type": "object", + "description": "CredentialSpec for managed service account (Windows only)", + "properties": { + "Config": { + "type": "string", + "example": "0bt9dmxjvjiqermk6xrop3ekq", + "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "File": { + "type": "string", + "example": "spec.json", + "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + } + } + }, + "SELinuxContext": { + "type": "object", + "description": "SELinux labels of the container", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + } + }, + "Seccomp": { + "type": "object", + "description": "Options for configuring seccomp on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "unconfined", + "custom" + ] + }, + "Profile": { + "description": "The custom seccomp profile as a json object", + "type": "string" + } + } + }, + "AppArmor": { + "type": "object", + "description": "Options for configuring AppArmor on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "disabled" + ] + } + } + }, + "NoNewPrivileges": { + "type": "boolean", + "description": "Configuration of the no_new_privs bit in the container" + } + } + }, + "TTY": { + "description": "Whether a pseudo-TTY should be allocated.", + "type": "boolean" + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean" + }, + "ReadOnly": { + "description": "Mount the container's root filesystem as read only.", + "type": "boolean" + }, + "Mounts": { + "description": "Specification for mounts to be added to containers created as part\nof the service.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "StopSignal": { + "description": "Signal to stop the container.", + "type": "string" + }, + "StopGracePeriod": { + "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n", + "type": "integer", + "format": "int64" + }, + "Healthcheck": { + "$ref": "#/components/schemas/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n", + "type": "object", + "properties": { + "Nameservers": { + "description": "The IP addresses of the name servers.", + "type": "array", + "items": { + "type": "string" + } + }, + "Search": { + "description": "A search list for host-name lookup.", + "type": "array", + "items": { + "type": "string" + } + }, + "Options": { + "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Secrets": { + "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "SecretID": { + "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n", + "type": "string" + }, + "SecretName": { + "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "OomScoreAdj": { + "type": "integer", + "format": "int64", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 0 + }, + "Configs": { + "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n\n\n\n\n\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "Runtime": { + "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n\n\n\n\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n", + "type": "object" + }, + "ConfigID": { + "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n", + "type": "string" + }, + "ConfigName": { + "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service.\n(Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": [ + "boolean", + "null" + ] + }, + "Sysctls": { + "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CapabilityAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW", + "CAP_SYS_ADMIN", + "CAP_SYS_CHROOT", + "CAP_SYSLOG" + ] + }, + "CapabilityDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW" + ] + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + } + } + }, + "NetworkAttachmentSpec": { + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "type": "object", + "properties": { + "ContainerID": { + "description": "ID of the container represented by this task", + "type": "string" + } + } + }, + "Resources": { + "description": "Resource requirements which apply to each individual container created\nas part of the service.\n", + "type": "object", + "properties": { + "Limits": { + "allOf": [ + { + "$ref": "#/components/schemas/Limit" + }, + { + "description": "Define resources limits." + } + ] + }, + "Reservations": { + "allOf": [ + { + "$ref": "#/components/schemas/ResourceObject" + }, + { + "description": "Define resources reservation." + } + ] + }, + "SwapBytes": { + "description": "Amount of swap in bytes - can only be used together with a memory limit.\nIf not specified, the default behaviour is to grant a swap space twice\nas big as the memory limit.\nSet to -1 to enable unlimited swap.\n", + "type": [ + "integer", + "null" + ], + "format": "int64", + "minimum": -1, + "x-omitempty": true + }, + "MemorySwappiness": { + "description": "Tune the service's containers' memory swappiness (0 to 100).\nIf not specified, defaults to the containers' OS' default, generally 60,\nor whatever value was predefined in the image.\nSet to -1 to unset a previously set value.\n", + "type": [ + "integer", + "null" + ], + "format": "int64", + "minimum": -1, + "maximum": 100, + "x-omitempty": true + } + } + }, + "RestartPolicy": { + "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n", + "type": "object", + "properties": { + "Condition": { + "description": "Condition for restart.", + "type": "string", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "description": "Delay between restart attempts.", + "type": "integer", + "format": "int64" + }, + "MaxAttempts": { + "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Window": { + "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n", + "type": "integer", + "format": "int64", + "default": 0 + } + } + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production", + "node.platform.os==linux", + "node.platform.arch==x86_64" + ] + }, + "Preferences": { + "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "description": "label descriptor, such as `engine.labels.az`.\n", + "type": "string" + } + } + } + } + }, + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ] + }, + "MaxReplicas": { + "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Platforms": { + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Platform" + } + } + } + }, + "ForceUpdate": { + "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n", + "type": "integer", + "format": "uint64" + }, + "Runtime": { + "description": "Runtime is the type of runtime specified for the task executor.\n", + "type": "string" + }, + "Networks": { + "description": "Specifies which networks the service should attach to.", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "LogDriver": { + "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "ContainerStatus": { + "type": "object", + "description": "represents the status of a container.", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + } + }, + "PortStatus": { + "type": "object", + "description": "represents the port status of a task's host ports whose service has published host ports", + "properties": { + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + } + }, + "TaskStatus": { + "type": "object", + "description": "represents the status of a task.", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/components/schemas/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "$ref": "#/components/schemas/ContainerStatus" + }, + "PortStatus": { + "$ref": "#/components/schemas/PortStatus" + } + } + }, + "NetworkAttachment": { + "description": "Specifies how a task is attached to a network, and the addresses the\ntask was assigned on that network.\n", + "type": "object", + "properties": { + "Network": { + "$ref": "#/components/schemas/Network" + }, + "Addresses": { + "description": "The IP addresses (in CIDR notation) assigned to the task on this\nnetwork. To maintain backward compatibility this field accepts CIDR\nnotation, but only the IP address is used.\n", + "type": "array", + "items": { + "type": "string", + "format": "cidr" + } + } + }, + "example": { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1" + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "description": "The ID of the task.", + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "description": "Name of the task.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Spec": { + "$ref": "#/components/schemas/TaskSpec" + }, + "ServiceID": { + "description": "The ID of the service this task is part of.", + "type": "string" + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "description": "The ID of the node that this task is on.", + "type": "string" + }, + "AssignedGenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "Status": { + "$ref": "#/components/schemas/TaskStatus" + }, + "DesiredState": { + "$ref": "#/components/schemas/TaskState" + }, + "JobIteration": { + "allOf": [ + { + "$ref": "#/components/schemas/ObjectVersion" + }, + { + "description": "If the Service this Task belongs to is a job-mode service, contains\nthe JobIteration of the Service this Task was created for. Absent if\nthe Task was created for a Replicated or Global Service.\n" + } + ] + }, + "NetworksAttachments": { + "description": "The networks that this task is attached to, and the addresses the\ntask was assigned on each of them.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachment" + } + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "description": "User modifiable configuration for a service.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the service.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "TaskTemplate": { + "$ref": "#/components/schemas/TaskSpec" + }, + "Mode": { + "description": "Scheduling mode for the service.", + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object" + }, + "ReplicatedJob": { + "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n", + "type": "object", + "properties": { + "MaxConcurrent": { + "description": "The maximum number of replicas to run simultaneously.\n", + "type": "integer", + "format": "int64", + "default": 1 + }, + "TotalCompletions": { + "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n", + "type": "integer", + "format": "int64" + } + } + }, + "GlobalJob": { + "description": "The mode used for services which run a task to the completed state\non each valid node.\n", + "type": "object" + } + } + }, + "UpdateConfig": { + "description": "Specification for the update strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between updates, in nanoseconds.", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n", + "type": "string", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "RollbackConfig": { + "description": "Specification for the rollback strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between rollback iterations, in nanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n", + "type": "string", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "Networks": { + "description": "Specifies which networks the service should attach to.\n\nDeprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkAttachmentConfig" + } + }, + "EndpointSpec": { + "$ref": "#/components/schemas/EndpointSpec" + } + } + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "TargetPort": { + "description": "The port inside the container.", + "type": "integer" + }, + "PublishedPort": { + "description": "The port on the swarm hosts.", + "type": "integer" + }, + "PublishMode": { + "description": "The mode in which port is published.\n\n\n\n\n\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "type": "string", + "enum": [ + "ingress", + "host" + ], + "default": "ingress", + "example": "ingress" + } + } + }, + "EndpointSpec": { + "description": "Properties that can be configured to access and load balance a service.", + "type": "object", + "properties": { + "Mode": { + "description": "The mode of resolution to use for internal load balancing between tasks.\n", + "type": "string", + "enum": [ + "vip", + "dnsrr" + ], + "default": "vip" + }, + "Ports": { + "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + } + } + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/components/schemas/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "description": "The status of a service update.", + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + } + }, + "ServiceStatus": { + "description": "The status of the service's tasks. Provided only when requested as\npart of a ServiceList operation.\n", + "type": "object", + "properties": { + "RunningTasks": { + "description": "The number of tasks for the service currently in the Running state.\n", + "type": "integer", + "format": "uint64", + "example": 7 + }, + "DesiredTasks": { + "description": "The number of tasks for the service desired to be running.\nFor replicated services, this is the replica count from the\nservice spec. For global services, this is computed by taking\ncount of all tasks for the service with a Desired State other\nthan Shutdown.\n", + "type": "integer", + "format": "uint64", + "example": 10 + }, + "CompletedTasks": { + "description": "The number of tasks for a job that are in the Completed state.\nThis field must be cross-referenced with the service type, as the\nvalue of 0 may mean the service is not in a job mode, or it may\nmean the job-mode service has no tasks yet Completed.\n", + "type": "integer", + "format": "uint64" + } + } + }, + "JobStatus": { + "description": "The status of the service when it is in one of ReplicatedJob or\nGlobalJob modes. Absent on Replicated and Global mode services. The\nJobIteration is an ObjectVersion, but unlike the Service's version,\ndoes not need to be sent with an update request.\n", + "type": "object", + "properties": { + "JobIteration": { + "allOf": [ + { + "$ref": "#/components/schemas/ObjectVersion" + }, + { + "description": "JobIteration is a value increased each time a Job is executed,\nsuccessfully or otherwise. \"Executed\", in this case, means the\njob as a whole has been started, not that an individual Task has\nbeen launched. A job is \"Executed\" when its ServiceSpec is\nupdated. JobIteration can be used to disambiguate Tasks belonging\nto different executions of a job. Though JobIteration will\nincrease with each subsequent execution, it may not necessarily\nincrease by 1, and so JobIteration should not be used to\n" + } + ] + }, + "LastExecution": { + "description": "The last time, as observed by the server, that this job was\nstarted.\n", + "type": "string", + "format": "dateTime" + } + } + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "x-go-name": "DeleteResponse", + "properties": { + "Untagged": { + "description": "The image ID of an image that was untagged", + "type": "string" + }, + "Deleted": { + "description": "The image ID of an image that was deleted", + "type": "string" + } + } + }, + "ServiceCreateResponse": { + "type": "object", + "description": "contains the information returned to a client on the\ncreation of a new service.\n", + "properties": { + "ID": { + "description": "The ID of the created service.", + "type": "string", + "example": "ak7w3gjqoa3kuz8xcpnyy0pvl" + }, + "Warnings": { + "description": "Optional warning message.\n\nFIXME(thaJeztah): this should have \"omitempty\" in the generated type.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + } + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "description": "Optional warning messages", + "type": "array", + "items": { + "type": "string" + } + } + }, + "example": { + "Warnings": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + }, + "ContainerInspectResponse": { + "type": "object", + "title": "ContainerInspectResponse", + "x-go-name": "InspectResponse", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Created": { + "description": "Date and time at which the container was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.", + "type": [ + "string", + "null" + ], + "format": "dateTime", + "example": "2025-02-17T17:43:39.64001363Z" + }, + "Path": { + "description": "The path to the command being run", + "type": "string", + "example": "/bin/sh" + }, + "Args": { + "description": "The arguments to the command being run", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "-c", + "exit 9" + ] + }, + "State": { + "$ref": "#/components/schemas/ContainerState" + }, + "Image": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ResolvConfPath": { + "description": "Location of the `/etc/resolv.conf` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf" + }, + "HostnamePath": { + "description": "Location of the `/etc/hostname` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname" + }, + "HostsPath": { + "description": "Location of the `/etc/hosts` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts" + }, + "LogPath": { + "description": "Location of the file used to buffer the container's logs. Depending on\nthe logging-driver used for the container, this field may be omitted.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": [ + "string", + "null" + ], + "example": "/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log" + }, + "Name": { + "description": "The name associated with this container.\n\nFor historic reasons, the name may be prefixed with a forward-slash (`/`).", + "type": "string", + "example": "/funny_chatelet" + }, + "RestartCount": { + "description": "Number of times the container was restarted since it was created,\nor since daemon was started.", + "type": "integer", + "example": 0 + }, + "Driver": { + "description": "The storage-driver used for the container's filesystem (graph-driver\nor snapshotter).", + "type": "string", + "example": "overlayfs" + }, + "Platform": { + "description": "The platform (operating system) for which the container was created.\n\nThis field was introduced for the experimental \"LCOW\" (Linux Containers\nOn Windows) features, which has been removed. In most cases, this field\nis equal to the host's operating system (`linux` or `windows`).", + "type": "string", + "example": "linux" + }, + "ImageManifestDescriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store." + } + ] + }, + "MountLabel": { + "description": "SELinux mount label set for the container.", + "type": "string", + "example": "" + }, + "ProcessLabel": { + "description": "SELinux process label set for the container.", + "type": "string", + "example": "" + }, + "AppArmorProfile": { + "description": "The AppArmor profile set for the container.", + "type": "string", + "example": "" + }, + "ExecIDs": { + "description": "IDs of exec instances that are running in the container.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ] + }, + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "GraphDriver": { + "allOf": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ] + }, + "Storage": { + "allOf": [ + { + "$ref": "#/components/schemas/Storage" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ] + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": [ + "integer", + "null" + ], + "format": "int64", + "example": "122880" + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": [ + "integer", + "null" + ], + "format": "int64", + "example": "1653948416" + }, + "Mounts": { + "description": "List of mounts used by the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Config": { + "$ref": "#/components/schemas/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/components/schemas/NetworkSettings" + } + } + }, + "ContainerSummary": { + "type": "object", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Names": { + "description": "The names associated with this container. Most containers have a single\nname, but when using legacy \"links\", the container can have multiple\nnames.\n\nFor historic reasons, names are prefixed with a forward-slash (`/`).", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/funny_chatelet" + ] + }, + "Image": { + "description": "The name or ID of the image used to create the container.\n\nThis field shows the image reference as was specified when creating the container,\nwhich can be in its canonical form (e.g., `docker.io/library/ubuntu:latest`\nor `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`),\nshort form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`).\n\nThe content of this field can be updated at runtime if the image used to\ncreate the container is untagged, in which case the field is updated to\ncontain the the image ID (digest) it was resolved to in its canonical,\nnon-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`).", + "type": "string", + "example": "docker.io/library/ubuntu:latest" + }, + "ImageID": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ImageManifestDescriptor": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store.\n\nThis field is not populated in the `GET /system/df` endpoint.\n" + }, + { + "type": "null" + } + ] + } + ] + }, + "Command": { + "description": "Command to run when starting the container", + "type": "string", + "example": "/bin/bash" + }, + "Created": { + "description": "Date and time at which the container was created as a Unix timestamp\n(number of seconds since EPOCH).", + "type": "integer", + "format": "int64", + "example": "1739811096" + }, + "Ports": { + "description": "Port-mappings for the container.", + "type": "array", + "items": { + "$ref": "#/components/schemas/PortSummary" + } + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": [ + "integer", + "null" + ], + "format": "int64", + "example": "122880" + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": [ + "integer", + "null" + ], + "format": "int64", + "example": "1653948416" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + } + }, + "State": { + "description": "The state of this container.\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "exited", + "removing", + "dead" + ], + "example": "running" + }, + "Status": { + "description": "Additional human-readable status of this container (e.g. `Exit 0`)", + "type": "string", + "example": "Up 4 days" + }, + "HostConfig": { + "type": "object", + "description": "Summary of host-specific runtime information of the container. This\nis a reduced set of information in the container's \"HostConfig\" as\navailable in the container \"inspect\" response.", + "properties": { + "NetworkMode": { + "description": "Networking mode (`host`, `none`, `container:`) or name of the\nprimary network the container is using.\n\nThis field is primarily for backward compatibility. The container\ncan be connected to multiple networks for which information can be\nfound in the `NetworkSettings.Networks` field, which enumerates\nsettings per network.", + "type": "string", + "example": "mynetwork" + }, + "Annotations": { + "description": "Arbitrary key-value metadata attached to the container.", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "string" + }, + "example": { + "io.kubernetes.docker.type": "container", + "io.kubernetes.sandbox.id": "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" + } + } + } + }, + "NetworkSettings": { + "description": "Summary of the container's network settings", + "type": "object", + "properties": { + "Networks": { + "type": "object", + "description": "Summary of network-settings for each network the container is\nattached to.", + "additionalProperties": { + "$ref": "#/components/schemas/EndpointSettings" + } + } + } + }, + "Mounts": { + "type": "array", + "description": "List of mounts used by the container.", + "items": { + "$ref": "#/components/schemas/MountPoint" + } + }, + "Health": { + "type": "object", + "description": "Summary of health status\n\nAdded in v1.52, before that version all container summary not include Health.\nAfter this attribute introduced, it includes containers with no health checks configured,\nor containers that are not running with none", + "properties": { + "Status": { + "type": "string", + "description": "the health status of the container", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + } + } + } + } + }, + "ContainersDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/container", + "description": "represents system data usage information for container resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active containers.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all containers.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive containers.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by containers.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of container summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "Driver": { + "description": "Driver represents a driver (network, logging, secrets).", + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "Name of the driver.", + "type": "string", + "example": "some-driver" + }, + "Options": { + "description": "Key/value map of driver-specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + } + } + } + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the secret.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "description": "Data is the data to store as a secret, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nIt must be empty if the Driver field is set, in which case the data is\nloaded from an external secret store. The maximum allowed size is 500KB,\nas defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize).\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "type": "string", + "example": "" + }, + "Driver": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Name of the secrets driver used to fetch the secret's value from an\nexternal secret store.\n" + } + ] + }, + "Templating": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n" + } + ] + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the config.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Data": { + "description": "Data is the data to store as a config, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nThe maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize).\n", + "type": "string" + }, + "Templating": { + "allOf": [ + { + "$ref": "#/components/schemas/Driver" + }, + { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n" + } + ] + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "ContainerState": { + "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Status": { + "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ], + "example": "running" + }, + "Running": { + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "type": "boolean", + "example": true + }, + "Paused": { + "description": "Whether this container is paused.", + "type": "boolean", + "example": false + }, + "Restarting": { + "description": "Whether this container is restarting.", + "type": "boolean", + "example": false + }, + "OOMKilled": { + "description": "Whether a process within this container has been killed because it ran\nout of memory since the container was last started.\n", + "type": "boolean", + "example": false + }, + "Dead": { + "type": "boolean", + "example": false + }, + "Pid": { + "description": "The process ID of this container", + "type": "integer", + "example": 1234 + }, + "ExitCode": { + "description": "The last exit code of this container", + "type": "integer", + "example": 0 + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "description": "The time when this container was last started.", + "type": "string", + "example": "2020-01-06T09:06:59.461876391Z" + }, + "FinishedAt": { + "description": "The time when this container last exited.", + "type": "string", + "example": "2020-01-06T09:07:59.461876391Z" + }, + "Health": { + "$ref": "#/components/schemas/Health" + } + } + }, + "ContainerCreateResponse": { + "description": "OK response to ContainerCreate operation", + "type": "object", + "title": "ContainerCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warnings" + ], + "properties": { + "Id": { + "description": "The ID of the created container", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Warnings": { + "description": "Warnings encountered when creating the container", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + } + } + }, + "ContainerUpdateResponse": { + "type": "object", + "title": "ContainerUpdateResponse", + "x-go-name": "UpdateResponse", + "description": "Response for a successful container-update.", + "properties": { + "Warnings": { + "type": "array", + "description": "Warnings encountered when updating the container.", + "items": { + "type": "string" + }, + "example": [ + "Published ports are discarded when using host network mode" + ] + } + } + }, + "ContainerStatsResponse": { + "description": "Statistics sample for a container.\n", + "type": "object", + "x-go-name": "StatsResponse", + "title": "ContainerStatsResponse", + "properties": { + "id": { + "description": "ID of the container for which the stats were collected.\n", + "type": [ + "string", + "null" + ], + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "name": { + "description": "Name of the container for which the stats were collected.\n", + "type": [ + "string", + "null" + ], + "example": "boring_wozniak" + }, + "os_type": { + "description": "OSType is the OS of the container (\"linux\" or \"windows\") to allow\nplatform-specific handling of stats.\n", + "type": [ + "string", + "null" + ], + "example": "linux" + }, + "read": { + "description": "Date and time at which this sample was collected.\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:22.165243637Z" + }, + "cpu_stats": { + "$ref": "#/components/schemas/ContainerCPUStats" + }, + "memory_stats": { + "$ref": "#/components/schemas/ContainerMemoryStats" + }, + "networks": { + "description": "Network statistics for the container per interface.\n\nThis field is omitted if the container has no networking enabled.\n", + "additionalProperties": { + "$ref": "#/components/schemas/ContainerNetworkStats" + }, + "example": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + } + }, + "pids_stats": { + "$ref": "#/components/schemas/ContainerPidsStats" + }, + "blkio_stats": { + "$ref": "#/components/schemas/ContainerBlkioStats" + }, + "num_procs": { + "description": "The number of processors on the system.\n\nThis field is Windows-specific and always zero for Linux containers.\n", + "type": "integer", + "format": "uint32", + "example": 16 + }, + "storage_stats": { + "$ref": "#/components/schemas/ContainerStorageStats" + }, + "preread": { + "description": "Date and time at which this first sample was collected. This field\nis not propagated if the \"one-shot\" option is set. If the \"one-shot\"\noption is set, this field may be omitted, empty, or set to a default\ndate (`0001-01-01T00:00:00Z`).\n\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:21.160452595Z" + }, + "precpu_stats": { + "$ref": "#/components/schemas/ContainerCPUStats" + } + } + }, + "ContainerBlkioStats": { + "description": "BlkioStats stores all IO service stats for data read and write.\n\nThis type is Linux-specific and holds many fields that are specific to cgroups v1.\nOn a cgroup v2 host, all fields other than `io_service_bytes_recursive`\nare omitted or `null`.\n\nThis type is only populated on Linux and omitted for Windows containers.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "BlkioStats", + "properties": { + "io_service_bytes_recursive": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_serviced_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_queue_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_service_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_wait_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_merged_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "io_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + }, + "sectors_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerBlkioStatEntry" + } + } + }, + "example": { + "io_service_bytes_recursive": [ + { + "major": 254, + "minor": 0, + "op": "read", + "value": 7593984 + }, + { + "major": 254, + "minor": 0, + "op": "write", + "value": 100 + } + ], + "io_serviced_recursive": null, + "io_queue_recursive": null, + "io_service_time_recursive": null, + "io_wait_time_recursive": null, + "io_merged_recursive": null, + "io_time_recursive": null, + "sectors_recursive": null + } + }, + "ContainerBlkioStatEntry": { + "description": "Blkio stats entry.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "BlkioStatEntry", + "properties": { + "major": { + "type": "integer", + "format": "uint64", + "example": 254 + }, + "minor": { + "type": "integer", + "format": "uint64", + "example": 0 + }, + "op": { + "type": "string", + "example": "read" + }, + "value": { + "type": "integer", + "format": "uint64", + "example": 7593984 + } + } + }, + "ContainerCPUStats": { + "description": "CPU related info of the container\n", + "type": [ + "object", + "null" + ], + "x-go-name": "CPUStats", + "properties": { + "cpu_usage": { + "$ref": "#/components/schemas/ContainerCPUUsage" + }, + "system_cpu_usage": { + "description": "System Usage.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 5 + }, + "online_cpus": { + "description": "Number of online CPUs.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint32", + "example": 5 + }, + "throttling_data": { + "$ref": "#/components/schemas/ContainerThrottlingData" + } + } + }, + "ContainerCPUUsage": { + "description": "All CPU stats aggregated since container inception.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "CPUUsage", + "properties": { + "total_usage": { + "description": "Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows).\n", + "type": "integer", + "format": "uint64", + "example": 29912000 + }, + "percpu_usage": { + "description": "Total CPU time (in nanoseconds) consumed per core (Linux).\n\nThis field is Linux-specific when using cgroups v1. It is omitted\nwhen using cgroups v2 and Windows containers.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "integer", + "format": "uint64", + "example": 29912000 + } + }, + "usage_in_kernelmode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 21994000 + }, + "usage_in_usermode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 7918000 + } + } + }, + "ContainerPidsStats": { + "description": "PidsStats contains Linux-specific stats of a container's process-IDs (PIDs).\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "PidsStats", + "properties": { + "current": { + "description": "Current is the number of PIDs in the cgroup.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 5 + }, + "limit": { + "description": "Limit is the hard limit on the number of pids in the cgroup.\nA \"Limit\" of 0 means that there is no limit.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": "18446744073709551615" + } + } + }, + "ContainerThrottlingData": { + "description": "CPU throttling stats of the container.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "ThrottlingData", + "properties": { + "periods": { + "description": "Number of periods with throttling active.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_periods": { + "description": "Number of periods when the container hit its throttling limit.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_time": { + "description": "Aggregated time (in nanoseconds) the container was throttled for.\n", + "type": "integer", + "format": "uint64", + "example": 0 + } + } + }, + "ContainerMemoryStats": { + "description": "Aggregates all memory stats since container inception on Linux.\nWindows returns stats for commit and private working set only.\n", + "type": "object", + "x-go-name": "MemoryStats", + "properties": { + "usage": { + "description": "Current `res_counter` usage for memory.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + }, + "max_usage": { + "description": "Maximum usage ever recorded.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + }, + "stats": { + "description": "All the stats exported via memory.stat.\n\nThe fields in this object differ between cgroups v1 and v2.\nOn cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available.\nOn cgroups v2, fields such as `file`, `anon`, `inactive_file` are available.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "additionalProperties": { + "type": [ + "integer", + "null" + ], + "format": "uint64" + }, + "example": { + "active_anon": 1572864, + "active_file": 5115904, + "anon": 1572864, + "anon_thp": 0, + "file": 7626752, + "file_dirty": 0, + "file_mapped": 2723840, + "file_writeback": 0, + "inactive_anon": 0, + "inactive_file": 2510848, + "kernel_stack": 16384, + "pgactivate": 0, + "pgdeactivate": 0, + "pgfault": 2042, + "pglazyfree": 0, + "pglazyfreed": 0, + "pgmajfault": 45, + "pgrefill": 0, + "pgscan": 0, + "pgsteal": 0, + "shmem": 0, + "slab": 1180928, + "slab_reclaimable": 725576, + "slab_unreclaimable": 455352, + "sock": 0, + "thp_collapse_alloc": 0, + "thp_fault_alloc": 1, + "unevictable": 0, + "workingset_activate": 0, + "workingset_nodereclaim": 0, + "workingset_refault": 0 + } + }, + "failcnt": { + "description": "Number of times memory usage hits limits.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + }, + "limit": { + "description": "This field is Linux-specific and omitted for Windows containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 8217579520 + }, + "commitbytes": { + "description": "Committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + }, + "commitpeakbytes": { + "description": "Peak committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + }, + "privateworkingset": { + "description": "Private working set.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 0 + } + } + }, + "ContainerNetworkStats": { + "description": "Aggregates the network stats of one container\n", + "type": [ + "object", + "null" + ], + "x-go-name": "NetworkStats", + "properties": { + "rx_bytes": { + "description": "Bytes received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 5338 + }, + "rx_packets": { + "description": "Packets received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 36 + }, + "rx_errors": { + "description": "Received errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "rx_dropped": { + "description": "Incoming packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_bytes": { + "description": "Bytes sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 1200 + }, + "tx_packets": { + "description": "Packets sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 12 + }, + "tx_errors": { + "description": "Sent errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_dropped": { + "description": "Outgoing packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "endpoint_id": { + "description": "Endpoint ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": [ + "string", + "null" + ] + }, + "instance_id": { + "description": "Instance ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": [ + "string", + "null" + ] + } + } + }, + "ContainerStorageStats": { + "description": "StorageStats is the disk I/O stats for read/write on Windows.\n\nThis type is Windows-specific and omitted for Linux containers.\n", + "type": [ + "object", + "null" + ], + "x-go-name": "StorageStats", + "properties": { + "read_count_normalized": { + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 7593984 + }, + "read_size_bytes": { + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 7593984 + }, + "write_count_normalized": { + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 7593984 + }, + "write_size_bytes": { + "type": [ + "integer", + "null" + ], + "format": "uint64", + "example": 7593984 + } + } + }, + "ContainerTopResponse": { + "type": "object", + "x-go-name": "TopResponse", + "title": "ContainerTopResponse", + "description": "Container \"top\" response.", + "properties": { + "Titles": { + "description": "The ps column titles", + "type": "array", + "items": { + "type": "string" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ] + } + }, + "Processes": { + "description": "Each process running in the container, where each process\nis an array of values corresponding to the titles.", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": { + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + } + } + }, + "ContainerWaitResponse": { + "description": "OK response to ContainerWait operation", + "type": "object", + "x-go-name": "WaitResponse", + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "properties": { + "StatusCode": { + "description": "Exit code of the container", + "type": "integer", + "format": "int64" + }, + "Error": { + "$ref": "#/components/schemas/ContainerWaitExitError" + } + } + }, + "ContainerWaitExitError": { + "description": "container waiting error, if any", + "type": "object", + "x-go-name": "WaitExitError", + "properties": { + "Message": { + "description": "Details of an error", + "type": "string" + } + } + }, + "SystemVersion": { + "type": "object", + "description": "Response of Engine API: GET \"/version\"\n", + "properties": { + "Platform": { + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "description": "Information about system components\n", + "items": { + "type": "object", + "x-go-name": "ComponentVersion", + "required": [ + "Name", + "Version" + ], + "properties": { + "Name": { + "description": "Name of the component\n", + "type": "string", + "example": "Engine" + }, + "Version": { + "description": "Version of the component\n", + "type": "string", + "example": "27.0.1" + }, + "Details": { + "description": "Key/value pairs of strings with additional information about the\ncomponent. These values are intended for informational purposes\nonly, and their content is not defined, and not part of the API\nspecification.\n\nThese messages can be printed by the client as information to the user.\n", + "type": [ + "object", + "null" + ] + } + } + } + }, + "Version": { + "description": "The version of the daemon", + "type": "string", + "example": "27.0.1" + }, + "ApiVersion": { + "description": "The default (and highest) API version that is supported by the daemon\n", + "type": "string", + "example": "1.47" + }, + "MinAPIVersion": { + "description": "The minimum API version that is supported by the daemon\n", + "type": "string", + "example": "1.24" + }, + "GitCommit": { + "description": "The Git commit of the source code that was used to build the daemon\n", + "type": "string", + "example": "48a66213fe" + }, + "GoVersion": { + "description": "The version Go used to compile the daemon, and the version of the Go\nruntime in use.\n", + "type": "string", + "example": "go1.22.7" + }, + "Os": { + "description": "The operating system that the daemon is running on (\"linux\" or \"windows\")\n", + "type": "string", + "example": "linux" + }, + "Arch": { + "description": "Architecture of the daemon, as returned by the Go runtime (`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "amd64" + }, + "KernelVersion": { + "description": "The kernel version (`uname -r`) that the daemon is running on.\n\nThis field is omitted when empty.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "Experimental": { + "description": "Indicates if the daemon is started with experimental features enabled.\n\nThis field is omitted when empty / false.\n", + "type": "boolean", + "example": true + }, + "BuildTime": { + "description": "The date and time that the daemon was compiled.\n", + "type": "string", + "example": "2020-06-22T15:49:27.000000000+00:00" + } + } + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "description": "Unique identifier of the daemon.\n\n\n\n\n\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "type": "string", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "description": "Total number of containers on the host.", + "type": "integer", + "example": 14 + }, + "ContainersRunning": { + "description": "Number of containers with status `\"running\"`.\n", + "type": "integer", + "example": 3 + }, + "ContainersPaused": { + "description": "Number of containers with status `\"paused\"`.\n", + "type": "integer", + "example": 1 + }, + "ContainersStopped": { + "description": "Number of containers with status `\"stopped\"`.\n", + "type": "integer", + "example": 10 + }, + "Images": { + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "type": "integer", + "example": 508 + }, + "Driver": { + "description": "Name of the storage driver in use.", + "type": "string", + "example": "overlay2" + }, + "DriverStatus": { + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ] + }, + "DockerRootDir": { + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "type": "string", + "example": "/var/lib/docker" + }, + "Plugins": { + "$ref": "#/components/schemas/PluginsInfo" + }, + "MemoryLimit": { + "description": "Indicates if the host has memory limit support enabled.", + "type": "boolean", + "example": true + }, + "SwapLimit": { + "description": "Indicates if the host has memory swap limit support enabled.", + "type": "boolean", + "example": true + }, + "CpuCfsPeriod": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CpuCfsQuota": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CPUShares": { + "description": "Indicates if CPU Shares limiting is supported by the host.\n", + "type": "boolean", + "example": true + }, + "CPUSet": { + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "type": "boolean", + "example": true + }, + "PidsLimit": { + "description": "Indicates if the host kernel has PID limit support enabled.", + "type": "boolean", + "example": true + }, + "OomKillDisable": { + "description": "Indicates if OOM killer disable is supported on the host.", + "type": "boolean" + }, + "IPv4Forwarding": { + "description": "Indicates IPv4 forwarding is enabled.", + "type": "boolean", + "example": true + }, + "Debug": { + "description": "Indicates if the daemon is running in debug-mode / with debug-level\nlogging enabled.\n", + "type": "boolean", + "example": true + }, + "NFd": { + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 64 + }, + "NGoroutines": { + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 174 + }, + "SystemTime": { + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "type": "string", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "description": "The logging driver to use as a default for new containers.\n", + "type": "string" + }, + "CgroupDriver": { + "description": "The driver to use for managing cgroups.\n", + "type": "string", + "enum": [ + "cgroupfs", + "systemd", + "none" + ], + "default": "cgroupfs", + "example": "cgroupfs" + }, + "CgroupVersion": { + "description": "The version of the cgroup.\n", + "type": "string", + "enum": [ + "1", + "2" + ], + "default": "1", + "example": "1" + }, + "NEventsListener": { + "description": "Number of event listeners subscribed.", + "type": "integer", + "example": 30 + }, + "KernelVersion": { + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "OperatingSystem": { + "description": "Name of the host's operating system, for example: \"Ubuntu 24.04 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "type": "string", + "example": "Ubuntu 24.04 LTS" + }, + "OSVersion": { + "description": "Version of the host's operating system\n\n\n\n\n\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "type": "string", + "example": "24.04" + }, + "OSType": { + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "linux" + }, + "Architecture": { + "description": "Hardware architecture of the host, as returned by the operating system.\nThis is equivalent to the output of `uname -m` on Linux.\n\nUnlike `Arch` (from `/version`), this reports the machine's native\narchitecture, which can differ from the Go runtime architecture when\nrunning a binary compiled for a different architecture (for example,\na 32-bit binary running on 64-bit hardware).\n", + "type": "string", + "example": "x86_64" + }, + "NCPU": { + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "type": "integer", + "example": 4 + }, + "MemTotal": { + "description": "Total amount of physical memory available on the host, in bytes.\n", + "type": "integer", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "default": "https://index.docker.io/v1/", + "type": "string", + "example": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/components/schemas/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/components/schemas/GenericResources" + }, + "HttpProxy": { + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + }, + "NoProxy": { + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "*.local, 169.254/16" + }, + "Name": { + "description": "Hostname of the host.", + "type": "string", + "example": "node5.corp.example.com" + }, + "Labels": { + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n\n\n\n\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "storage=ssd", + "production" + ] + }, + "ExperimentalBuild": { + "description": "Indicates if experimental features are enabled on the daemon.\n", + "type": "boolean", + "example": true + }, + "ServerVersion": { + "description": "Version string of the daemon.\n", + "type": "string", + "example": "27.0.1" + }, + "Runtimes": { + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Runtime" + }, + "default": { + "runc": { + "path": "runc" + } + }, + "example": { + "runc": { + "path": "runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "type": "string", + "default": "runc", + "example": "runc" + }, + "Swarm": { + "$ref": "#/components/schemas/SwarmInfo" + }, + "LiveRestoreEnabled": { + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "type": "boolean", + "default": false, + "example": false + }, + "Isolation": { + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "type": "string", + "enum": [ + "default", + "hyperv", + "process", + "" + ] + }, + "InitBinary": { + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/components/schemas/Commit" + }, + "RuncCommit": { + "$ref": "#/components/schemas/Commit" + }, + "InitCommit": { + "$ref": "#/components/schemas/Commit" + }, + "SecurityOptions": { + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, user-namespaces (userns), rootless and\nno-new-privileges.\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns", + "name=rootless" + ] + }, + "ProductLicense": { + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "type": "string", + "example": "Community Engine" + }, + "DefaultAddressPools": { + "description": "List of custom default address pools for local networks, which can be\nspecified in the daemon.json file or dockerd option.\n\nExample: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n10.10.[0-255].0/24 address pools.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Base": { + "description": "The network address in CIDR format", + "type": "string", + "example": "10.10.0.0/16" + }, + "Size": { + "description": "The network pool size", + "type": "integer", + "example": "24" + } + } + } + }, + "FirewallBackend": { + "$ref": "#/components/schemas/FirewallInfo" + }, + "DiscoveredDevices": { + "description": "List of devices discovered by device drivers.\n\nEach device includes information about its source driver, kind, name,\nand additional driver-specific attributes.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceInfo" + } + }, + "NRI": { + "$ref": "#/components/schemas/NRIInfo" + }, + "Warnings": { + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "WARNING: No memory limit support" + ] + }, + "CDISpecDirs": { + "description": "List of directories where (Container Device Interface) CDI\nspecifications are located.\n\nThese specifications define vendor-specific modifications to an OCI\nruntime specification for a container being created.\n\nAn empty list indicates that CDI device injection is disabled.\n\nNote that since using CDI device injection requires the daemon to have\nexperimental enabled. For non-experimental daemons an empty list will\nalways be returned.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/etc/cdi", + "/var/run/cdi" + ] + }, + "Containerd": { + "$ref": "#/components/schemas/ContainerdInfo" + } + } + }, + "ContainerdInfo": { + "description": "Information for connecting to the containerd instance that is used by the daemon.\nThis is included for debugging purposes only.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Address": { + "description": "The address of the containerd socket.", + "type": "string", + "example": "/run/containerd/containerd.sock" + }, + "Namespaces": { + "description": "The namespaces that the daemon uses for running containers and\nplugins in containerd. These namespaces can be configured in the\ndaemon configuration, and are considered to be used exclusively\nby the daemon, Tampering with the containerd instance may cause\nunexpected behavior.\n\nAs these namespaces are considered to be exclusively accessed\nby the daemon, it is not recommended to change these values,\nor to change them to a value that is used by other systems,\nsuch as cri-containerd.\n", + "type": "object", + "properties": { + "Containers": { + "description": "The default containerd namespace used for containers managed\nby the daemon.\n\nThe default namespace for containers is \"moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "moby", + "example": "moby" + }, + "Plugins": { + "description": "The default containerd namespace used for plugins managed by\nthe daemon.\n\nThe default namespace for plugins is \"plugins.moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "plugins.moby", + "example": "plugins.moby" + } + } + } + } + }, + "FirewallInfo": { + "description": "Information about the daemon's firewalling configuration.\n\nThis field is currently only used on Linux, and omitted on other platforms.\n", + "type": [ + "object", + "null" + ], + "properties": { + "Driver": { + "description": "The name of the firewall backend driver.\n", + "type": "string", + "example": "nftables" + }, + "Info": { + "description": "Information about the firewall backend, provided as\n\"label\" / \"value\" pairs.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "ReloadedAt", + "2025-01-01T00:00:00Z" + ] + ] + } + } + }, + "PluginsInfo": { + "description": "Available plugins per type.\n\n\n\n\n\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n", + "type": "object", + "properties": { + "Volume": { + "description": "Names of available volume-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "local" + ] + }, + "Network": { + "description": "Names of available network-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ] + }, + "Authorization": { + "description": "Names of available authorization plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "img-authz-plugin", + "hbm" + ] + }, + "Log": { + "description": "Names of available logging-drivers, and logging-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "splunk", + "syslog" + ] + } + } + }, + "RegistryServiceConfig": { + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "type": [ + "object", + "null" + ], + "properties": { + "InsecureRegistryCIDRs": { + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`::1/128` and `127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "::1/128", + "127.0.0.0/8" + ] + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ] + } + } + }, + "IndexInfo": { + "description": "IndexInfo contains information about a registry.", + "type": [ + "object", + "null" + ], + "properties": { + "Name": { + "description": "Name of the registry, such as \"docker.io\".\n", + "type": "string", + "example": "docker.io" + }, + "Mirrors": { + "description": "List of mirrors, expressed as URIs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ] + }, + "Secure": { + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "type": "boolean", + "example": true + }, + "Official": { + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "type": "boolean", + "example": true + } + } + }, + "Runtime": { + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n", + "type": "object", + "properties": { + "path": { + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "example": [ + "--debug", + "--systemd-cgroup=false" + ] + }, + "status": { + "description": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "string" + }, + "example": { + "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" + } + } + } + }, + "Commit": { + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n", + "type": "object", + "properties": { + "ID": { + "description": "Actual commit ID of external tool.", + "type": "string", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + } + } + }, + "SwarmInfo": { + "description": "Represents generic information about swarm.\n", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string", + "default": "", + "example": "k67qz4598weg5unwwffg6z1m1" + }, + "NodeAddr": { + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "type": "string", + "default": "", + "example": "10.0.0.46" + }, + "LocalNodeState": { + "$ref": "#/components/schemas/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "default": false, + "example": true + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "description": "List of ID's and addresses of other managers in the swarm.\n", + "type": [ + "array", + "null" + ], + "default": null, + "items": { + "$ref": "#/components/schemas/PeerNode" + }, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ] + }, + "Nodes": { + "description": "Total number of nodes in the swarm.", + "type": [ + "integer", + "null" + ], + "example": 4 + }, + "Managers": { + "description": "Total number of managers in the swarm.", + "type": [ + "integer", + "null" + ], + "example": 3 + }, + "Cluster": { + "$ref": "#/components/schemas/ClusterInfo" + } + } + }, + "LocalNodeState": { + "description": "Current local status of this node.", + "type": "string", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ], + "example": "active" + }, + "PeerNode": { + "description": "Represents a peer-node in the swarm", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string" + }, + "Addr": { + "description": "IP address and ports at which this node can be reached.\n", + "type": "string" + } + } + }, + "NetworkAttachmentConfig": { + "description": "Specifies how a service should be attached to a particular network.\n", + "type": "object", + "properties": { + "Target": { + "description": "The target network for attachment. Must be a network name or ID.\n", + "type": "string" + }, + "Aliases": { + "description": "Discoverable alternate names for the service on this network.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "description": "Driver attachment options for the network target.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "EventActor": { + "description": "Actor describes something that generates events, like a container, network,\nor a volume.\n", + "type": "object", + "properties": { + "ID": { + "description": "The ID of the object emitting the event", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Attributes": { + "description": "Various key/value attributes of the object, depending on its type.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-label-value", + "image": "alpine:latest", + "name": "my-container" + } + } + } + }, + "EventMessage": { + "description": "EventMessage represents the information an event contains.\n", + "type": "object", + "title": "SystemEventsResponse", + "properties": { + "Type": { + "description": "The type of object emitting the event", + "type": "string", + "enum": [ + "builder", + "config", + "container", + "daemon", + "image", + "network", + "node", + "plugin", + "secret", + "service", + "volume" + ], + "example": "container" + }, + "Action": { + "description": "The type of event", + "type": "string", + "example": "create" + }, + "Actor": { + "$ref": "#/components/schemas/EventActor" + }, + "scope": { + "description": "Scope of the event. Engine events are `local` scope. Cluster (Swarm)\nevents are `swarm` scope.\n", + "type": "string", + "enum": [ + "local", + "swarm" + ] + }, + "time": { + "description": "Timestamp of event", + "type": "integer", + "format": "int64", + "example": 1629574695 + }, + "timeNano": { + "description": "Timestamp of event, with nanosecond accuracy", + "type": "integer", + "format": "int64", + "example": 1629574695515050000 + } + } + }, + "OCIDescriptor": { + "type": "object", + "x-go-name": "Descriptor", + "description": "A descriptor struct containing digest, media type, and size, as defined in\nthe [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).\n", + "properties": { + "mediaType": { + "description": "The media type of the object this schema refers to.\n", + "type": "string", + "example": "application/vnd.oci.image.manifest.v1+json" + }, + "digest": { + "description": "The digest of the targeted content.\n", + "type": "string", + "example": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + }, + "size": { + "description": "The size in bytes of the blob.\n", + "type": "integer", + "format": "int64", + "example": 424 + }, + "urls": { + "description": "List of URLs from which this object MAY be downloaded.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "format": "uri" + } + }, + "annotations": { + "description": "Arbitrary metadata relating to the targeted content.", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.base.digest": "sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8", + "org.opencontainers.image.base.name": "scratch", + "org.opencontainers.image.created": "2025-01-27T00:00:00Z", + "org.opencontainers.image.revision": "9fabb4bad5138435b01857e2fe9363e2dc5f6a79", + "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base", + "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu", + "org.opencontainers.image.version": "24.04" + } + }, + "data": { + "type": [ + "string", + "null" + ], + "description": "Data is an embedding of the targeted content. This is encoded as a base64\nstring when marshalled to JSON (automatically, by encoding/json). If\npresent, Data can be used directly to avoid fetching the targeted content.", + "example": null + }, + "platform": { + "$ref": "#/components/schemas/OCIPlatform" + }, + "artifactType": { + "description": "ArtifactType is the IANA media type of this artifact.", + "type": [ + "string", + "null" + ], + "example": null + } + } + }, + "OCIPlatform": { + "type": [ + "object", + "null" + ], + "x-go-name": "Platform", + "description": "Describes the platform which the image in the manifest runs on, as defined\nin the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).\n", + "properties": { + "architecture": { + "description": "The CPU architecture, for example `amd64` or `ppc64`.\n", + "type": "string", + "example": "arm" + }, + "os": { + "description": "The operating system, for example `linux` or `windows`.\n", + "type": "string", + "example": "windows" + }, + "os.version": { + "description": "Optional field specifying the operating system version, for example on\nWindows `10.0.19041.1165`.\n", + "type": "string", + "example": "10.0.19041.1165" + }, + "os.features": { + "description": "Optional field specifying an array of strings, each listing a required\nOS feature (for example on Windows `win32k`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "win32k" + ] + }, + "variant": { + "description": "Optional field specifying a variant of the CPU, for example `v7` to\nspecify ARMv7 when architecture is `arm`.\n", + "type": "string", + "example": "v7" + } + } + }, + "DistributionInspect": { + "type": "object", + "x-go-name": "DistributionInspect", + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "description": "Describes the result obtained from contacting the registry to retrieve\nimage metadata.\n", + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image.\n", + "items": { + "$ref": "#/components/schemas/OCIPlatform" + } + } + } + }, + "ClusterVolume": { + "type": "object", + "description": "Options and information specific to, and only present on, Swarm CSI\ncluster volumes.\n", + "properties": { + "ID": { + "type": "string", + "description": "The Swarm ID of this volume. Because cluster volumes are Swarm\nobjects, they have an ID, unlike non-cluster volumes. This ID can\nbe used to refer to the Volume instead of the name.\n" + }, + "Version": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + }, + "Info": { + "type": "object", + "description": "Information about the global status of the volume.\n", + "properties": { + "CapacityBytes": { + "type": "integer", + "format": "int64", + "description": "The capacity of the volume in bytes. A value of 0 indicates that\nthe capacity is unknown.\n" + }, + "VolumeContext": { + "type": "object", + "description": "A map of strings to strings returned from the storage plugin when\nthe volume is created.\n", + "additionalProperties": { + "type": "string" + } + }, + "VolumeID": { + "type": "string", + "description": "The ID of the volume as returned by the CSI storage plugin. This\nis distinct from the volume's ID as provided by Docker. This ID\nis never used by the user when communicating with Docker to refer\nto this volume. If the ID is blank, then the Volume has not been\nsuccessfully created in the plugin yet.\n" + }, + "AccessibleTopology": { + "type": "array", + "description": "The topology this volume is actually accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + } + }, + "PublishStatus": { + "type": "array", + "description": "The status of the volume as it pertains to its publishing and use on\nspecific nodes\n", + "items": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "The ID of the Swarm node the volume is published on.\n" + }, + "State": { + "type": "string", + "description": "The published state of the volume.\n* `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.\n* `published` The volume is published successfully to the node.\n* `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.\n* `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.\n", + "enum": [ + "pending-publish", + "published", + "pending-node-unpublish", + "pending-controller-unpublish" + ] + }, + "PublishContext": { + "type": "object", + "description": "A map of strings to strings returned by the CSI controller\nplugin when a volume is published.\n", + "additionalProperties": { + "type": "string" + } + } + } + } + } + } + }, + "ClusterVolumeSpec": { + "type": "object", + "description": "Cluster-specific options used to create the volume.\n", + "properties": { + "Group": { + "type": "string", + "description": "Group defines the volume group of this volume. Volumes belonging to\nthe same group can be referred to by group name when creating\nServices. Referring to a volume by group instructs Swarm to treat\nvolumes in that group interchangeably for the purpose of scheduling.\nVolumes with an empty string for a group technically all belong to\nthe same, emptystring group.\n" + }, + "AccessMode": { + "type": "object", + "description": "Defines how the volume is used by tasks.\n", + "properties": { + "Scope": { + "type": "string", + "description": "The set of nodes this volume can be used on at one time.\n- `single` The volume may only be scheduled to one node at a time.\n- `multi` the volume may be scheduled to any supported number of nodes at a time.\n", + "default": "single", + "enum": [ + "single", + "multi" + ] + }, + "Sharing": { + "type": "string", + "description": "The number and way that different tasks can use this volume\nat one time.\n- `none` The volume may only be used by one task at a time.\n- `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly\n- `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.\n- `all` The volume may have any number of readers and writers.\n", + "default": "none", + "enum": [ + "none", + "readonly", + "onewriter", + "all" + ] + }, + "MountVolume": { + "type": "object", + "description": "Options for using this volume as a Mount-type volume.\n\n Either MountVolume or BlockVolume, but not both, must be\n present.\n properties:\n FsType:\n type: \"string\"\n description: |\n Specifies the filesystem type for the mount volume.\n Optional.\n MountFlags:\n type: \"array\"\n description: |\n Flags to pass when mounting the volume. Optional.\n items:\n type: \"string\"\nBlockVolume:\n type: \"object\"\n description: |\n Options for using this volume as a Block-type volume.\n Intentionally empty.\n" + }, + "Secrets": { + "type": "array", + "description": "Swarm Secrets that are passed to the CSI storage plugin when\noperating on this volume.\n", + "items": { + "type": "object", + "description": "One cluster volume secret entry. Defines a key-value pair that\nis passed to the plugin.\n", + "properties": { + "Key": { + "type": "string", + "description": "Key is the name of the key of the key-value pair passed to\nthe plugin.\n" + }, + "Secret": { + "type": "string", + "description": "Secret is the swarm Secret object from which to read data.\nThis can be a Secret name or ID. The Secret data is\nretrieved by swarm and used as the value of the key-value\npair passed to the plugin.\n" + } + } + } + }, + "AccessibilityRequirements": { + "type": "object", + "description": "Requirements for the accessible topology of the volume. These\nfields are optional. For an in-depth description of what these\nfields mean, see the CSI specification.\n", + "properties": { + "Requisite": { + "type": "array", + "description": "A list of required topologies, at least one of which the\nvolume must be accessible from.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + }, + "Preferred": { + "type": "array", + "description": "A list of topologies that the volume should attempt to be\nprovisioned in.\n", + "items": { + "$ref": "#/components/schemas/Topology" + } + } + } + }, + "CapacityRange": { + "type": "object", + "description": "The desired capacity that the volume should be created with. If\nempty, the plugin will decide the capacity.\n", + "properties": { + "RequiredBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must be at least this big. The value of 0\nindicates an unspecified minimum\n" + }, + "LimitBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must not be bigger than this. The value of 0\nindicates an unspecified maximum.\n" + } + } + }, + "Availability": { + "type": "string", + "description": "The availability of the volume for use in tasks.\n- `active` The volume is fully available for scheduling on the cluster\n- `pause` No new workloads should use the volume, but existing workloads are not stopped.\n- `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.\n", + "default": "active", + "enum": [ + "active", + "pause", + "drain" + ] + } + } + } + } + }, + "Topology": { + "description": "A map of topological domains to topological segments. For in depth\ndetails, see documentation for the Topology object in the CSI\nspecification.\n", + "type": "object", + "properties": { + "Segments": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "AttestationStatement": { + "x-go-name": "AttestationStatement", + "description": "AttestationStatement is a single in-toto statement attached to an image.\n", + "type": "object", + "required": [ + "Descriptor", + "PredicateType" + ], + "properties": { + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "PredicateType": { + "description": "The in-toto predicate type URI of this statement.", + "type": "string", + "example": "https://slsa.dev/provenance/v0.2" + }, + "Statement": { + "description": "The verbatim in-toto statement JSON. Only included when the caller\nopts in via the `statement=true` query parameter; otherwise absent.\n", + "type": [ + "object", + "null" + ] + } + } + }, + "ImageManifestSummary": { + "x-go-name": "ManifestSummary", + "description": "ImageManifestSummary represents a summary of an image manifest.\n", + "type": "object", + "required": [ + "ID", + "Descriptor", + "Available", + "Size", + "Kind" + ], + "properties": { + "ID": { + "description": "ID is the content-addressable ID of an image and is the same as the\ndigest of the image manifest.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + }, + "Descriptor": { + "$ref": "#/components/schemas/OCIDescriptor" + }, + "Available": { + "description": "Indicates whether all the child content (image config, layers) is fully available locally.", + "type": "boolean", + "example": true + }, + "Size": { + "type": "object", + "required": [ + "Content", + "Total" + ], + "properties": { + "Total": { + "type": "integer", + "format": "int64", + "example": 8213251, + "description": "Total is the total size (in bytes) of all the locally present\ndata (both distributable and non-distributable) that's related to\nthis manifest and its children.\nThis equal to the sum of [Content] size AND all the sizes in the\n[Size] struct present in the Kind-specific data struct.\nFor example, for an image kind (Kind == \"image\")\nthis would include the size of the image content and unpacked\nimage snapshots ([Size.Content] + [ImageData.Size.Unpacked]).\n" + }, + "Content": { + "description": "Content is the size (in bytes) of all the locally present\ncontent in the content store (e.g. image config, layers)\nreferenced by this manifest and its children.\nThis only includes blobs in the content store.\n", + "type": "integer", + "format": "int64", + "example": 3987495 + } + } + }, + "Kind": { + "type": "string", + "example": "image", + "enum": [ + "image", + "attestation", + "unknown" + ], + "description": "The kind of the manifest.\n\nkind | description\n-------------|-----------------------------------------------------------\nimage | Image manifest that can be used to start a container.\nattestation | Attestation manifest produced by the Buildkit builder for a specific image manifest.\n" + }, + "ImageData": { + "description": "The image data for the image manifest.\nThis field is only populated when Kind is \"image\".\n", + "type": [ + "object", + "null" + ], + "x-omitempty": true, + "required": [ + "Platform", + "Containers", + "Size", + "UnpackedSize" + ], + "properties": { + "Platform": { + "allOf": [ + { + "$ref": "#/components/schemas/OCIPlatform" + }, + { + "description": "OCI platform of the image. This will be the platform specified in the\nmanifest descriptor from the index/manifest list.\nIf it's not available, it will be obtained from the image config.\n" + } + ] + }, + "Identity": { + "allOf": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "anyOf": [ + { + "description": "Identity holds information about the identity and origin of this image.\nFor image list responses, this can duplicate Build/Pull fields across\nimage manifests, because those parts are image-level metadata.\n" + }, + { + "type": "null" + } + ] + } + ] + }, + "Containers": { + "description": "The IDs of the containers that are using this image.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430", + "abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e" + ] + }, + "Size": { + "type": "object", + "required": [ + "Unpacked" + ], + "properties": { + "Unpacked": { + "type": "integer", + "format": "int64", + "example": 3987495, + "description": "Unpacked is the size (in bytes) of the locally unpacked\n(uncompressed) image content that's directly usable by the containers\nrunning this image.\nIt's independent of the distributable content - e.g.\nthe image might still have an unpacked data that's still used by\nsome container even when the distributable/compressed content is\nalready gone.\n" + } + } + } + } + }, + "AttestationData": { + "description": "The image data for the attestation manifest.\nThis field is only populated when Kind is \"attestation\".\n", + "type": [ + "object", + "null" + ], + "x-omitempty": true, + "required": [ + "For" + ], + "properties": { + "For": { + "description": "The digest of the image manifest that this attestation is for.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + } + } + } + } + } + } + }, + "id": "engine-1.56-fd4cfee0e177", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/components" + }, + { + "pointer": "/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json", + "text/plain" + ], + "id": "engine-1.56-38ce21e76793", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/consumes", + "destinationPointer": null + }, + { + "pointer": "/definitions", + "beforePresent": true, + "afterPresent": false, + "before": { + "ImageHistoryResponseItem": { + "type": "object", + "x-go-name": "HistoryResponseItem", + "title": "HistoryResponseItem", + "description": "individual image layer information in response to ImageHistory operation", + "required": [ + "Id", + "Created", + "CreatedBy", + "Tags", + "Size", + "Comment" + ], + "properties": { + "Id": { + "type": "string", + "x-nullable": false + }, + "Created": { + "type": "integer", + "format": "int64", + "x-nullable": false + }, + "CreatedBy": { + "type": "string", + "x-nullable": false + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer", + "format": "int64", + "x-nullable": false + }, + "Comment": { + "type": "string", + "x-nullable": false + } + } + }, + "PortSummary": { + "type": "object", + "description": "Describes a port-mapping between the container and the host.\n", + "required": [ + "PrivatePort", + "Type" + ], + "properties": { + "IP": { + "type": "string", + "format": "ip-address", + "description": "Host IP address that the container's port is mapped to", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "PrivatePort": { + "type": "integer", + "format": "uint16", + "x-nullable": false, + "description": "Port on the container" + }, + "PublicPort": { + "type": "integer", + "format": "uint16", + "description": "Port exposed on the host" + }, + "Type": { + "type": "string", + "x-nullable": false, + "enum": [ + "tcp", + "udp", + "sctp" + ] + } + }, + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "MountType": { + "description": "The mount type. Available types:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.", + "type": "string", + "enum": [ + "bind", + "cluster", + "image", + "npipe", + "tmpfs", + "volume" + ], + "example": "volume" + }, + "MountPoint": { + "type": "object", + "description": "MountPoint represents a mount point configuration inside the container.\nThis is used for reporting the mountpoints in use by a container.\n", + "properties": { + "Type": { + "description": "The mount type:\n\n- `bind` a mount of a file or directory from the host into the container.\n- `cluster` a Swarm cluster volume.\n- `image` an OCI image.\n- `npipe` a named pipe from the host into the container.\n- `tmpfs` a `tmpfs`.\n- `volume` a docker volume with the given `Name`.\n", + "allOf": [ + { + "$ref": "#/definitions/MountType" + } + ], + "example": "volume" + }, + "Name": { + "description": "Name is the name reference to the underlying data defined by `Source`\ne.g., the volume name.\n", + "type": "string", + "example": "myvolume" + }, + "Source": { + "description": "Source location of the mount.\n\nFor volumes, this contains the storage location of the volume (within\n`/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\nthe source (host) part of the bind-mount. For `tmpfs` mount points, this\nfield is empty.\n", + "type": "string", + "example": "/var/lib/docker/volumes/myvolume/_data" + }, + "Destination": { + "description": "Destination is the path relative to the container root (`/`) where\nthe `Source` is mounted inside the container.\n", + "type": "string", + "example": "/usr/share/nginx/html/" + }, + "Driver": { + "description": "Driver is the volume driver used to create the volume (if it is a volume).\n", + "type": "string", + "example": "local" + }, + "Mode": { + "description": "Mode is a comma separated list of options supplied by the user when\ncreating the bind/volume mount.\n\nThe default is platform-specific (`\"z\"` on Linux, empty on Windows).\n", + "type": "string", + "example": "z" + }, + "RW": { + "description": "Whether the mount is mounted writable (read-write).\n", + "type": "boolean", + "example": true + }, + "Propagation": { + "description": "Propagation describes how mounts are propagated from the host into the\nmount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)\nfor details. This field is not used on Windows.\n", + "type": "string", + "example": "" + } + } + }, + "DeviceMapping": { + "type": "object", + "description": "A device mapping between the host and container", + "properties": { + "PathOnHost": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "CgroupPermissions": { + "type": "string" + } + }, + "example": { + "PathOnHost": "/dev/deviceName", + "PathInContainer": "/dev/deviceName", + "CgroupPermissions": "mrw" + } + }, + "DeviceRequest": { + "type": "object", + "description": "A request for devices to be sent to device drivers", + "properties": { + "Driver": { + "description": "The name of the device driver to use for this request.\n\nNote that if this is specified the capabilities are ignored when\nselecting a device driver.\n", + "type": "string", + "example": "nvidia" + }, + "Count": { + "type": "integer", + "example": -1 + }, + "DeviceIDs": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ] + }, + "Capabilities": { + "description": "A list of capabilities; an OR list of AND lists of capabilities.\n\nNote that if a driver is specified the capabilities have no effect on\nselecting a driver as the driver name is used directly.\n\nNote that if no driver is specified the capabilities are used to\nselect a driver with the required capabilities.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "gpu", + "nvidia", + "compute" + ] + ] + }, + "Options": { + "description": "Driver-specific options, specified as a key/value pairs. These options\nare passed directly to the driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "description": "Device path", + "type": "string" + }, + "Rate": { + "description": "Rate", + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "Mount": { + "type": "object", + "properties": { + "Target": { + "description": "Container path.", + "type": "string" + }, + "Source": { + "description": "Mount source (e.g. a volume name, a host path). The source cannot be\nspecified when using `Type=tmpfs`. For `Type=bind`, the source path\nmust either exist, or the `CreateMountpoint` must be set to `true` to\ncreate the source path on the host if missing.\n\nFor `Type=npipe`, the pipe must exist prior to creating the container.", + "type": "string" + }, + "Type": { + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container.\n- `cluster` a Swarm cluster volume\n- `image` Mounts an image.\n- `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container.\n- `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n", + "allOf": [ + { + "$ref": "#/definitions/MountType" + } + ] + }, + "ReadOnly": { + "description": "Whether the mount should be read-only.", + "type": "boolean" + }, + "Consistency": { + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`.", + "type": "string" + }, + "BindOptions": { + "description": "Optional configuration for the `bind` type.", + "type": "object", + "properties": { + "Propagation": { + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "type": "string", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + }, + "NonRecursive": { + "description": "Disable recursive bind mount.", + "type": "boolean", + "default": false + }, + "CreateMountpoint": { + "description": "Create mount point on host if missing", + "type": "boolean", + "default": false + }, + "ReadOnlyNonRecursive": { + "description": "Make the mount non-recursively read-only, but still leave the mount recursive\n(unless NonRecursive is set to `true` in conjunction).\n\nAdded in v1.44, before that version all read-only mounts were\nnon-recursive by default. To match the previous behaviour this\nwill default to `true` for clients on versions prior to v1.44.\n", + "type": "boolean", + "default": false + }, + "ReadOnlyForceRecursive": { + "description": "Raise an error if the mount cannot be made recursively read-only.", + "type": "boolean", + "default": false + } + } + }, + "VolumeOptions": { + "description": "Optional configuration for the `volume` type.", + "type": "object", + "properties": { + "NoCopy": { + "description": "Populate volume with data from the target.", + "type": "boolean", + "default": false + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "DriverConfig": { + "description": "Map of driver specific options", + "type": "object", + "properties": { + "Name": { + "description": "Name of the driver to use to create the volume.", + "type": "string" + }, + "Options": { + "description": "key/value map of driver specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "Subpath": { + "description": "Source path inside the volume. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-volume/subdirectory" + } + } + }, + "ImageOptions": { + "description": "Optional configuration for the `image` type.", + "type": "object", + "properties": { + "Subpath": { + "description": "Source path inside the image. Must be relative without any back traversals.", + "type": "string", + "example": "dir-inside-image/subdirectory" + } + } + }, + "TmpfsOptions": { + "description": "Optional configuration for the `tmpfs` type.", + "type": "object", + "properties": { + "SizeBytes": { + "description": "The size for the tmpfs mount in bytes.", + "type": "integer", + "format": "int64" + }, + "Mode": { + "description": "The permission mode for the tmpfs mount in an integer.\nThe value must not be in octal format (e.g. 755) but rather\nthe decimal representation of the octal value (e.g. 493).\n", + "type": "integer" + }, + "Options": { + "description": "The options to be passed to the tmpfs mount. An array of arrays.\nFlag options should be provided as 1-length arrays. Other types\nshould be provided as as 2-length arrays, where the first item is\nthe key and the second the value.\n", + "type": "array", + "items": { + "type": "array", + "minItems": 1, + "maxItems": 2, + "items": { + "type": "string" + } + }, + "example": [ + [ + "noexec" + ] + ] + } + } + } + } + }, + "RestartPolicy": { + "description": "The behavior to apply when the container exits. The default is not to\nrestart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is\nadded before each restart to prevent flooding the server.\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "- Empty string means not to restart\n- `no` Do not automatically restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "enum": [ + "", + "no", + "always", + "unless-stopped", + "on-failure" + ] + }, + "MaximumRetryCount": { + "type": "integer", + "description": "If `on-failure` is used, the number of times to retry before giving up.\n" + } + } + }, + "Resources": { + "description": "A container's resources (cgroups config, ulimits, etc)", + "type": "object", + "properties": { + "CpuShares": { + "description": "An integer value representing this container's relative CPU weight\nversus other containers.\n", + "type": "integer" + }, + "Memory": { + "description": "Memory limit in bytes.", + "type": "integer", + "format": "int64", + "default": 0 + }, + "CgroupParent": { + "description": "Path to `cgroups` under which the container's `cgroup` is created. If\nthe path is not absolute, the path is considered to be relative to the\n`cgroups` path of the init process. Cgroups are created if they do not\nalready exist.\n", + "type": "string" + }, + "BlkioWeight": { + "description": "Block IO weight (relative weight).", + "type": "integer", + "minimum": 0, + "maximum": 1000 + }, + "BlkioWeightDevice": { + "description": "Block IO weight (relative device weight) in the form:\n\n```\n[{\"Path\": \"device_path\", \"Weight\": weight}]\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "type": "integer", + "minimum": 0 + } + } + } + }, + "BlkioDeviceReadBps": { + "description": "Limit read rate (bytes per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "description": "Limit write rate (bytes per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "description": "Limit read rate (IO per second) from a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "description": "Limit write rate (IO per second) to a device, in the form:\n\n```\n[{\"Path\": \"device_path\", \"Rate\": rate}]\n```\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "CpuPeriod": { + "description": "The length of a CPU period in microseconds.", + "type": "integer", + "format": "int64" + }, + "CpuQuota": { + "description": "Microseconds of CPU time that the container can get in a CPU period.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimePeriod": { + "description": "The length of a CPU real-time period in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to\nallocate no time allocated to real-time tasks.\n", + "type": "integer", + "format": "int64" + }, + "CpusetCpus": { + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n", + "type": "string", + "example": "0-3" + }, + "CpusetMems": { + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\neffective on NUMA systems.\n", + "type": "string" + }, + "Devices": { + "description": "A list of devices to add to the container.", + "type": "array", + "items": { + "$ref": "#/definitions/DeviceMapping" + } + }, + "DeviceCgroupRules": { + "description": "a list of cgroup rules to apply to the container", + "type": "array", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "DeviceRequests": { + "description": "A list of requests for devices to be sent to device drivers.\n", + "type": "array", + "items": { + "$ref": "#/definitions/DeviceRequest" + } + }, + "MemoryReservation": { + "description": "Memory soft limit in bytes.", + "type": "integer", + "format": "int64" + }, + "MemorySwap": { + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited\nswap.\n", + "type": "integer", + "format": "int64" + }, + "MemorySwappiness": { + "description": "Tune a container's memory swappiness behavior. Accepts an integer\nbetween 0 and 100.\n", + "type": "integer", + "format": "int64", + "minimum": 0, + "maximum": 100 + }, + "NanoCpus": { + "description": "CPU quota in units of 10-9 CPUs.", + "type": "integer", + "format": "int64" + }, + "OomKillDisable": { + "description": "Disable OOM Killer for the container.", + "type": "boolean" + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": "boolean", + "x-nullable": true + }, + "PidsLimit": { + "description": "Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\nto not change.\n", + "type": "integer", + "format": "int64", + "x-nullable": true + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example:\n\n```\n{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n```\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + }, + "CpuCount": { + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "CpuPercent": { + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are\nmutually exclusive. The order of precedence is `CPUCount` first, then\n`CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "IOMaximumIOps": { + "description": "Maximum IOps for the container system drive (Windows only)", + "type": "integer", + "format": "int64" + }, + "IOMaximumBandwidth": { + "description": "Maximum IO in bytes per second for the container system drive\n(Windows only).\n", + "type": "integer", + "format": "int64" + } + } + }, + "Limit": { + "description": "An object describing a limit on resources which can be requested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "Pids": { + "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n", + "type": "integer", + "format": "int64", + "default": 0, + "example": 100 + } + } + }, + "ResourceObject": { + "description": "An object describing the resources which can be advertised by a node and\nrequested by a task.\n", + "type": "object", + "properties": { + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "GenericResources": { + "$ref": "#/definitions/GenericResources" + } + } + }, + "GenericResources": { + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`).\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + }, + "HealthConfig": { + "description": "A test to perform to check that the container is healthy.\nHealthcheck commands should be side-effect free.\n", + "type": "object", + "properties": { + "Test": { + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n\nA non-zero exit code indicates a failed healthcheck:\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (treated as unhealthy)\n- other values: error running probe\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "Timeout": { + "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n\nIf the health check command does not complete within this timeout,\nthe check is considered failed and the health check process is\nforcibly terminated without a graceful shutdown.\n", + "type": "integer", + "format": "int64" + }, + "Retries": { + "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n", + "type": "integer" + }, + "StartPeriod": { + "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + }, + "StartInterval": { + "description": "The time to wait between checks in nanoseconds during the start period.\nIt should be 0 or at least 1000000 (1 ms). 0 means inherit.\n", + "type": "integer", + "format": "int64" + } + } + }, + "Health": { + "description": "Health stores information about the container's healthcheck results.\n", + "type": "object", + "x-nullable": true, + "properties": { + "Status": { + "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n", + "type": "string", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + }, + "Log": { + "type": "array", + "description": "Log contains the last few results (oldest first)\n", + "items": { + "$ref": "#/definitions/HealthcheckResult" + } + } + } + }, + "HealthcheckResult": { + "description": "HealthcheckResult stores information about a single run of a healthcheck probe\n", + "type": "object", + "x-nullable": true, + "properties": { + "Start": { + "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2020-01-04T10:44:24.496525531Z" + }, + "End": { + "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2020-01-04T10:45:21.364524523Z" + }, + "ExitCode": { + "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n", + "type": "integer", + "example": 0 + }, + "Output": { + "description": "Output from last check", + "type": "string" + } + } + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/definitions/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written", + "example": "" + }, + "LogConfig": { + "type": "object", + "description": "The logging configuration for this container", + "properties": { + "Type": { + "description": "Name of the logging driver used for the container or \"none\"\nif logging is disabled.", + "type": "string", + "enum": [ + "local", + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "description": "Driver-specific configuration options for the logging driver.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "5", + "max-size": "10m" + } + } + } + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/definitions/PortMap" + }, + "RestartPolicy": { + "$ref": "#/definitions/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to the container.\n", + "type": "array", + "items": { + "$ref": "#/definitions/Mount" + } + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.\n", + "x-nullable": true, + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + }, + "Annotations": { + "type": "object", + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n", + "additionalProperties": { + "type": "string" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "enum": [ + "private", + "host" + ], + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n" + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string", + "format": "ip-address", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n", + "additionalProperties": { + "type": "string" + } + }, + "Tmpfs": { + "type": "object", + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n", + "additionalProperties": { + "type": "string" + } + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "type": "integer", + "format": "int64", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "minimum": 0 + }, + "Sysctls": { + "type": "object", + "x-nullable": true, + "description": "A list of kernel parameters (sysctls) to set in the container.\n\nThis field is omitted if not set.", + "additionalProperties": { + "type": "string" + }, + "example": { + "net.ipv4.ip_forward": "1" + } + }, + "Runtime": { + "type": "string", + "x-nullable": true, + "description": "Runtime to use with this container." + }, + "Umask": { + "type": "integer", + "format": "uint32", + "x-nullable": true, + "description": "Set the initial umask for a Unix container.\n\nIf omitted, the daemon does not set a umask in the OCI process\nspecification, and the runtime's default behavior applies.\n\nJSON integers are decimal. For example, use `18` for the octal\numask `0022`, and `511` for the octal umask `0777`." + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/asound", + "/proc/acpi", + "/proc/kcore", + "/proc/keys", + "/proc/latency_stats", + "/proc/timer_list", + "/proc/timer_stats", + "/proc/sched_debug", + "/proc/scsi", + "/sys/firmware", + "/sys/devices/virtual/powercap" + ] + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/bus", + "/proc/fs", + "/proc/irq", + "/proc/sys", + "/proc/sysrq-trigger" + ] + } + } + } + ] + }, + "ContainerConfig": { + "description": "Configuration for a container that is portable between hosts.\n", + "type": "object", + "properties": { + "Hostname": { + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.\n", + "type": "string", + "example": "439f4e91bd1d" + }, + "Domainname": { + "description": "The domain name to use for the container.\n", + "type": "string" + }, + "User": { + "description": "Commands run as this user inside the container. If omitted, commands\nrun as the user specified in the image the container was started from.\n\nCan be either user-name or UID, and optional group-name or GID,\nseparated by a colon (`[<:group-name|GID>]`).", + "type": "string", + "example": "123:456" + }, + "AttachStdin": { + "description": "Whether to attach to `stdin`.", + "type": "boolean", + "default": false + }, + "AttachStdout": { + "description": "Whether to attach to `stdout`.", + "type": "boolean", + "default": true + }, + "AttachStderr": { + "description": "Whether to attach to `stderr`.", + "type": "boolean", + "default": true + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Tty": { + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.\n", + "type": "boolean", + "default": false + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean", + "default": false + }, + "StdinOnce": { + "description": "Close `stdin` after one attached client disconnects", + "type": "boolean", + "default": false + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/definitions/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": "boolean", + "default": false, + "example": false, + "x-nullable": true + }, + "Image": { + "description": "The name (or reference) of the image to use when creating the container,\nor which was used when the container was created.\n", + "type": "string", + "example": "example-image:1.0" + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "NetworkDisabled": { + "description": "Disable networking for the container.", + "type": "boolean", + "x-nullable": true + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [] + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": "string", + "example": "SIGTERM", + "x-nullable": true + }, + "StopTimeout": { + "description": "Timeout to stop a container in seconds. If omitted, the daemon-wide\ndefault (`default-stop-timeout`) is used.\n", + "type": "integer", + "x-nullable": true + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ] + } + } + }, + "ImageConfig": { + "description": "Configuration of the image. These fields are used as defaults\nwhen starting a container from the image.\n", + "type": "object", + "properties": { + "User": { + "description": "The user that commands are run as inside the container.", + "type": "string", + "example": "web:web" + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"/\": {}}`\n", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "80/tcp": {}, + "443/tcp": {} + } + }, + "Env": { + "description": "A list of environment variables to set inside the container in the\nform `[\"VAR=value\", ...]`. A variable without `=` is removed from the\nenvironment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ] + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/bin/sh" + ] + }, + "Healthcheck": { + "$ref": "#/definitions/HealthConfig" + }, + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": "boolean", + "default": false, + "example": false, + "x-nullable": true + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty\nobjects.\n", + "type": "object", + "additionalProperties": { + "type": "object", + "enum": [ + {} + ], + "default": {} + }, + "example": { + "/app/data": {}, + "/app/config": {} + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string", + "example": "/public/" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the\nentry point is reset to system default (i.e., the entry point used by\ndocker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [] + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [] + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.\n", + "type": "string", + "example": "SIGTERM", + "x-nullable": true + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [ + "/bin/sh", + "-c" + ] + } + } + }, + "NetworkingConfig": { + "description": "NetworkingConfig represents the container's networking configuration for\neach of its interfaces.\nIt is used for the networking configs specified in the `docker create`\nand `docker network connect` commands.\n", + "type": "object", + "properties": { + "EndpointsConfig": { + "description": "A mapping of network name to endpoint configuration for that network.\nThe endpoint configuration can be left empty to connect to that\nnetwork with no particular endpoint configuration.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EndpointSettings" + } + } + }, + "example": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "MacAddress": "02:42:ac:12:05:02", + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + }, + "NetworkSettings": { + "description": "NetworkSettings exposes the network settings in the API", + "type": "object", + "properties": { + "SandboxID": { + "description": "SandboxID uniquely represents a container's network stack.", + "type": "string", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "SandboxKey": { + "description": "SandboxKey is the full path of the netns handle", + "type": "string", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "Ports": { + "$ref": "#/definitions/PortMap" + }, + "Networks": { + "description": "Information about all networks that the container is connected to.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EndpointSettings" + } + } + } + }, + "Address": { + "description": "Address represents an IPv4 or IPv6 IP address.", + "type": "object", + "properties": { + "Addr": { + "description": "IP address.", + "type": "string" + }, + "PrefixLen": { + "description": "Mask length of the IP address.", + "type": "integer" + } + } + }, + "PortMap": { + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `/`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "type": "object", + "additionalProperties": { + "type": "array", + "x-nullable": true, + "items": { + "$ref": "#/definitions/PortBinding" + } + }, + "example": { + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ], + "2377/tcp": null + } + }, + "PortBinding": { + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n", + "type": "object", + "properties": { + "HostIp": { + "description": "Host IP address that the container's port is mapped to.", + "type": "string", + "example": "127.0.0.1", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "HostPort": { + "description": "Host port number that the container's port is mapped to.", + "type": "string", + "example": "4443" + } + } + }, + "DriverData": { + "description": "Information about the storage driver used to store the container's and\nimage's filesystem.\n", + "type": "object", + "required": [ + "Name", + "Data" + ], + "properties": { + "Name": { + "description": "Name of the storage driver.", + "type": "string", + "x-nullable": false, + "example": "overlay2" + }, + "Data": { + "description": "Low-level storage metadata, provided as key/value pairs.\n\nThis information is driver-specific, and depends on the storage-driver\nin use, and should be used for informational purposes only.\n", + "type": "object", + "x-nullable": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + } + } + } + }, + "Storage": { + "description": "Information about the storage used by the container.\n", + "type": "object", + "properties": { + "RootFS": { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true, + "$ref": "#/definitions/RootFSStorage" + } + } + }, + "RootFSStorage": { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorage", + "properties": { + "Snapshot": { + "description": "Information about the snapshot used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true, + "$ref": "#/definitions/RootFSStorageSnapshot" + } + } + }, + "RootFSStorageSnapshot": { + "description": "Information about a snapshot backend of the container's root filesystem.\n", + "type": "object", + "x-go-name": "RootFSStorageSnapshot", + "properties": { + "Name": { + "description": "Name of the snapshotter.", + "type": "string", + "x-nullable": false + } + } + }, + "FilesystemChange": { + "description": "Change in the container's filesystem.\n", + "type": "object", + "required": [ + "Path", + "Kind" + ], + "properties": { + "Path": { + "description": "Path to file or directory that has changed.\n", + "type": "string", + "x-nullable": false + }, + "Kind": { + "$ref": "#/definitions/ChangeType" + } + } + }, + "ChangeType": { + "description": "Kind of change\n\nCan be one of:\n\n- `0`: Modified (\"C\")\n- `1`: Added (\"A\")\n- `2`: Deleted (\"D\")\n", + "type": "integer", + "format": "uint8", + "enum": [ + 0, + 1, + 2 + ], + "x-nullable": false + }, + "ImageInspect": { + "description": "Information about an image in the local image cache.\n", + "type": "object", + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "x-nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "Descriptor": { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true, + "$ref": "#/definitions/OCIDescriptor" + }, + "Manifests": { + "description": "Manifests is a list of image manifests available in this image. It\nprovides a more detailed view of the platform-specific image manifests or\nother image-attached data like build attestations.\n\nOnly available if the daemon provides a multi-platform image store\nand the `manifests` option is set in the inspect request.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": "array", + "x-nullable": true, + "items": { + "$ref": "#/definitions/ImageManifestSummary" + } + }, + "Identity": { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "x-nullable": true, + "$ref": "#/definitions/Identity" + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ] + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + }, + "Comment": { + "description": "Optional message that was set when committing or importing the image.\n", + "type": "string", + "x-nullable": true, + "example": "" + }, + "Created": { + "description": "Date and time at which the image was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if present in the image,\nand omitted otherwise.\n", + "type": "string", + "format": "dateTime", + "x-nullable": true, + "example": "2022-02-04T21:20:12.497794809Z" + }, + "Author": { + "description": "Name of the author that was specified when committing the image, or as\nspecified through MAINTAINER (deprecated) in the Dockerfile.\n", + "type": "string", + "x-nullable": true, + "example": "" + }, + "Config": { + "$ref": "#/definitions/ImageConfig" + }, + "Architecture": { + "description": "Hardware CPU architecture that the image runs on.\n", + "type": "string", + "x-nullable": false, + "example": "arm" + }, + "Variant": { + "description": "CPU architecture variant (presently ARM-only).\n", + "type": "string", + "x-nullable": true, + "example": "v7" + }, + "Os": { + "description": "Operating System the image is built to run on.\n", + "type": "string", + "x-nullable": false, + "example": "linux" + }, + "OsVersion": { + "description": "Operating System version the image is built to run on (especially\nfor Windows).\n", + "type": "string", + "example": "", + "x-nullable": true + }, + "Size": { + "description": "Total size of the image variant, including all layers it is composed of.\n\nFor multi-platform images, this is the size of the platform variant\nselected by the `platform` query parameter. If no platform is specified,\nthe daemon selects a platform as described in the `platform` parameter.\n\nWhen using the containerd image store, this includes both the image content\nthat's present locally and the unpacked snapshot data for the selected\nvariant.\n\nImage data may be shared between images, so this size does not indicate\nhow much space would be reclaimed by deleting the image.\n", + "type": "integer", + "format": "int64", + "x-nullable": false, + "example": 1239828 + }, + "GraphDriver": { + "x-nullable": true, + "$ref": "#/definitions/DriverData" + }, + "RootFS": { + "description": "Information about the image's RootFS, including the layer IDs.\n", + "type": "object", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "x-nullable": false, + "example": "layers" + }, + "Layers": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ] + } + } + }, + "Metadata": { + "description": "Additional metadata of the image in the local cache. This information\nis local to the daemon, and not part of the image itself.\n", + "type": "object", + "properties": { + "LastTagTime": { + "description": "Date and time at which the image was last tagged in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\nThis information is only available if the image was tagged locally,\nand omitted otherwise.\n", + "type": "string", + "format": "dateTime", + "example": "2022-02-28T14:40:02.623929178Z", + "x-nullable": true + } + } + } + } + }, + "Identity": { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "type": "object", + "properties": { + "Signature": { + "description": "Signature contains the properties of verified signatures for the image.", + "type": "array", + "items": { + "$ref": "#/definitions/SignatureIdentity" + } + }, + "Pull": { + "description": "Pull contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.\nAfter successful push this images also contains the pushed repository location.", + "type": "array", + "items": { + "$ref": "#/definitions/PullIdentity" + } + }, + "Build": { + "description": "Build contains build reference information if image was created via build.", + "type": "array", + "items": { + "$ref": "#/definitions/BuildIdentity" + } + } + } + }, + "BuildIdentity": { + "description": "BuildIdentity contains build reference information if image was created via build.", + "type": "object", + "properties": { + "Ref": { + "description": "Ref is the identifier for the build request. This reference can be used to\nlook up the build details in BuildKit history API.", + "type": "string" + }, + "CreatedAt": { + "description": "CreatedAt is the time when the build ran.", + "type": "string", + "format": "date-time" + } + } + }, + "PullIdentity": { + "description": "PullIdentity contains remote location information if image was created via pull.\nIf image was pulled via mirror, this contains the original repository location.", + "type": "object", + "properties": { + "Repository": { + "description": "Repository is the remote repository location the image was pulled from.", + "type": "string" + } + } + }, + "SignatureIdentity": { + "description": "SignatureIdentity contains the properties of verified signatures for the image.", + "type": "object", + "properties": { + "Name": { + "description": "Name is a textual description summarizing the type of signature.", + "type": "string" + }, + "Timestamps": { + "description": "Timestamps contains a list of verified signed timestamps for the signature.", + "type": "array", + "items": { + "$ref": "#/definitions/SignatureTimestamp" + } + }, + "KnownSigner": { + "description": "KnownSigner is an identifier for a special signer identity that is known to the implementation.", + "$ref": "#/definitions/KnownSignerIdentity" + }, + "DockerReference": { + "description": "DockerReference is the Docker image reference associated with the signature.\nThis is an optional field only present in older hashedrecord signatures.", + "type": "string" + }, + "Signer": { + "description": "Signer contains information about the signer certificate used to sign the image.", + "$ref": "#/definitions/SignerIdentity" + }, + "SignatureType": { + "description": "SignatureType is the type of signature format. E.g. \"bundle-v0.3\" or \"hashedrecord\".", + "$ref": "#/definitions/SignatureType" + }, + "Error": { + "description": "Error contains error information if signature verification failed.\nOther fields will be empty in this case.", + "type": "string" + }, + "Warnings": { + "description": "Warnings contains any warnings that occurred during signature verification.\nFor example, if there was no internet connectivity and cached trust roots were used.\nWarning does not indicate a failed verification but may point to configuration issues.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SignatureTimestamp": { + "description": "SignatureTimestamp contains information about a verified signed timestamp for an image signature.", + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/SignatureTimestampType" + }, + "URI": { + "type": "string" + }, + "Timestamp": { + "type": "string", + "format": "date-time" + } + } + }, + "SignatureTimestampType": { + "description": "SignatureTimestampType is the type of timestamp used in the signature.", + "type": "string", + "enum": [ + "Tlog", + "TimestampAuthority" + ] + }, + "SignatureType": { + "description": "SignatureType is the type of signature format.", + "type": "string", + "enum": [ + "bundle-v0.3", + "simplesigning-v1" + ] + }, + "KnownSignerIdentity": { + "description": "KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation.", + "type": "string", + "enum": [ + "DHI" + ] + }, + "SignerIdentity": { + "description": "SignerIdentity contains information about the signer certificate used to sign the image.", + "type": "object", + "properties": { + "CertificateIssuer": { + "type": "string", + "description": "CertificateIssuer is the certificate issuer." + }, + "SubjectAlternativeName": { + "type": "string", + "description": "SubjectAlternativeName is the certificate subject alternative name." + }, + "Issuer": { + "type": "string", + "description": "The OIDC issuer. Should match `iss` claim of ID token or, in the case of\na federated login like Dex it should match the issuer URL of the\nupstream issuer. The issuer is not set the extensions are invalid and\nwill fail to render." + }, + "BuildSignerURI": { + "type": "string", + "description": "Reference to specific build instructions that are responsible for signing." + }, + "BuildSignerDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the build instructions that is responsible for signing." + }, + "RunnerEnvironment": { + "type": "string", + "description": "Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure." + }, + "SourceRepositoryURI": { + "type": "string", + "description": "Source repository URL that the build was based on." + }, + "SourceRepositoryDigest": { + "type": "string", + "description": "Immutable reference to a specific version of the source code that the build was based upon." + }, + "SourceRepositoryRef": { + "type": "string", + "description": "Source Repository Ref that the build run was based upon." + }, + "SourceRepositoryIdentifier": { + "type": "string", + "description": "Immutable identifier for the source repository the workflow was based upon." + }, + "SourceRepositoryOwnerURI": { + "type": "string", + "description": "Source repository owner URL of the owner of the source repository that the build was based on." + }, + "SourceRepositoryOwnerIdentifier": { + "type": "string", + "description": "Immutable identifier for the owner of the source repository that the workflow was based upon." + }, + "BuildConfigURI": { + "type": "string", + "description": "Build Config URL to the top-level/initiating build instructions." + }, + "BuildConfigDigest": { + "type": "string", + "description": "Immutable reference to the specific version of the top-level/initiating build instructions." + }, + "BuildTrigger": { + "type": "string", + "description": "Event or action that initiated the build." + }, + "RunInvocationURI": { + "type": "string", + "description": "Run Invocation URL to uniquely identify the build execution." + }, + "SourceRepositoryVisibilityAtSigning": { + "type": "string", + "description": "Source repository visibility at the time of signing the certificate." + } + } + }, + "ImageSummary": { + "type": "object", + "x-go-name": "Summary", + "required": [ + "Id", + "ParentId", + "RepoTags", + "RepoDigests", + "Created", + "Size", + "SharedSize", + "Labels", + "Containers" + ], + "properties": { + "Id": { + "description": "ID is the content-addressable ID of an image.\n\nThis identifier is a content-addressable digest calculated from the\nimage's configuration (which includes the digests of layers used by\nthe image).\n\nNote that this digest differs from the `RepoDigests` below, which\nholds digests of image manifests that reference the image.\n", + "type": "string", + "x-nullable": false, + "example": "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + }, + "ParentId": { + "description": "ID of the parent image.\n\nDepending on how the image was created, this field may be empty and\nis only set for images that were built/created locally. This field\nis empty if the image was pulled from an image registry.\n", + "type": "string", + "x-nullable": false, + "example": "" + }, + "RepoTags": { + "description": "List of image names/tags in the local image cache that reference this\nimage.\n\nMultiple image tags can refer to the same image, and this list may be\nempty if no tags reference the image, in which case the image is\n\"untagged\", in which case it can still be referenced by its ID.\n", + "type": "array", + "x-nullable": false, + "items": { + "type": "string" + }, + "example": [ + "example:1.0", + "example:latest", + "example:stable", + "internal.registry.example.com:5000/example:1.0" + ] + }, + "RepoDigests": { + "description": "List of content-addressable digests of locally available image manifests\nthat the image is referenced from. Multiple manifests can refer to the\nsame image.\n\nThese digests are usually only available if the image was either pulled\nfrom a registry, or if the image was pushed to a registry, which is when\nthe manifest is generated and its digest calculated.\n", + "type": "array", + "x-nullable": false, + "items": { + "type": "string" + }, + "example": [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + }, + "Created": { + "description": "Date and time at which the image was created as a Unix timestamp\n(number of seconds since EPOCH).\n", + "type": "integer", + "x-nullable": false, + "example": "1644009612" + }, + "Size": { + "description": "Total size of the image including all layers it is composed of.\n", + "type": "integer", + "format": "int64", + "x-nullable": false, + "example": 172064416 + }, + "SharedSize": { + "description": "Total size of image layers that are shared between this image and other\nimages.\n\nThis size is not calculated by default. `-1` indicates that the value\nhas not been set / calculated.\n", + "type": "integer", + "format": "int64", + "x-nullable": false, + "example": 1239828 + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "x-nullable": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Containers": { + "description": "Number of containers using this image. Includes both stopped and running\ncontainers.\n\n`-1` indicates that the value has not been set / calculated.\n", + "x-nullable": false, + "type": "integer", + "example": 2 + }, + "Manifests": { + "description": "Manifests is a list of manifests available in this image.\nIt provides a more detailed view of the platform-specific image manifests\nor other image-attached data like build attestations.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "type": "array", + "x-nullable": false, + "x-omitempty": true, + "items": { + "$ref": "#/definitions/ImageManifestSummary" + } + }, + "Descriptor": { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true, + "$ref": "#/definitions/OCIDescriptor" + } + } + }, + "ImagesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/image", + "description": "represents system data usage for image resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active images.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all images.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing unused images.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by images.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of image summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "serveraddress": { + "type": "string" + } + }, + "example": { + "username": "hannibal", + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/" + } + }, + "AuthResponse": { + "description": "An identity token was generated successfully.\n", + "type": "object", + "required": [ + "Status" + ], + "properties": { + "Status": { + "description": "The status of the authentication", + "type": "string", + "example": "Login Succeeded", + "x-nullable": false + }, + "IdentityToken": { + "description": "An opaque token used to authenticate a user after a successful login", + "type": "string", + "example": "9cbaf023786cd7...", + "x-nullable": false + } + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "privileged": { + "type": "boolean" + }, + "user": { + "type": "string" + }, + "tty": { + "type": "boolean" + }, + "entrypoint": { + "type": "string" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Volume": { + "type": "object", + "required": [ + "Name", + "Driver", + "Mountpoint", + "Labels", + "Scope", + "Options" + ], + "x-nullable": false, + "properties": { + "Name": { + "type": "string", + "description": "Name of the volume.", + "x-nullable": false, + "example": "tardis" + }, + "Driver": { + "type": "string", + "description": "Name of the volume driver used by the volume.", + "x-nullable": false, + "example": "custom" + }, + "Mountpoint": { + "type": "string", + "description": "Mount path of the volume on the host.", + "x-nullable": false, + "example": "/var/lib/docker/volumes/tardis" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "description": "Date/Time the volume was created.", + "example": "2016-06-07T20:31:11.853781916Z" + }, + "Status": { + "type": "object", + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n", + "additionalProperties": { + "type": "object" + }, + "example": { + "hello": "world" + } + }, + "Labels": { + "type": "object", + "description": "User-defined key/value metadata.", + "x-nullable": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Scope": { + "type": "string", + "description": "The level at which the volume exists. Either `global` for cluster-wide,\nor `local` for machine level.\n", + "default": "local", + "x-nullable": false, + "enum": [ + "local", + "global" + ], + "example": "local" + }, + "ClusterVolume": { + "$ref": "#/definitions/ClusterVolume" + }, + "Options": { + "type": "object", + "description": "The driver specific options used when creating the volume.\n", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "UsageData": { + "type": "object", + "x-nullable": true, + "x-go-name": "UsageData", + "required": [ + "Size", + "RefCount" + ], + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "properties": { + "Size": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n", + "x-nullable": false + }, + "RefCount": { + "type": "integer", + "format": "int64", + "default": -1, + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n", + "x-nullable": false + } + } + } + } + }, + "VolumesDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/volume", + "description": "represents system data usage for volume resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active volumes.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all volumes.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive volumes.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by volumes.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of volumes.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Volume" + } + } + } + } + }, + "VolumeCreateRequest": { + "description": "Volume configuration", + "type": "object", + "title": "VolumeConfig", + "x-go-name": "CreateRequest", + "properties": { + "Name": { + "description": "The new volume's name. If not specified, Docker generates a name.\n", + "type": "string", + "x-nullable": false, + "example": "tardis" + }, + "Driver": { + "description": "Name of the volume driver to use.", + "type": "string", + "default": "local", + "x-nullable": false, + "example": "custom" + }, + "DriverOpts": { + "description": "A mapping of driver options and values. These options are\npassed directly to the driver and are driver specific.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "ClusterVolumeSpec": { + "$ref": "#/definitions/ClusterVolumeSpec" + } + } + }, + "VolumeListResponse": { + "type": "object", + "title": "VolumeListResponse", + "x-go-name": "ListResponse", + "description": "Volume list response", + "properties": { + "Volumes": { + "type": "array", + "description": "List of volumes", + "items": { + "$ref": "#/definitions/Volume" + } + }, + "Warnings": { + "type": "array", + "description": "Warnings that occurred when fetching the list of volumes.\n", + "items": { + "type": "string" + }, + "example": [] + } + } + }, + "Network": { + "type": "object", + "properties": { + "Name": { + "description": "Name of the network.\n", + "type": "string", + "example": "my_network", + "x-omitempty": false + }, + "Id": { + "description": "ID that uniquely identifies a network on a single machine.\n", + "type": "string", + "x-go-name": "ID", + "x-omitempty": false, + "example": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99" + }, + "Created": { + "description": "Date and time at which the network was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "x-omitempty": false, + "x-go-type": { + "type": "Time", + "import": { + "package": "time" + }, + "hints": { + "nullable": false + } + }, + "example": "2016-10-19T04:33:30.360899459Z" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level)\n", + "type": "string", + "x-omitempty": false, + "example": "local" + }, + "Driver": { + "description": "The name of the driver used to create the network (e.g. `bridge`,\n`overlay`).\n", + "type": "string", + "x-omitempty": false, + "example": "overlay" + }, + "EnableIPv4": { + "description": "Whether the network was created with IPv4 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": true + }, + "EnableIPv6": { + "description": "Whether the network was created with IPv6 enabled.\n", + "type": "boolean", + "x-omitempty": false, + "example": false + }, + "IPAM": { + "description": "The network's IP Address Management.\n", + "$ref": "#/definitions/IPAM", + "x-nullable": false, + "x-omitempty": false + }, + "Internal": { + "description": "Whether the network is created to only allow internal networking\nconnectivity.\n", + "type": "boolean", + "x-nullable": false, + "x-omitempty": false, + "default": false, + "example": false + }, + "Attachable": { + "description": "Whether a global / swarm scope network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "x-nullable": false, + "x-omitempty": false, + "default": false, + "example": false + }, + "Ingress": { + "description": "Whether the network is providing the routing-mesh for the swarm cluster.\n", + "type": "boolean", + "x-nullable": false, + "x-omitempty": false, + "default": false, + "example": false + }, + "ConfigFrom": { + "$ref": "#/definitions/ConfigReference", + "x-nullable": false, + "x-omitempty": false + }, + "ConfigOnly": { + "description": "Whether the network is a config-only network. Config-only networks are\nplaceholder networks for network configurations to be used by other\nnetworks. Config-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "x-omitempty": false, + "x-nullable": false, + "default": false + }, + "Options": { + "description": "Network-specific options uses when creating the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "Metadata specific to the network being created.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Peers": { + "description": "List of peer nodes for an overlay network. This field is only present\nfor overlay networks, and omitted for other network types.\n", + "type": "array", + "x-omitempty": true, + "items": { + "$ref": "#/definitions/PeerInfo" + } + } + } + }, + "NetworkSummary": { + "description": "Network list response item", + "x-go-name": "Summary", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/Network" + } + ] + }, + "NetworkInspect": { + "description": "The body of the \"get network\" http response message.", + "x-go-name": "Inspect", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/Network" + } + ], + "properties": { + "Containers": { + "description": "Contains endpoints attached to the network.\n", + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "$ref": "#/definitions/EndpointResource" + }, + "example": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "Name": "test", + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "MacAddress": "02:42:ac:13:00:02", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "" + } + } + }, + "Services": { + "description": "List of services using the network. This field is only present for\nswarm scope networks, and omitted for local scope networks.\n", + "type": "object", + "x-omitempty": true, + "additionalProperties": { + "x-go-type": { + "type": "ServiceInfo", + "hints": { + "nullable": false + } + } + } + }, + "Status": { + "description": "provides runtime information about the network such as the number of allocated IPs.\n", + "$ref": "#/definitions/NetworkStatus" + } + } + }, + "NetworkStatus": { + "description": "provides runtime information about the network such as the number of allocated IPs.\n", + "type": "object", + "x-go-name": "Status", + "properties": { + "IPAM": { + "$ref": "#/definitions/IPAMStatus" + } + } + }, + "ServiceInfo": { + "x-nullable": false, + "x-omitempty": false, + "description": "represents service parameters with the list of service's tasks\n", + "type": "object", + "properties": { + "VIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Ports": { + "type": "array", + "x-omitempty": false, + "items": { + "type": "string" + } + }, + "LocalLBIndex": { + "type": "integer", + "format": "int", + "x-omitempty": false, + "x-go-type": { + "type": "int" + } + }, + "Tasks": { + "type": "array", + "x-omitempty": false, + "items": { + "$ref": "#/definitions/NetworkTaskInfo" + } + } + } + }, + "NetworkTaskInfo": { + "x-nullable": false, + "x-omitempty": false, + "x-go-name": "Task", + "description": "carries the information about one backend task\n", + "type": "object", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false + }, + "EndpointID": { + "type": "string", + "x-omitempty": false + }, + "EndpointIP": { + "type": "string", + "x-omitempty": false, + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "Info": { + "type": "object", + "x-omitempty": false, + "additionalProperties": { + "type": "string" + } + } + } + }, + "ConfigReference": { + "x-nullable": false, + "x-omitempty": false, + "description": "The config-only network source to provide the configuration for\nthis network.\n", + "type": "object", + "properties": { + "Network": { + "description": "The name of the config-only network that provides the network's\nconfiguration. The specified network must be an existing config-only\nnetwork. Only network names are allowed, not network IDs.\n", + "type": "string", + "x-omitempty": false, + "example": "config_only_network_01" + } + } + }, + "IPAM": { + "type": "object", + "x-nullable": false, + "x-omitempty": false, + "properties": { + "Driver": { + "description": "Name of the IPAM driver to use.", + "type": "string", + "default": "default", + "example": "default" + }, + "Config": { + "description": "List of IPAM configuration options, specified as a map:\n\n```\n{\"Subnet\": , \"IPRange\": , \"Gateway\": , \"AuxAddress\": }\n```\n", + "type": "array", + "items": { + "$ref": "#/definitions/IPAMConfig" + } + }, + "Options": { + "description": "Driver-specific options, specified as a map.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + } + } + }, + "IPAMConfig": { + "type": "object", + "properties": { + "Subnet": { + "type": "string", + "example": "172.20.0.0/16" + }, + "IPRange": { + "type": "string", + "example": "172.20.10.0/24" + }, + "Gateway": { + "type": "string", + "example": "172.20.10.11" + }, + "AuxiliaryAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "IPAMStatus": { + "type": "object", + "x-nullable": false, + "x-omitempty": false, + "properties": { + "Subnets": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/SubnetStatus" + }, + "example": { + "172.16.0.0/16": { + "IPsInUse": 3, + "DynamicIPsAvailable": 65533 + }, + "2001:db8:abcd:0012::0/96": { + "IPsInUse": 5, + "DynamicIPsAvailable": 4294967291 + } + }, + "x-go-type": { + "type": "SubnetStatuses", + "kind": "map" + } + } + } + }, + "SubnetStatus": { + "type": "object", + "x-nullable": false, + "x-omitempty": false, + "properties": { + "IPsInUse": { + "description": "Number of IP addresses in the subnet that are in use or reserved and are therefore unavailable for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + }, + "DynamicIPsAvailable": { + "description": "Number of IP addresses within the network's IPRange for the subnet that are available for allocation, saturating at 264 - 1.\n", + "type": "integer", + "format": "uint64", + "x-omitempty": false + } + } + }, + "EndpointResource": { + "type": "object", + "description": "contains network resources allocated and used for a container in a network.\n", + "properties": { + "Name": { + "type": "string", + "x-omitempty": false, + "example": "container_1" + }, + "EndpointID": { + "type": "string", + "x-omitempty": false, + "example": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" + }, + "MacAddress": { + "type": "string", + "x-omitempty": false, + "example": "02:42:ac:13:00:02", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "IPv4Address": { + "type": "string", + "x-omitempty": false, + "example": "172.19.0.2/16", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "x-omitempty": false, + "example": "", + "x-go-type": { + "type": "Prefix", + "import": { + "package": "net/netip" + } + } + } + } + }, + "PeerInfo": { + "description": "represents one peer of an overlay network.\n", + "type": "object", + "x-nullable": false, + "properties": { + "Name": { + "description": "ID of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "6869d7c1732b" + }, + "IP": { + "description": "IP-address of the peer-node in the Swarm cluster.", + "type": "string", + "x-omitempty": false, + "example": "10.133.77.91", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + } + }, + "NetworkCreateResponse": { + "description": "OK response to NetworkCreate operation", + "type": "object", + "title": "NetworkCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warning" + ], + "properties": { + "Id": { + "description": "The ID of the created network.", + "type": "string", + "x-nullable": false, + "example": "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d" + }, + "Warning": { + "description": "Warnings encountered when creating the container", + "type": "string", + "x-nullable": false, + "example": "" + } + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/definitions/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/definitions/ProgressDetail" + }, + "aux": { + "$ref": "#/definitions/ImageID" + } + } + }, + "BuildCache": { + "type": "object", + "description": "BuildCache contains information about a build cache record.\n", + "properties": { + "ID": { + "type": "string", + "description": "Unique ID of the build cache record.\n", + "example": "ndlpt0hhvkqcdfkputsk4cq9c" + }, + "Parents": { + "description": "List of parent build cache record IDs.\n", + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true, + "example": [ + "hw53o5aio51xtltp5xjp8v7fx" + ] + }, + "Type": { + "type": "string", + "description": "Cache record type.\n", + "example": "regular", + "enum": [ + "internal", + "frontend", + "source.local", + "source.git.checkout", + "exec.cachemount", + "regular" + ] + }, + "Description": { + "type": "string", + "description": "Description of the build-step that produced the build cache.\n", + "example": "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + }, + "InUse": { + "type": "boolean", + "description": "Indicates if the build cache is in use.\n", + "example": false + }, + "Shared": { + "type": "boolean", + "description": "Indicates if the build cache is shared.\n", + "example": true + }, + "Size": { + "description": "Amount of disk space used by the build cache (in bytes).\n", + "type": "integer", + "example": 51 + }, + "CreatedAt": { + "description": "Date and time at which the build cache was created in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "LastUsedAt": { + "description": "Date and time at which the build cache was last used in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "x-nullable": true, + "example": "2017-08-09T07:09:37.632105588Z" + }, + "UsageCount": { + "type": "integer", + "example": 26 + } + } + }, + "BuildCacheDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/build", + "description": "represents system data usage for build cache resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active build cache records.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all build cache records.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive build cache records.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by build cache records.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of build cache records.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "CacheRecord" + } + } + } + } + }, + "ImageID": { + "type": "object", + "description": "Image ID or Digest", + "properties": { + "ID": { + "type": "string" + } + }, + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/definitions/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/definitions/ProgressDetail" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "errorDetail": { + "$ref": "#/definitions/ErrorDetail" + }, + "status": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/definitions/ProgressDetail" + } + } + }, + "DeviceInfo": { + "type": "object", + "description": "DeviceInfo represents a device that can be used by a container.\n", + "properties": { + "Source": { + "type": "string", + "example": "cdi", + "description": "The origin device driver.\n" + }, + "ID": { + "type": "string", + "example": "vendor.com/gpu=0", + "description": "The unique identifier for the device within its source driver.\nFor CDI devices, this would be an FQDN like \"vendor.com/gpu=0\".\n" + } + } + }, + "NRIInfo": { + "description": "Information about the Node Resource Interface (NRI).\n\nThis field is only present if NRI is enabled.\n", + "type": "object", + "x-nullable": true, + "properties": { + "Info": { + "description": "Information about NRI, provided as \"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "plugin-path", + "/opt/docker/nri/plugins" + ] + ] + } + } + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "description": "Represents an error.", + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "description": "The error message.", + "type": "string", + "x-nullable": false + } + }, + "example": { + "message": "Something went wrong." + } + }, + "IDResponse": { + "description": "Response to an API call that returns just an Id", + "type": "object", + "x-go-name": "IDResponse", + "required": [ + "Id" + ], + "properties": { + "Id": { + "description": "The id of the newly created object.", + "type": "string", + "x-nullable": false + } + } + }, + "NetworkConnectRequest": { + "description": "NetworkConnectRequest represents the data to be used to connect a container to a network.\n", + "type": "object", + "x-go-name": "ConnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to connect to the network.", + "x-nullable": false, + "example": "3613f73ba0e4" + }, + "EndpointConfig": { + "$ref": "#/definitions/EndpointSettings", + "x-nullable": true + } + } + }, + "NetworkDisconnectRequest": { + "description": "NetworkDisconnectRequest represents the data to be used to disconnect a container from a network.\n", + "type": "object", + "x-go-name": "DisconnectRequest", + "required": [ + "Container" + ], + "properties": { + "Container": { + "type": "string", + "description": "The ID or name of the container to disconnect from the network.", + "x-nullable": false, + "example": "3613f73ba0e4" + }, + "Force": { + "type": "boolean", + "description": "Force the container to disconnect from the network.", + "default": false, + "x-nullable": false, + "x-omitempty": false, + "example": false + } + } + }, + "EndpointSettings": { + "description": "Configuration for a network endpoint.", + "type": "object", + "properties": { + "IPAMConfig": { + "$ref": "#/definitions/EndpointIPAMConfig" + }, + "Links": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "container_1", + "container_2" + ] + }, + "MacAddress": { + "description": "MAC address for the endpoint on this network. The network driver might ignore this parameter.\n", + "type": "string", + "example": "02:42:ac:11:00:04", + "x-go-type": { + "type": "HardwareAddr" + } + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "server_x", + "server_y" + ] + }, + "DriverOpts": { + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "GwPriority": { + "description": "This property determines which endpoint will provide the default\ngateway for a container. The endpoint with the highest priority will\nbe used. If multiple endpoints have the same priority, endpoints are\nlexicographically sorted based on their network name, and the one\nthat sorts first is picked.\n", + "type": "integer", + "format": "int64", + "example": [ + 10 + ] + }, + "NetworkID": { + "description": "Unique ID of the network.\n", + "type": "string", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + }, + "EndpointID": { + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "type": "string", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "description": "Gateway address for this network.\n", + "type": "string", + "example": "172.17.0.1" + }, + "IPAddress": { + "description": "IPv4 address.\n", + "type": "string", + "example": "172.17.0.4", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPPrefixLen": { + "description": "Mask length of the IPv4 address.\n", + "type": "integer", + "example": 16 + }, + "IPv6Gateway": { + "description": "IPv6 gateway address.\n", + "type": "string", + "example": "2001:db8:2::100", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6Address": { + "description": "Global IPv6 address.\n", + "type": "string", + "example": "2001:db8::5689", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "GlobalIPv6PrefixLen": { + "description": "Mask length of the global IPv6 address.\n", + "type": "integer", + "format": "int64", + "example": 64 + }, + "DNSNames": { + "description": "List of all DNS names an endpoint has on a specific network. This\nlist is based on the container name, network aliases, container short\nID, and hostname.\n\nThese DNS names are non-fully qualified but can contain several dots.\nYou can get fully qualified DNS names by appending `.`.\nFor instance, if container name is `my.ctr` and the network is named\n`testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be\n`my.ctr.testnet`.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "foobar", + "server_x", + "server_y", + "my.ctr" + ] + } + } + }, + "EndpointIPAMConfig": { + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "type": "object", + "x-nullable": true, + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "LinkLocalIPs": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + }, + "example": [ + "169.254.34.68", + "fe80::3468" + ] + } + } + }, + "PluginMount": { + "type": "object", + "x-go-name": "Mount", + "x-nullable": false, + "required": [ + "Name", + "Description", + "Settable", + "Source", + "Destination", + "Type", + "Options" + ], + "properties": { + "Name": { + "type": "string", + "x-nullable": false, + "example": "some-mount" + }, + "Description": { + "type": "string", + "x-nullable": false, + "example": "This is a mount that's used by the plugin." + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Destination": { + "type": "string", + "x-nullable": false, + "example": "/mnt/state" + }, + "Type": { + "type": "string", + "x-nullable": false, + "example": "bind" + }, + "Options": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "rbind", + "rw" + ] + } + } + }, + "PluginDevice": { + "type": "object", + "x-go-name": "Device", + "required": [ + "Name", + "Description", + "Settable", + "Path" + ], + "x-nullable": false, + "properties": { + "Name": { + "type": "string", + "x-nullable": false + }, + "Description": { + "type": "string", + "x-nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + } + } + }, + "PluginEnv": { + "type": "object", + "x-go-name": "Env", + "x-nullable": false, + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "x-nullable": false, + "type": "string" + }, + "Description": { + "x-nullable": false, + "type": "string" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + } + }, + "PluginPrivilege": { + "description": "Describes a permission the user has to accept upon installing\nthe plugin.\n", + "type": "object", + "x-go-name": "Privilege", + "properties": { + "Name": { + "type": "string", + "example": "network" + }, + "Description": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "host" + ] + } + } + }, + "Plugin": { + "description": "A plugin for the Engine API", + "type": "object", + "x-go-name": "Plugin", + "required": [ + "Settings", + "Enabled", + "Config", + "Name" + ], + "properties": { + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "x-nullable": false, + "example": "tiborvass/sample-volume-plugin" + }, + "Enabled": { + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "type": "boolean", + "x-nullable": false, + "example": true + }, + "Settings": { + "description": "user-configurable settings for the plugin.", + "type": "object", + "x-go-name": "Settings", + "x-nullable": false, + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "properties": { + "Mounts": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=0" + ] + }, + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginDevice" + } + } + } + }, + "PluginReference": { + "description": "plugin remote reference used to push/pull the plugin", + "type": "string", + "x-go-name": "PluginReference", + "x-nullable": false, + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest" + }, + "Config": { + "description": "The config of a plugin.", + "type": "object", + "x-go-name": "Config", + "x-nullable": false, + "required": [ + "Description", + "Documentation", + "Interface", + "Entrypoint", + "WorkDir", + "Network", + "Linux", + "PidHost", + "PropagatedMount", + "IpcHost", + "Mounts", + "Env", + "Args" + ], + "properties": { + "Description": { + "type": "string", + "x-nullable": false, + "example": "A sample volume plugin for Docker" + }, + "Documentation": { + "type": "string", + "x-nullable": false, + "example": "https://docs.docker.com/engine/extend/plugins/" + }, + "Interface": { + "description": "The interface between Docker and the plugin", + "x-nullable": false, + "type": "object", + "x-go-name": "Interface", + "required": [ + "Types", + "Socket" + ], + "properties": { + "Types": { + "type": "array", + "items": { + "type": "string", + "x-go-type": { + "type": "CapabilityID" + } + }, + "example": [ + "docker.volumedriver/1.0" + ] + }, + "Socket": { + "type": "string", + "x-nullable": false, + "example": "plugins.sock" + }, + "ProtocolScheme": { + "type": "string", + "example": "some.protocol/v1.0", + "description": "Protocol to use for clients connecting to the plugin.", + "enum": [ + "", + "moby.plugins.http/v1" + ] + } + } + }, + "Entrypoint": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ] + }, + "WorkDir": { + "type": "string", + "x-nullable": false, + "example": "/bin/" + }, + "User": { + "type": "object", + "x-go-name": "User", + "x-nullable": false, + "properties": { + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + } + }, + "Network": { + "type": "object", + "x-go-name": "NetworkConfig", + "x-nullable": false, + "required": [ + "Type" + ], + "properties": { + "Type": { + "x-nullable": false, + "type": "string", + "example": "host" + } + } + }, + "Linux": { + "type": "object", + "x-go-name": "LinuxConfig", + "x-nullable": false, + "required": [ + "Capabilities", + "AllowAllDevices", + "Devices" + ], + "properties": { + "Capabilities": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ] + }, + "AllowAllDevices": { + "type": "boolean", + "x-nullable": false, + "example": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginDevice" + } + } + } + }, + "PropagatedMount": { + "type": "string", + "x-nullable": false, + "example": "/mnt/volumes" + }, + "IpcHost": { + "type": "boolean", + "x-nullable": false, + "example": false + }, + "PidHost": { + "type": "boolean", + "x-nullable": false, + "example": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginMount" + } + }, + "Env": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginEnv" + }, + "example": [ + { + "Name": "DEBUG", + "Description": "If set, prints debug messages", + "Settable": null, + "Value": "0" + } + ] + }, + "Args": { + "type": "object", + "x-go-name": "Args", + "x-nullable": false, + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Name": { + "x-nullable": false, + "type": "string", + "example": "args" + }, + "Description": { + "x-nullable": false, + "type": "string", + "example": "command line arguments" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "rootfs": { + "type": "object", + "x-go-name": "RootFS", + "properties": { + "type": { + "type": "string", + "example": "layers" + }, + "diff_ids": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ] + } + } + } + } + } + } + }, + "ObjectVersion": { + "description": "The version number of the object such as node, service, etc. This is needed\nto avoid conflicting writes. The client must send the version number along\nwith the modified specification when updating these objects.\n\nThis approach ensures safe concurrency and determinism in that the change\non the object may not be applied if the version number has changed from the\nlast read. In other words, if two update requests specify the same base\nversion, only one of the requests can succeed. As a result, two separate\nupdate requests that happen at the same time will not unintentionally\noverwrite each other.\n", + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + } + }, + "NodeSpec": { + "type": "object", + "properties": { + "Name": { + "description": "Name for the node.", + "type": "string", + "example": "my-node" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Role": { + "description": "Role of the node.", + "type": "string", + "enum": [ + "worker", + "manager" + ], + "example": "manager" + }, + "Availability": { + "description": "Availability of the node.", + "type": "string", + "enum": [ + "active", + "pause", + "drain" + ], + "example": "active" + } + }, + "example": { + "Availability": "active", + "Name": "node-name", + "Role": "manager", + "Labels": { + "foo": "bar" + } + } + }, + "Node": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/definitions/NodeSpec" + }, + "Description": { + "$ref": "#/definitions/NodeDescription" + }, + "Status": { + "$ref": "#/definitions/NodeStatus" + }, + "ManagerStatus": { + "$ref": "#/definitions/ManagerStatus" + } + } + }, + "NodeDescription": { + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n", + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/definitions/Platform" + }, + "Resources": { + "$ref": "#/definitions/ResourceObject" + }, + "Engine": { + "$ref": "#/definitions/EngineDescription" + }, + "TLSInfo": { + "$ref": "#/definitions/TLSInfo" + } + } + }, + "Platform": { + "description": "Platform represents the platform (Arch/OS).\n", + "type": "object", + "properties": { + "Architecture": { + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "type": "string", + "example": "x86_64" + }, + "OS": { + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "type": "string", + "example": "linux" + } + } + }, + "EngineDescription": { + "description": "EngineDescription provides information about an engine.", + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "example": [ + { + "Type": "Log", + "Name": "awslogs" + }, + { + "Type": "Log", + "Name": "fluentd" + }, + { + "Type": "Log", + "Name": "gcplogs" + }, + { + "Type": "Log", + "Name": "gelf" + }, + { + "Type": "Log", + "Name": "journald" + }, + { + "Type": "Log", + "Name": "json-file" + }, + { + "Type": "Log", + "Name": "splunk" + }, + { + "Type": "Log", + "Name": "syslog" + }, + { + "Type": "Network", + "Name": "bridge" + }, + { + "Type": "Network", + "Name": "host" + }, + { + "Type": "Network", + "Name": "ipvlan" + }, + { + "Type": "Network", + "Name": "macvlan" + }, + { + "Type": "Network", + "Name": "null" + }, + { + "Type": "Network", + "Name": "overlay" + }, + { + "Type": "Volume", + "Name": "local" + }, + { + "Type": "Volume", + "Name": "localhost:5000/vieux/sshfs:latest" + }, + { + "Type": "Volume", + "Name": "vieux/sshfs:latest" + } + ] + } + } + }, + "TLSInfo": { + "description": "Information about the issuer of leaf TLS certificates and the trusted root\nCA certificate.\n", + "type": "object", + "properties": { + "TrustRoot": { + "description": "The root CA certificate(s) that are used to validate leaf TLS\ncertificates.\n", + "type": "string" + }, + "CertIssuerSubject": { + "description": "The base64-url-safe-encoded raw subject bytes of the issuer.", + "type": "string" + }, + "CertIssuerPublicKey": { + "description": "The base64-url-safe-encoded raw public key bytes of the issuer.\n", + "type": "string" + } + }, + "example": { + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + } + }, + "NodeStatus": { + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n", + "type": "object", + "properties": { + "State": { + "$ref": "#/definitions/NodeState" + }, + "Message": { + "type": "string", + "example": "" + }, + "Addr": { + "description": "IP address of the node.", + "type": "string", + "example": "172.17.0.2" + } + } + }, + "NodeState": { + "description": "NodeState represents the state of a node.", + "type": "string", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ], + "example": "ready" + }, + "ManagerStatus": { + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "x-nullable": true, + "type": "object", + "properties": { + "Leader": { + "type": "boolean", + "default": false, + "example": true + }, + "Reachability": { + "$ref": "#/definitions/Reachability" + }, + "Addr": { + "description": "The IP address and port at which the manager is reachable.\n", + "type": "string", + "example": "10.0.0.46:2377" + } + } + }, + "Reachability": { + "description": "Reachability represents the reachability of a node.", + "type": "string", + "enum": [ + "unknown", + "unreachable", + "reachable" + ], + "example": "reachable" + }, + "SwarmSpec": { + "description": "User modifiable swarm configuration.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the swarm.", + "type": "string", + "example": "default" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.corp.type": "production", + "com.example.corp.department": "engineering" + } + }, + "Orchestration": { + "description": "Orchestration configuration.", + "type": "object", + "x-nullable": true, + "properties": { + "TaskHistoryRetentionLimit": { + "description": "The number of historic tasks to keep per instance or node. If\nnegative, never remove completed or failed tasks.\n", + "type": "integer", + "format": "int64", + "example": 10 + } + } + }, + "Raft": { + "description": "Raft configuration.", + "type": "object", + "properties": { + "SnapshotInterval": { + "description": "The number of log entries between snapshots.", + "type": "integer", + "format": "uint64", + "example": 10000 + }, + "KeepOldSnapshots": { + "description": "The number of snapshots to keep beyond the current snapshot.\n", + "type": "integer", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "description": "The number of log entries to keep around to sync up slow followers\nafter a snapshot is created.\n", + "type": "integer", + "format": "uint64", + "example": 500 + }, + "ElectionTick": { + "description": "The number of ticks that a follower will wait for a message from\nthe leader before becoming a candidate and starting an election.\n`ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 3 + }, + "HeartbeatTick": { + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks,\nthe leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate\ndirectly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 1 + } + } + }, + "Dispatcher": { + "description": "Dispatcher configuration.", + "type": "object", + "x-nullable": true, + "properties": { + "HeartbeatPeriod": { + "description": "The delay for an agent to send a heartbeat to the dispatcher.\n", + "type": "integer", + "format": "int64", + "example": 5000000000 + } + } + }, + "CAConfig": { + "description": "CA configuration.", + "type": "object", + "x-nullable": true, + "properties": { + "NodeCertExpiry": { + "description": "The duration node certificates are issued for.", + "type": "integer", + "format": "int64", + "example": 7776000000000000 + }, + "ExternalCAs": { + "description": "Configuration for forwarding signing requests to an external\ncertificate authority.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "description": "Protocol for communication with the external CA (currently\nonly `cfssl` is supported).\n", + "type": "string", + "enum": [ + "cfssl" + ], + "default": "cfssl" + }, + "URL": { + "description": "URL where certificate signing requests should be sent.\n", + "type": "string" + }, + "Options": { + "description": "An object with key/value pairs that are interpreted as\nprotocol-specific options for the external CA driver.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CACert": { + "description": "The root CA certificate (in PEM format) this external CA uses\nto issue TLS certificates (assumed to be to the current swarm\nroot CA certificate if not provided).\n", + "type": "string" + } + } + } + }, + "SigningCACert": { + "description": "The desired signing CA certificate for all swarm node TLS leaf\ncertificates, in PEM format.\n", + "type": "string" + }, + "SigningCAKey": { + "description": "The desired signing CA key for all swarm node TLS leaf certificates,\nin PEM format.\n", + "type": "string" + }, + "ForceRotate": { + "description": "An integer whose purpose is to force swarm to generate a new\nsigning CA certificate and key, if none have been specified in\n`SigningCACert` and `SigningCAKey`\n", + "format": "uint64", + "type": "integer" + } + } + }, + "EncryptionConfig": { + "description": "Parameters related to encryption-at-rest.", + "type": "object", + "properties": { + "AutoLockManagers": { + "description": "If set, generate a key and use it to lock data stored on the\nmanagers.\n", + "type": "boolean", + "example": false + } + } + }, + "TaskDefaults": { + "description": "Defaults for creating tasks in this cluster.", + "type": "object", + "properties": { + "LogDriver": { + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n", + "type": "object", + "properties": { + "Name": { + "description": "The log driver to use as a default for new tasks.\n", + "type": "string", + "example": "json-file" + }, + "Options": { + "description": "Driver-specific options for the selected log driver, specified\nas key/value pairs.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "10", + "max-size": "100m" + } + } + } + } + } + } + } + }, + "ClusterInfo": { + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "x-nullable": true, + "type": "object", + "properties": { + "ID": { + "description": "The ID of the swarm.", + "type": "string", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "UpdatedAt": { + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Spec": { + "$ref": "#/definitions/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/definitions/TLSInfo" + }, + "RootRotationInProgress": { + "description": "Whether there is currently a root CA rotation in progress for the swarm\n", + "type": "boolean", + "example": false + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nIf no port is set or is set to 0, the default port (4789) is used.\n", + "type": "integer", + "format": "uint32", + "default": 4789, + "example": 4789 + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global scope\nnetworks.\n", + "type": "array", + "items": { + "type": "string", + "format": "CIDR", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created from the\ndefault subnet pool.\n", + "type": "integer", + "format": "uint32", + "maximum": 29, + "default": 24, + "example": 24 + } + } + }, + "JoinTokens": { + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n", + "type": "object", + "properties": { + "Worker": { + "description": "The token workers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + }, + "Manager": { + "description": "The token managers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "Swarm": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/definitions/JoinTokens" + } + } + } + ] + }, + "TaskSpec": { + "description": "User modifiable task configuration.", + "type": "object", + "properties": { + "PluginSpec": { + "type": "object", + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Name": { + "description": "The name or 'alias' to use for the plugin.", + "type": "string" + }, + "Remote": { + "description": "The plugin image reference to use.", + "type": "string" + }, + "Disabled": { + "description": "Disable the plugin once scheduled.", + "type": "boolean" + }, + "PluginPrivilege": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginPrivilege" + } + } + } + }, + "ContainerSpec": { + "type": "object", + "description": "Container spec for the service.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "properties": { + "Image": { + "description": "The image name to use for the container", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value data.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Command": { + "description": "The command to be run in the image.", + "type": "array", + "items": { + "type": "string" + } + }, + "Args": { + "description": "Arguments to the command.", + "type": "array", + "items": { + "type": "string" + } + }, + "Hostname": { + "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n", + "type": "string" + }, + "Env": { + "description": "A list of environment variables in the form `VAR=value`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Dir": { + "description": "The working directory for commands to run in.", + "type": "string" + }, + "User": { + "description": "The user inside the container.", + "type": "string" + }, + "Groups": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "Privileges": { + "type": "object", + "description": "Security options for the container", + "properties": { + "CredentialSpec": { + "type": "object", + "description": "CredentialSpec for managed service account (Windows only)", + "properties": { + "Config": { + "type": "string", + "example": "0bt9dmxjvjiqermk6xrop3ekq", + "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "File": { + "type": "string", + "example": "spec.json", + "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + }, + "Registry": { + "type": "string", + "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n" + } + } + }, + "SELinuxContext": { + "type": "object", + "description": "SELinux labels of the container", + "properties": { + "Disable": { + "type": "boolean", + "description": "Disable SELinux" + }, + "User": { + "type": "string", + "description": "SELinux user label" + }, + "Role": { + "type": "string", + "description": "SELinux role label" + }, + "Type": { + "type": "string", + "description": "SELinux type label" + }, + "Level": { + "type": "string", + "description": "SELinux level label" + } + } + }, + "Seccomp": { + "type": "object", + "description": "Options for configuring seccomp on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "unconfined", + "custom" + ] + }, + "Profile": { + "description": "The custom seccomp profile as a json object", + "type": "string" + } + } + }, + "AppArmor": { + "type": "object", + "description": "Options for configuring AppArmor on the container", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "default", + "disabled" + ] + } + } + }, + "NoNewPrivileges": { + "type": "boolean", + "description": "Configuration of the no_new_privs bit in the container" + } + } + }, + "TTY": { + "description": "Whether a pseudo-TTY should be allocated.", + "type": "boolean" + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean" + }, + "ReadOnly": { + "description": "Mount the container's root filesystem as read only.", + "type": "boolean" + }, + "Mounts": { + "description": "Specification for mounts to be added to containers created as part\nof the service.\n", + "type": "array", + "items": { + "$ref": "#/definitions/Mount" + } + }, + "StopSignal": { + "description": "Signal to stop the container.", + "type": "string" + }, + "StopGracePeriod": { + "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n", + "type": "integer", + "format": "int64" + }, + "Healthcheck": { + "$ref": "#/definitions/HealthConfig" + }, + "Hosts": { + "type": "array", + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "items": { + "type": "string" + } + }, + "DNSConfig": { + "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n", + "type": "object", + "properties": { + "Nameservers": { + "description": "The IP addresses of the name servers.", + "type": "array", + "items": { + "type": "string" + } + }, + "Search": { + "description": "A search list for host-name lookup.", + "type": "array", + "items": { + "type": "string" + } + }, + "Options": { + "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Secrets": { + "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "SecretID": { + "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n", + "type": "string" + }, + "SecretName": { + "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "OomScoreAdj": { + "type": "integer", + "format": "int64", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 0 + }, + "Configs": { + "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n", + "type": "object", + "properties": { + "Name": { + "description": "Name represents the final filename in the filesystem.\n", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + }, + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + } + } + }, + "Runtime": { + "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n", + "type": "object" + }, + "ConfigID": { + "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n", + "type": "string" + }, + "ConfigName": { + "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the containers running the service.\n(Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n", + "type": "boolean", + "x-nullable": true + }, + "Sysctls": { + "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "CapabilityAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW", + "CAP_SYS_ADMIN", + "CAP_SYS_CHROOT", + "CAP_SYSLOG" + ] + }, + "CapabilityDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n", + "items": { + "type": "string" + }, + "example": [ + "CAP_NET_RAW" + ] + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + }, + "Hard": { + "description": "Hard limit", + "type": "integer" + } + } + } + } + } + }, + "NetworkAttachmentSpec": { + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "type": "object", + "properties": { + "ContainerID": { + "description": "ID of the container represented by this task", + "type": "string" + } + } + }, + "Resources": { + "description": "Resource requirements which apply to each individual container created\nas part of the service.\n", + "type": "object", + "properties": { + "Limits": { + "description": "Define resources limits.", + "$ref": "#/definitions/Limit" + }, + "Reservations": { + "description": "Define resources reservation.", + "$ref": "#/definitions/ResourceObject" + }, + "SwapBytes": { + "description": "Amount of swap in bytes - can only be used together with a memory limit.\nIf not specified, the default behaviour is to grant a swap space twice\nas big as the memory limit.\nSet to -1 to enable unlimited swap.\n", + "type": "integer", + "format": "int64", + "minimum": -1, + "x-nullable": true, + "x-omitempty": true + }, + "MemorySwappiness": { + "description": "Tune the service's containers' memory swappiness (0 to 100).\nIf not specified, defaults to the containers' OS' default, generally 60,\nor whatever value was predefined in the image.\nSet to -1 to unset a previously set value.\n", + "type": "integer", + "format": "int64", + "minimum": -1, + "maximum": 100, + "x-nullable": true, + "x-omitempty": true + } + } + }, + "RestartPolicy": { + "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n", + "type": "object", + "properties": { + "Condition": { + "description": "Condition for restart.", + "type": "string", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "description": "Delay between restart attempts.", + "type": "integer", + "format": "int64" + }, + "MaxAttempts": { + "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Window": { + "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n", + "type": "integer", + "format": "int64", + "default": 0 + } + } + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production", + "node.platform.os==linux", + "node.platform.arch==x86_64" + ] + }, + "Preferences": { + "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "description": "label descriptor, such as `engine.labels.az`.\n", + "type": "string" + } + } + } + } + }, + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ] + }, + "MaxReplicas": { + "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Platforms": { + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "type": "array", + "items": { + "$ref": "#/definitions/Platform" + } + } + } + }, + "ForceUpdate": { + "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n", + "type": "integer", + "format": "uint64" + }, + "Runtime": { + "description": "Runtime is the type of runtime specified for the task executor.\n", + "type": "string" + }, + "Networks": { + "description": "Specifies which networks the service should attach to.", + "type": "array", + "items": { + "$ref": "#/definitions/NetworkAttachmentConfig" + } + }, + "LogDriver": { + "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "ContainerStatus": { + "type": "object", + "description": "represents the status of a container.", + "properties": { + "ContainerID": { + "type": "string" + }, + "PID": { + "type": "integer" + }, + "ExitCode": { + "type": "integer" + } + } + }, + "PortStatus": { + "type": "object", + "description": "represents the port status of a task's host ports whose service has published host ports", + "properties": { + "Ports": { + "type": "array", + "items": { + "$ref": "#/definitions/EndpointPortConfig" + } + } + } + }, + "TaskStatus": { + "type": "object", + "description": "represents the status of a task.", + "properties": { + "Timestamp": { + "type": "string", + "format": "dateTime" + }, + "State": { + "$ref": "#/definitions/TaskState" + }, + "Message": { + "type": "string" + }, + "Err": { + "type": "string" + }, + "ContainerStatus": { + "$ref": "#/definitions/ContainerStatus" + }, + "PortStatus": { + "$ref": "#/definitions/PortStatus" + } + } + }, + "NetworkAttachment": { + "description": "Specifies how a task is attached to a network, and the addresses the\ntask was assigned on that network.\n", + "type": "object", + "properties": { + "Network": { + "$ref": "#/definitions/Network" + }, + "Addresses": { + "description": "The IP addresses (in CIDR notation) assigned to the task on this\nnetwork. To maintain backward compatibility this field accepts CIDR\nnotation, but only the IP address is used.\n", + "type": "array", + "items": { + "type": "string", + "format": "cidr" + } + } + }, + "example": { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1" + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + }, + "Task": { + "type": "object", + "properties": { + "ID": { + "description": "The ID of the task.", + "type": "string" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Name": { + "description": "Name of the task.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Spec": { + "$ref": "#/definitions/TaskSpec" + }, + "ServiceID": { + "description": "The ID of the service this task is part of.", + "type": "string" + }, + "Slot": { + "type": "integer" + }, + "NodeID": { + "description": "The ID of the node that this task is on.", + "type": "string" + }, + "AssignedGenericResources": { + "$ref": "#/definitions/GenericResources" + }, + "Status": { + "$ref": "#/definitions/TaskStatus" + }, + "DesiredState": { + "$ref": "#/definitions/TaskState" + }, + "JobIteration": { + "description": "If the Service this Task belongs to is a job-mode service, contains\nthe JobIteration of the Service this Task was created for. Absent if\nthe Task was created for a Replicated or Global Service.\n", + "$ref": "#/definitions/ObjectVersion" + }, + "NetworksAttachments": { + "description": "The networks that this task is attached to, and the addresses the\ntask was assigned on each of them.\n", + "type": "array", + "items": { + "$ref": "#/definitions/NetworkAttachment" + } + } + }, + "example": { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ], + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + } + }, + "ServiceSpec": { + "description": "User modifiable configuration for a service.", + "type": "object", + "properties": { + "Name": { + "description": "Name of the service.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "TaskTemplate": { + "$ref": "#/definitions/TaskSpec" + }, + "Mode": { + "description": "Scheduling mode for the service.", + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + }, + "Global": { + "type": "object" + }, + "ReplicatedJob": { + "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n", + "type": "object", + "properties": { + "MaxConcurrent": { + "description": "The maximum number of replicas to run simultaneously.\n", + "type": "integer", + "format": "int64", + "default": 1 + }, + "TotalCompletions": { + "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n", + "type": "integer", + "format": "int64" + } + } + }, + "GlobalJob": { + "description": "The mode used for services which run a task to the completed state\non each valid node.\n", + "type": "object" + } + } + }, + "UpdateConfig": { + "description": "Specification for the update strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between updates, in nanoseconds.", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n", + "type": "string", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "RollbackConfig": { + "description": "Specification for the rollback strategy of the service.", + "type": "object", + "properties": { + "Parallelism": { + "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n", + "type": "integer", + "format": "int64" + }, + "Delay": { + "description": "Amount of time between rollback iterations, in nanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n", + "type": "string", + "enum": [ + "continue", + "pause" + ] + }, + "Monitor": { + "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n", + "type": "integer", + "format": "int64" + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n", + "type": "number", + "default": 0 + }, + "Order": { + "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + } + } + }, + "Networks": { + "description": "Specifies which networks the service should attach to.\n\nDeprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead.\n", + "type": "array", + "items": { + "$ref": "#/definitions/NetworkAttachmentConfig" + } + }, + "EndpointSpec": { + "$ref": "#/definitions/EndpointSpec" + } + } + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "TargetPort": { + "description": "The port inside the container.", + "type": "integer" + }, + "PublishedPort": { + "description": "The port on the swarm hosts.", + "type": "integer" + }, + "PublishMode": { + "description": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "type": "string", + "enum": [ + "ingress", + "host" + ], + "default": "ingress", + "example": "ingress" + } + } + }, + "EndpointSpec": { + "description": "Properties that can be configured to access and load balance a service.", + "type": "object", + "properties": { + "Mode": { + "description": "The mode of resolution to use for internal load balancing between tasks.\n", + "type": "string", + "enum": [ + "vip", + "dnsrr" + ], + "default": "vip" + }, + "Ports": { + "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n", + "type": "array", + "items": { + "$ref": "#/definitions/EndpointPortConfig" + } + } + } + }, + "Service": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/definitions/ServiceSpec" + }, + "Endpoint": { + "type": "object", + "properties": { + "Spec": { + "$ref": "#/definitions/EndpointSpec" + }, + "Ports": { + "type": "array", + "items": { + "$ref": "#/definitions/EndpointPortConfig" + } + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "NetworkID": { + "type": "string" + }, + "Addr": { + "type": "string" + } + } + } + } + } + }, + "UpdateStatus": { + "description": "The status of a service update.", + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + } + } + }, + "ServiceStatus": { + "description": "The status of the service's tasks. Provided only when requested as\npart of a ServiceList operation.\n", + "type": "object", + "properties": { + "RunningTasks": { + "description": "The number of tasks for the service currently in the Running state.\n", + "type": "integer", + "format": "uint64", + "example": 7 + }, + "DesiredTasks": { + "description": "The number of tasks for the service desired to be running.\nFor replicated services, this is the replica count from the\nservice spec. For global services, this is computed by taking\ncount of all tasks for the service with a Desired State other\nthan Shutdown.\n", + "type": "integer", + "format": "uint64", + "example": 10 + }, + "CompletedTasks": { + "description": "The number of tasks for a job that are in the Completed state.\nThis field must be cross-referenced with the service type, as the\nvalue of 0 may mean the service is not in a job mode, or it may\nmean the job-mode service has no tasks yet Completed.\n", + "type": "integer", + "format": "uint64" + } + } + }, + "JobStatus": { + "description": "The status of the service when it is in one of ReplicatedJob or\nGlobalJob modes. Absent on Replicated and Global mode services. The\nJobIteration is an ObjectVersion, but unlike the Service's version,\ndoes not need to be sent with an update request.\n", + "type": "object", + "properties": { + "JobIteration": { + "description": "JobIteration is a value increased each time a Job is executed,\nsuccessfully or otherwise. \"Executed\", in this case, means the\njob as a whole has been started, not that an individual Task has\nbeen launched. A job is \"Executed\" when its ServiceSpec is\nupdated. JobIteration can be used to disambiguate Tasks belonging\nto different executions of a job. Though JobIteration will\nincrease with each subsequent execution, it may not necessarily\nincrease by 1, and so JobIteration should not be used to\n", + "$ref": "#/definitions/ObjectVersion" + }, + "LastExecution": { + "description": "The last time, as observed by the server, that this job was\nstarted.\n", + "type": "string", + "format": "dateTime" + } + } + } + }, + "example": { + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Version": { + "Index": 19 + }, + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Spec": { + "Name": "hopeful_cori", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + } + }, + "Endpoint": { + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ] + }, + "Ports": [ + { + "Protocol": "tcp", + "TargetPort": 6379, + "PublishedPort": 30001 + } + ], + "VirtualIPs": [ + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.2/16" + }, + { + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", + "Addr": "10.255.0.3/16" + } + ] + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "x-go-name": "DeleteResponse", + "properties": { + "Untagged": { + "description": "The image ID of an image that was untagged", + "type": "string" + }, + "Deleted": { + "description": "The image ID of an image that was deleted", + "type": "string" + } + } + }, + "ServiceCreateResponse": { + "type": "object", + "description": "contains the information returned to a client on the\ncreation of a new service.\n", + "properties": { + "ID": { + "description": "The ID of the created service.", + "type": "string", + "x-nullable": false, + "example": "ak7w3gjqoa3kuz8xcpnyy0pvl" + }, + "Warnings": { + "description": "Optional warning message.\n\nFIXME(thaJeztah): this should have \"omitempty\" in the generated type.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + } + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "description": "Optional warning messages", + "type": "array", + "items": { + "type": "string" + } + } + }, + "example": { + "Warnings": [ + "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + ] + } + }, + "ContainerInspectResponse": { + "type": "object", + "title": "ContainerInspectResponse", + "x-go-name": "InspectResponse", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Created": { + "description": "Date and time at which the container was created, formatted in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.", + "type": "string", + "format": "dateTime", + "x-nullable": true, + "example": "2025-02-17T17:43:39.64001363Z" + }, + "Path": { + "description": "The path to the command being run", + "type": "string", + "example": "/bin/sh" + }, + "Args": { + "description": "The arguments to the command being run", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "-c", + "exit 9" + ] + }, + "State": { + "$ref": "#/definitions/ContainerState" + }, + "Image": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ResolvConfPath": { + "description": "Location of the `/etc/resolv.conf` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf" + }, + "HostnamePath": { + "description": "Location of the `/etc/hostname` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname" + }, + "HostsPath": { + "description": "Location of the `/etc/hosts` generated for the container on the\nhost.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "example": "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts" + }, + "LogPath": { + "description": "Location of the file used to buffer the container's logs. Depending on\nthe logging-driver used for the container, this field may be omitted.\n\nThis file is managed through the docker daemon, and should not be\naccessed or modified by other tools.", + "type": "string", + "x-nullable": true, + "example": "/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log" + }, + "Name": { + "description": "The name associated with this container.\n\nFor historic reasons, the name may be prefixed with a forward-slash (`/`).", + "type": "string", + "example": "/funny_chatelet" + }, + "RestartCount": { + "description": "Number of times the container was restarted since it was created,\nor since daemon was started.", + "type": "integer", + "example": 0 + }, + "Driver": { + "description": "The storage-driver used for the container's filesystem (graph-driver\nor snapshotter).", + "type": "string", + "example": "overlayfs" + }, + "Platform": { + "description": "The platform (operating system) for which the container was created.\n\nThis field was introduced for the experimental \"LCOW\" (Linux Containers\nOn Windows) features, which has been removed. In most cases, this field\nis equal to the host's operating system (`linux` or `windows`).", + "type": "string", + "example": "linux" + }, + "ImageManifestDescriptor": { + "$ref": "#/definitions/OCIDescriptor", + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store." + }, + "MountLabel": { + "description": "SELinux mount label set for the container.", + "type": "string", + "example": "" + }, + "ProcessLabel": { + "description": "SELinux process label set for the container.", + "type": "string", + "example": "" + }, + "AppArmorProfile": { + "description": "The AppArmor profile set for the container.", + "type": "string", + "example": "" + }, + "ExecIDs": { + "description": "IDs of exec instances that are running in the container.", + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true, + "example": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ] + }, + "HostConfig": { + "$ref": "#/definitions/HostConfig" + }, + "GraphDriver": { + "$ref": "#/definitions/DriverData", + "x-nullable": true + }, + "Storage": { + "$ref": "#/definitions/Storage", + "x-nullable": true + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "x-nullable": true, + "example": "122880" + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "x-nullable": true, + "example": "1653948416" + }, + "Mounts": { + "description": "List of mounts used by the container.", + "type": "array", + "items": { + "$ref": "#/definitions/MountPoint" + } + }, + "Config": { + "$ref": "#/definitions/ContainerConfig" + }, + "NetworkSettings": { + "$ref": "#/definitions/NetworkSettings" + } + } + }, + "ContainerSummary": { + "type": "object", + "properties": { + "Id": { + "description": "The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).", + "type": "string", + "x-go-name": "ID", + "minLength": 64, + "maxLength": 64, + "pattern": "^[0-9a-fA-F]{64}$", + "example": "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + }, + "Names": { + "description": "The names associated with this container. Most containers have a single\nname, but when using legacy \"links\", the container can have multiple\nnames.\n\nFor historic reasons, names are prefixed with a forward-slash (`/`).", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/funny_chatelet" + ] + }, + "Image": { + "description": "The name or ID of the image used to create the container.\n\nThis field shows the image reference as was specified when creating the container,\nwhich can be in its canonical form (e.g., `docker.io/library/ubuntu:latest`\nor `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`),\nshort form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`).\n\nThe content of this field can be updated at runtime if the image used to\ncreate the container is untagged, in which case the field is updated to\ncontain the the image ID (digest) it was resolved to in its canonical,\nnon-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`).", + "type": "string", + "example": "docker.io/library/ubuntu:latest" + }, + "ImageID": { + "description": "The ID (digest) of the image that this container was created from.", + "type": "string", + "example": "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + }, + "ImageManifestDescriptor": { + "$ref": "#/definitions/OCIDescriptor", + "x-nullable": true, + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store.\n\nThis field is not populated in the `GET /system/df` endpoint.\n" + }, + "Command": { + "description": "Command to run when starting the container", + "type": "string", + "example": "/bin/bash" + }, + "Created": { + "description": "Date and time at which the container was created as a Unix timestamp\n(number of seconds since EPOCH).", + "type": "integer", + "format": "int64", + "example": "1739811096" + }, + "Ports": { + "description": "Port-mappings for the container.", + "type": "array", + "items": { + "$ref": "#/definitions/PortSummary" + } + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "x-nullable": true, + "example": "122880" + }, + "SizeRootFs": { + "description": "The total size of all files in the read-only layers from the image\nthat the container uses. These layers can be shared between containers.\n\nThis field is omitted by default, and only set when size is requested\nin the API request.", + "type": "integer", + "format": "int64", + "x-nullable": true, + "example": "1653948416" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + } + }, + "State": { + "description": "The state of this container.\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "exited", + "removing", + "dead" + ], + "example": "running" + }, + "Status": { + "description": "Additional human-readable status of this container (e.g. `Exit 0`)", + "type": "string", + "example": "Up 4 days" + }, + "HostConfig": { + "type": "object", + "description": "Summary of host-specific runtime information of the container. This\nis a reduced set of information in the container's \"HostConfig\" as\navailable in the container \"inspect\" response.", + "properties": { + "NetworkMode": { + "description": "Networking mode (`host`, `none`, `container:`) or name of the\nprimary network the container is using.\n\nThis field is primarily for backward compatibility. The container\ncan be connected to multiple networks for which information can be\nfound in the `NetworkSettings.Networks` field, which enumerates\nsettings per network.", + "type": "string", + "example": "mynetwork" + }, + "Annotations": { + "description": "Arbitrary key-value metadata attached to the container.", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "string" + }, + "example": { + "io.kubernetes.docker.type": "container", + "io.kubernetes.sandbox.id": "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" + } + } + } + }, + "NetworkSettings": { + "description": "Summary of the container's network settings", + "type": "object", + "properties": { + "Networks": { + "type": "object", + "description": "Summary of network-settings for each network the container is\nattached to.", + "additionalProperties": { + "$ref": "#/definitions/EndpointSettings" + } + } + } + }, + "Mounts": { + "type": "array", + "description": "List of mounts used by the container.", + "items": { + "$ref": "#/definitions/MountPoint" + } + }, + "Health": { + "type": "object", + "description": "Summary of health status\n\nAdded in v1.52, before that version all container summary not include Health.\nAfter this attribute introduced, it includes containers with no health checks configured,\nor containers that are not running with none", + "properties": { + "Status": { + "type": "string", + "description": "the health status of the container", + "enum": [ + "none", + "starting", + "healthy", + "unhealthy" + ], + "example": "healthy" + }, + "FailingStreak": { + "description": "FailingStreak is the number of consecutive failures", + "type": "integer", + "example": 0 + } + } + } + } + }, + "ContainersDiskUsage": { + "type": "object", + "x-go-name": "DiskUsage", + "x-go-package": "github.com/moby/moby/api/types/container", + "description": "represents system data usage information for container resources.\n", + "properties": { + "ActiveCount": { + "description": "Count of active containers.\n", + "type": "integer", + "format": "int64", + "example": 1 + }, + "TotalCount": { + "description": "Count of all containers.\n", + "type": "integer", + "format": "int64", + "example": 4 + }, + "Reclaimable": { + "description": "Disk space that can be reclaimed by removing inactive containers.\n", + "type": "integer", + "format": "int64", + "example": 12345678 + }, + "TotalSize": { + "description": "Disk space in use by containers.\n", + "type": "integer", + "format": "int64", + "example": 98765432 + }, + "Items": { + "description": "List of container summaries.\n", + "type": "array", + "x-omitempty": true, + "items": { + "x-go-type": { + "type": "Summary" + } + } + } + } + }, + "Driver": { + "description": "Driver represents a driver (network, logging, secrets).", + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "Name of the driver.", + "type": "string", + "x-nullable": false, + "example": "some-driver" + }, + "Options": { + "description": "Key/value map of driver-specific options.", + "type": "object", + "x-nullable": false, + "additionalProperties": { + "type": "string" + }, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + } + } + } + }, + "SecretSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the secret.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Data": { + "description": "Data is the data to store as a secret, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nIt must be empty if the Driver field is set, in which case the data is\nloaded from an external secret store. The maximum allowed size is 500KB,\nas defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize).\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "type": "string", + "example": "" + }, + "Driver": { + "description": "Name of the secrets driver used to fetch the secret's value from an\nexternal secret store.\n", + "$ref": "#/definitions/Driver" + }, + "Templating": { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n", + "$ref": "#/definitions/Driver" + } + } + }, + "Secret": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Spec": { + "$ref": "#/definitions/SecretSpec" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Name": { + "description": "User-defined name of the config.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Data": { + "description": "Data is the data to store as a config, formatted as a standard base64-encoded\n([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.\nThe maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize).\n", + "type": "string" + }, + "Templating": { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n", + "$ref": "#/definitions/Driver" + } + } + }, + "Config": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/definitions/ConfigSpec" + } + } + }, + "ContainerState": { + "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command.\n", + "type": "object", + "x-nullable": true, + "properties": { + "Status": { + "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ], + "example": "running" + }, + "Running": { + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "type": "boolean", + "example": true + }, + "Paused": { + "description": "Whether this container is paused.", + "type": "boolean", + "example": false + }, + "Restarting": { + "description": "Whether this container is restarting.", + "type": "boolean", + "example": false + }, + "OOMKilled": { + "description": "Whether a process within this container has been killed because it ran\nout of memory since the container was last started.\n", + "type": "boolean", + "example": false + }, + "Dead": { + "type": "boolean", + "example": false + }, + "Pid": { + "description": "The process ID of this container", + "type": "integer", + "example": 1234 + }, + "ExitCode": { + "description": "The last exit code of this container", + "type": "integer", + "example": 0 + }, + "Error": { + "type": "string" + }, + "StartedAt": { + "description": "The time when this container was last started.", + "type": "string", + "example": "2020-01-06T09:06:59.461876391Z" + }, + "FinishedAt": { + "description": "The time when this container last exited.", + "type": "string", + "example": "2020-01-06T09:07:59.461876391Z" + }, + "Health": { + "$ref": "#/definitions/Health" + } + } + }, + "ContainerCreateResponse": { + "description": "OK response to ContainerCreate operation", + "type": "object", + "title": "ContainerCreateResponse", + "x-go-name": "CreateResponse", + "required": [ + "Id", + "Warnings" + ], + "properties": { + "Id": { + "description": "The ID of the created container", + "type": "string", + "x-nullable": false, + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Warnings": { + "description": "Warnings encountered when creating the container", + "type": "array", + "x-nullable": false, + "items": { + "type": "string" + }, + "example": [] + } + } + }, + "ContainerUpdateResponse": { + "type": "object", + "title": "ContainerUpdateResponse", + "x-go-name": "UpdateResponse", + "description": "Response for a successful container-update.", + "properties": { + "Warnings": { + "type": "array", + "description": "Warnings encountered when updating the container.", + "items": { + "type": "string" + }, + "example": [ + "Published ports are discarded when using host network mode" + ] + } + } + }, + "ContainerStatsResponse": { + "description": "Statistics sample for a container.\n", + "type": "object", + "x-go-name": "StatsResponse", + "title": "ContainerStatsResponse", + "properties": { + "id": { + "description": "ID of the container for which the stats were collected.\n", + "type": "string", + "x-nullable": true, + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "name": { + "description": "Name of the container for which the stats were collected.\n", + "type": "string", + "x-nullable": true, + "example": "boring_wozniak" + }, + "os_type": { + "description": "OSType is the OS of the container (\"linux\" or \"windows\") to allow\nplatform-specific handling of stats.\n", + "type": "string", + "x-nullable": true, + "example": "linux" + }, + "read": { + "description": "Date and time at which this sample was collected.\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:22.165243637Z" + }, + "cpu_stats": { + "$ref": "#/definitions/ContainerCPUStats" + }, + "memory_stats": { + "$ref": "#/definitions/ContainerMemoryStats" + }, + "networks": { + "description": "Network statistics for the container per interface.\n\nThis field is omitted if the container has no networking enabled.\n", + "x-nullable": true, + "additionalProperties": { + "$ref": "#/definitions/ContainerNetworkStats" + }, + "example": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + } + }, + "pids_stats": { + "$ref": "#/definitions/ContainerPidsStats" + }, + "blkio_stats": { + "$ref": "#/definitions/ContainerBlkioStats" + }, + "num_procs": { + "description": "The number of processors on the system.\n\nThis field is Windows-specific and always zero for Linux containers.\n", + "type": "integer", + "format": "uint32", + "example": 16 + }, + "storage_stats": { + "$ref": "#/definitions/ContainerStorageStats" + }, + "preread": { + "description": "Date and time at which this first sample was collected. This field\nis not propagated if the \"one-shot\" option is set. If the \"one-shot\"\noption is set, this field may be omitted, empty, or set to a default\ndate (`0001-01-01T00:00:00Z`).\n\nThe value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nwith nano-seconds.\n", + "type": "string", + "format": "date-time", + "example": "2025-01-16T13:55:21.160452595Z" + }, + "precpu_stats": { + "$ref": "#/definitions/ContainerCPUStats" + } + } + }, + "ContainerBlkioStats": { + "description": "BlkioStats stores all IO service stats for data read and write.\n\nThis type is Linux-specific and holds many fields that are specific to cgroups v1.\nOn a cgroup v2 host, all fields other than `io_service_bytes_recursive`\nare omitted or `null`.\n\nThis type is only populated on Linux and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "BlkioStats", + "x-nullable": true, + "properties": { + "io_service_bytes_recursive": { + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_serviced_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_queue_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_service_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_wait_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_merged_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "io_time_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + }, + "sectors_recursive": { + "description": "This field is only available when using Linux containers with\ncgroups v1. It is omitted or `null` when using cgroups v2.\n", + "x-nullable": true, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerBlkioStatEntry" + } + } + }, + "example": { + "io_service_bytes_recursive": [ + { + "major": 254, + "minor": 0, + "op": "read", + "value": 7593984 + }, + { + "major": 254, + "minor": 0, + "op": "write", + "value": 100 + } + ], + "io_serviced_recursive": null, + "io_queue_recursive": null, + "io_service_time_recursive": null, + "io_wait_time_recursive": null, + "io_merged_recursive": null, + "io_time_recursive": null, + "sectors_recursive": null + } + }, + "ContainerBlkioStatEntry": { + "description": "Blkio stats entry.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "BlkioStatEntry", + "x-nullable": true, + "properties": { + "major": { + "type": "integer", + "format": "uint64", + "example": 254 + }, + "minor": { + "type": "integer", + "format": "uint64", + "example": 0 + }, + "op": { + "type": "string", + "example": "read" + }, + "value": { + "type": "integer", + "format": "uint64", + "example": 7593984 + } + } + }, + "ContainerCPUStats": { + "description": "CPU related info of the container\n", + "type": "object", + "x-go-name": "CPUStats", + "x-nullable": true, + "properties": { + "cpu_usage": { + "$ref": "#/definitions/ContainerCPUUsage" + }, + "system_cpu_usage": { + "description": "System Usage.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 5 + }, + "online_cpus": { + "description": "Number of online CPUs.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint32", + "x-nullable": true, + "example": 5 + }, + "throttling_data": { + "$ref": "#/definitions/ContainerThrottlingData" + } + } + }, + "ContainerCPUUsage": { + "description": "All CPU stats aggregated since container inception.\n", + "type": "object", + "x-go-name": "CPUUsage", + "x-nullable": true, + "properties": { + "total_usage": { + "description": "Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows).\n", + "type": "integer", + "format": "uint64", + "example": 29912000 + }, + "percpu_usage": { + "description": "Total CPU time (in nanoseconds) consumed per core (Linux).\n\nThis field is Linux-specific when using cgroups v1. It is omitted\nwhen using cgroups v2 and Windows containers.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "integer", + "format": "uint64", + "example": 29912000 + } + }, + "usage_in_kernelmode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 21994000 + }, + "usage_in_usermode": { + "description": "Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux),\nor time spent (in 100's of nanoseconds) by all container processes in\nkernel mode (Windows).\n\nNot populated for Windows containers using Hyper-V isolation.\n", + "type": "integer", + "format": "uint64", + "example": 7918000 + } + } + }, + "ContainerPidsStats": { + "description": "PidsStats contains Linux-specific stats of a container's process-IDs (PIDs).\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "PidsStats", + "x-nullable": true, + "properties": { + "current": { + "description": "Current is the number of PIDs in the cgroup.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 5 + }, + "limit": { + "description": "Limit is the hard limit on the number of pids in the cgroup.\nA \"Limit\" of 0 means that there is no limit.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": "18446744073709551615" + } + } + }, + "ContainerThrottlingData": { + "description": "CPU throttling stats of the container.\n\nThis type is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "x-go-name": "ThrottlingData", + "x-nullable": true, + "properties": { + "periods": { + "description": "Number of periods with throttling active.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_periods": { + "description": "Number of periods when the container hit its throttling limit.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "throttled_time": { + "description": "Aggregated time (in nanoseconds) the container was throttled for.\n", + "type": "integer", + "format": "uint64", + "example": 0 + } + } + }, + "ContainerMemoryStats": { + "description": "Aggregates all memory stats since container inception on Linux.\nWindows returns stats for commit and private working set only.\n", + "type": "object", + "x-go-name": "MemoryStats", + "properties": { + "usage": { + "description": "Current `res_counter` usage for memory.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + }, + "max_usage": { + "description": "Maximum usage ever recorded.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + }, + "stats": { + "description": "All the stats exported via memory.stat.\n\nThe fields in this object differ between cgroups v1 and v2.\nOn cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available.\nOn cgroups v2, fields such as `file`, `anon`, `inactive_file` are available.\n\nThis field is Linux-specific and omitted for Windows containers.\n", + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "uint64", + "x-nullable": true + }, + "example": { + "active_anon": 1572864, + "active_file": 5115904, + "anon": 1572864, + "anon_thp": 0, + "file": 7626752, + "file_dirty": 0, + "file_mapped": 2723840, + "file_writeback": 0, + "inactive_anon": 0, + "inactive_file": 2510848, + "kernel_stack": 16384, + "pgactivate": 0, + "pgdeactivate": 0, + "pgfault": 2042, + "pglazyfree": 0, + "pglazyfreed": 0, + "pgmajfault": 45, + "pgrefill": 0, + "pgscan": 0, + "pgsteal": 0, + "shmem": 0, + "slab": 1180928, + "slab_reclaimable": 725576, + "slab_unreclaimable": 455352, + "sock": 0, + "thp_collapse_alloc": 0, + "thp_fault_alloc": 1, + "unevictable": 0, + "workingset_activate": 0, + "workingset_nodereclaim": 0, + "workingset_refault": 0 + } + }, + "failcnt": { + "description": "Number of times memory usage hits limits.\n\nThis field is Linux-specific and only supported on cgroups v1.\nIt is omitted when using cgroups v2 and for Windows containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + }, + "limit": { + "description": "This field is Linux-specific and omitted for Windows containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 8217579520 + }, + "commitbytes": { + "description": "Committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + }, + "commitpeakbytes": { + "description": "Peak committed bytes.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + }, + "privateworkingset": { + "description": "Private working set.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 0 + } + } + }, + "ContainerNetworkStats": { + "description": "Aggregates the network stats of one container\n", + "type": "object", + "x-go-name": "NetworkStats", + "x-nullable": true, + "properties": { + "rx_bytes": { + "description": "Bytes received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 5338 + }, + "rx_packets": { + "description": "Packets received. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 36 + }, + "rx_errors": { + "description": "Received errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "rx_dropped": { + "description": "Incoming packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_bytes": { + "description": "Bytes sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 1200 + }, + "tx_packets": { + "description": "Packets sent. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 12 + }, + "tx_errors": { + "description": "Sent errors. Not used on Windows.\n\nThis field is Linux-specific and always zero for Windows containers.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "tx_dropped": { + "description": "Outgoing packets dropped. Windows and Linux.\n", + "type": "integer", + "format": "uint64", + "example": 0 + }, + "endpoint_id": { + "description": "Endpoint ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "string", + "x-nullable": true + }, + "instance_id": { + "description": "Instance ID. Not used on Linux.\n\nThis field is Windows-specific and omitted for Linux containers.\n", + "type": "string", + "x-nullable": true + } + } + }, + "ContainerStorageStats": { + "description": "StorageStats is the disk I/O stats for read/write on Windows.\n\nThis type is Windows-specific and omitted for Linux containers.\n", + "type": "object", + "x-go-name": "StorageStats", + "x-nullable": true, + "properties": { + "read_count_normalized": { + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 7593984 + }, + "read_size_bytes": { + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 7593984 + }, + "write_count_normalized": { + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 7593984 + }, + "write_size_bytes": { + "type": "integer", + "format": "uint64", + "x-nullable": true, + "example": 7593984 + } + } + }, + "ContainerTopResponse": { + "type": "object", + "x-go-name": "TopResponse", + "title": "ContainerTopResponse", + "description": "Container \"top\" response.", + "properties": { + "Titles": { + "description": "The ps column titles", + "type": "array", + "items": { + "type": "string" + }, + "example": { + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ] + } + }, + "Processes": { + "description": "Each process running in the container, where each process\nis an array of values corresponding to the titles.", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": { + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ] + } + } + } + }, + "ContainerWaitResponse": { + "description": "OK response to ContainerWait operation", + "type": "object", + "x-go-name": "WaitResponse", + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "properties": { + "StatusCode": { + "description": "Exit code of the container", + "type": "integer", + "format": "int64", + "x-nullable": false + }, + "Error": { + "$ref": "#/definitions/ContainerWaitExitError" + } + } + }, + "ContainerWaitExitError": { + "description": "container waiting error, if any", + "type": "object", + "x-go-name": "WaitExitError", + "properties": { + "Message": { + "description": "Details of an error", + "type": "string" + } + } + }, + "SystemVersion": { + "type": "object", + "description": "Response of Engine API: GET \"/version\"\n", + "properties": { + "Platform": { + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "type": "string" + } + } + }, + "Components": { + "type": "array", + "description": "Information about system components\n", + "items": { + "type": "object", + "x-go-name": "ComponentVersion", + "required": [ + "Name", + "Version" + ], + "properties": { + "Name": { + "description": "Name of the component\n", + "type": "string", + "example": "Engine" + }, + "Version": { + "description": "Version of the component\n", + "type": "string", + "x-nullable": false, + "example": "27.0.1" + }, + "Details": { + "description": "Key/value pairs of strings with additional information about the\ncomponent. These values are intended for informational purposes\nonly, and their content is not defined, and not part of the API\nspecification.\n\nThese messages can be printed by the client as information to the user.\n", + "type": "object", + "x-nullable": true + } + } + } + }, + "Version": { + "description": "The version of the daemon", + "type": "string", + "example": "27.0.1" + }, + "ApiVersion": { + "description": "The default (and highest) API version that is supported by the daemon\n", + "type": "string", + "example": "1.47" + }, + "MinAPIVersion": { + "description": "The minimum API version that is supported by the daemon\n", + "type": "string", + "example": "1.24" + }, + "GitCommit": { + "description": "The Git commit of the source code that was used to build the daemon\n", + "type": "string", + "example": "48a66213fe" + }, + "GoVersion": { + "description": "The version Go used to compile the daemon, and the version of the Go\nruntime in use.\n", + "type": "string", + "example": "go1.22.7" + }, + "Os": { + "description": "The operating system that the daemon is running on (\"linux\" or \"windows\")\n", + "type": "string", + "example": "linux" + }, + "Arch": { + "description": "Architecture of the daemon, as returned by the Go runtime (`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "amd64" + }, + "KernelVersion": { + "description": "The kernel version (`uname -r`) that the daemon is running on.\n\nThis field is omitted when empty.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "Experimental": { + "description": "Indicates if the daemon is started with experimental features enabled.\n\nThis field is omitted when empty / false.\n", + "type": "boolean", + "example": true + }, + "BuildTime": { + "description": "The date and time that the daemon was compiled.\n", + "type": "string", + "example": "2020-06-22T15:49:27.000000000+00:00" + } + } + }, + "SystemInfo": { + "type": "object", + "properties": { + "ID": { + "description": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "type": "string", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "Containers": { + "description": "Total number of containers on the host.", + "type": "integer", + "example": 14 + }, + "ContainersRunning": { + "description": "Number of containers with status `\"running\"`.\n", + "type": "integer", + "example": 3 + }, + "ContainersPaused": { + "description": "Number of containers with status `\"paused\"`.\n", + "type": "integer", + "example": 1 + }, + "ContainersStopped": { + "description": "Number of containers with status `\"stopped\"`.\n", + "type": "integer", + "example": 10 + }, + "Images": { + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "type": "integer", + "example": 508 + }, + "Driver": { + "description": "Name of the storage driver in use.", + "type": "string", + "example": "overlay2" + }, + "DriverStatus": { + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ] + }, + "DockerRootDir": { + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "type": "string", + "example": "/var/lib/docker" + }, + "Plugins": { + "$ref": "#/definitions/PluginsInfo" + }, + "MemoryLimit": { + "description": "Indicates if the host has memory limit support enabled.", + "type": "boolean", + "example": true + }, + "SwapLimit": { + "description": "Indicates if the host has memory swap limit support enabled.", + "type": "boolean", + "example": true + }, + "CpuCfsPeriod": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CpuCfsQuota": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\nthe host.\n", + "type": "boolean", + "example": true + }, + "CPUShares": { + "description": "Indicates if CPU Shares limiting is supported by the host.\n", + "type": "boolean", + "example": true + }, + "CPUSet": { + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "type": "boolean", + "example": true + }, + "PidsLimit": { + "description": "Indicates if the host kernel has PID limit support enabled.", + "type": "boolean", + "example": true + }, + "OomKillDisable": { + "description": "Indicates if OOM killer disable is supported on the host.", + "type": "boolean" + }, + "IPv4Forwarding": { + "description": "Indicates IPv4 forwarding is enabled.", + "type": "boolean", + "example": true + }, + "Debug": { + "description": "Indicates if the daemon is running in debug-mode / with debug-level\nlogging enabled.\n", + "type": "boolean", + "example": true + }, + "NFd": { + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 64 + }, + "NGoroutines": { + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 174 + }, + "SystemTime": { + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "type": "string", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "LoggingDriver": { + "description": "The logging driver to use as a default for new containers.\n", + "type": "string" + }, + "CgroupDriver": { + "description": "The driver to use for managing cgroups.\n", + "type": "string", + "enum": [ + "cgroupfs", + "systemd", + "none" + ], + "default": "cgroupfs", + "example": "cgroupfs" + }, + "CgroupVersion": { + "description": "The version of the cgroup.\n", + "type": "string", + "enum": [ + "1", + "2" + ], + "default": "1", + "example": "1" + }, + "NEventsListener": { + "description": "Number of event listeners subscribed.", + "type": "integer", + "example": 30 + }, + "KernelVersion": { + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "type": "string", + "example": "6.8.0-31-generic" + }, + "OperatingSystem": { + "description": "Name of the host's operating system, for example: \"Ubuntu 24.04 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "type": "string", + "example": "Ubuntu 24.04 LTS" + }, + "OSVersion": { + "description": "Version of the host's operating system\n\n


\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "type": "string", + "example": "24.04" + }, + "OSType": { + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n", + "type": "string", + "example": "linux" + }, + "Architecture": { + "description": "Hardware architecture of the host, as returned by the operating system.\nThis is equivalent to the output of `uname -m` on Linux.\n\nUnlike `Arch` (from `/version`), this reports the machine's native\narchitecture, which can differ from the Go runtime architecture when\nrunning a binary compiled for a different architecture (for example,\na 32-bit binary running on 64-bit hardware).\n", + "type": "string", + "example": "x86_64" + }, + "NCPU": { + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "type": "integer", + "example": 4 + }, + "MemTotal": { + "description": "Total amount of physical memory available on the host, in bytes.\n", + "type": "integer", + "format": "int64", + "example": 2095882240 + }, + "IndexServerAddress": { + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "default": "https://index.docker.io/v1/", + "type": "string", + "example": "https://index.docker.io/v1/" + }, + "RegistryConfig": { + "$ref": "#/definitions/RegistryServiceConfig" + }, + "GenericResources": { + "$ref": "#/definitions/GenericResources" + }, + "HttpProxy": { + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\nCredentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\nare masked in the API response.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + }, + "NoProxy": { + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "*.local, 169.254/16" + }, + "Name": { + "description": "Hostname of the host.", + "type": "string", + "example": "node5.corp.example.com" + }, + "Labels": { + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "storage=ssd", + "production" + ] + }, + "ExperimentalBuild": { + "description": "Indicates if experimental features are enabled on the daemon.\n", + "type": "boolean", + "example": true + }, + "ServerVersion": { + "description": "Version string of the daemon.\n", + "type": "string", + "example": "27.0.1" + }, + "Runtimes": { + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Runtime" + }, + "default": { + "runc": { + "path": "runc" + } + }, + "example": { + "runc": { + "path": "runc" + }, + "runc-master": { + "path": "/go/bin/runc" + }, + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "DefaultRuntime": { + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "type": "string", + "default": "runc", + "example": "runc" + }, + "Swarm": { + "$ref": "#/definitions/SwarmInfo" + }, + "LiveRestoreEnabled": { + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "type": "boolean", + "default": false, + "example": false + }, + "Isolation": { + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "default": "default", + "type": "string", + "enum": [ + "default", + "hyperv", + "process", + "" + ] + }, + "InitBinary": { + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "docker-init" + }, + "ContainerdCommit": { + "$ref": "#/definitions/Commit" + }, + "RuncCommit": { + "$ref": "#/definitions/Commit" + }, + "InitCommit": { + "$ref": "#/definitions/Commit" + }, + "SecurityOptions": { + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, user-namespaces (userns), rootless and\nno-new-privileges.\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns", + "name=rootless" + ] + }, + "ProductLicense": { + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "type": "string", + "example": "Community Engine" + }, + "DefaultAddressPools": { + "description": "List of custom default address pools for local networks, which can be\nspecified in the daemon.json file or dockerd option.\n\nExample: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n10.10.[0-255].0/24 address pools.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Base": { + "description": "The network address in CIDR format", + "type": "string", + "example": "10.10.0.0/16" + }, + "Size": { + "description": "The network pool size", + "type": "integer", + "example": "24" + } + } + } + }, + "FirewallBackend": { + "$ref": "#/definitions/FirewallInfo" + }, + "DiscoveredDevices": { + "description": "List of devices discovered by device drivers.\n\nEach device includes information about its source driver, kind, name,\nand additional driver-specific attributes.\n", + "type": "array", + "items": { + "$ref": "#/definitions/DeviceInfo" + } + }, + "NRI": { + "$ref": "#/definitions/NRIInfo" + }, + "Warnings": { + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "WARNING: No memory limit support" + ] + }, + "CDISpecDirs": { + "description": "List of directories where (Container Device Interface) CDI\nspecifications are located.\n\nThese specifications define vendor-specific modifications to an OCI\nruntime specification for a container being created.\n\nAn empty list indicates that CDI device injection is disabled.\n\nNote that since using CDI device injection requires the daemon to have\nexperimental enabled. For non-experimental daemons an empty list will\nalways be returned.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/etc/cdi", + "/var/run/cdi" + ] + }, + "Containerd": { + "$ref": "#/definitions/ContainerdInfo" + } + } + }, + "ContainerdInfo": { + "description": "Information for connecting to the containerd instance that is used by the daemon.\nThis is included for debugging purposes only.\n", + "type": "object", + "x-nullable": true, + "properties": { + "Address": { + "description": "The address of the containerd socket.", + "type": "string", + "example": "/run/containerd/containerd.sock" + }, + "Namespaces": { + "description": "The namespaces that the daemon uses for running containers and\nplugins in containerd. These namespaces can be configured in the\ndaemon configuration, and are considered to be used exclusively\nby the daemon, Tampering with the containerd instance may cause\nunexpected behavior.\n\nAs these namespaces are considered to be exclusively accessed\nby the daemon, it is not recommended to change these values,\nor to change them to a value that is used by other systems,\nsuch as cri-containerd.\n", + "type": "object", + "properties": { + "Containers": { + "description": "The default containerd namespace used for containers managed\nby the daemon.\n\nThe default namespace for containers is \"moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "moby", + "example": "moby" + }, + "Plugins": { + "description": "The default containerd namespace used for plugins managed by\nthe daemon.\n\nThe default namespace for plugins is \"plugins.moby\", but will be\nsuffixed with the `.` of the remapped `root` if\nuser-namespaces are enabled and the containerd image-store\nis used.\n", + "type": "string", + "default": "plugins.moby", + "example": "plugins.moby" + } + } + } + } + }, + "FirewallInfo": { + "description": "Information about the daemon's firewalling configuration.\n\nThis field is currently only used on Linux, and omitted on other platforms.\n", + "type": "object", + "x-nullable": true, + "properties": { + "Driver": { + "description": "The name of the firewall backend driver.\n", + "type": "string", + "example": "nftables" + }, + "Info": { + "description": "Information about the firewall backend, provided as\n\"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "ReloadedAt", + "2025-01-01T00:00:00Z" + ] + ] + } + } + }, + "PluginsInfo": { + "description": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n", + "type": "object", + "properties": { + "Volume": { + "description": "Names of available volume-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "local" + ] + }, + "Network": { + "description": "Names of available network-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ] + }, + "Authorization": { + "description": "Names of available authorization plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "img-authz-plugin", + "hbm" + ] + }, + "Log": { + "description": "Names of available logging-drivers, and logging-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "splunk", + "syslog" + ] + } + } + }, + "RegistryServiceConfig": { + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "type": "object", + "x-nullable": true, + "properties": { + "InsecureRegistryCIDRs": { + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`::1/128` and `127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n> **Warning**: Using this option can be useful when running a local\n> registry, but introduces security vulnerabilities. This option\n> should therefore ONLY be used for testing purposes. For increased\n> security, users should add their CA to their system's list of trusted\n> CAs instead of enabling this option.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "::1/128", + "127.0.0.0/8" + ] + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Name": "127.0.0.1:5000", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Name": "[2001:db8:a0b:12f0::1]:80", + "Mirrors": [], + "Secure": false, + "Official": false + }, + "docker.io": { + "Name": "docker.io", + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Secure": true, + "Official": true + }, + "registry.internal.corp.example.com:3000": { + "Name": "registry.internal.corp.example.com:3000", + "Mirrors": [], + "Secure": false, + "Official": false + } + } + }, + "Mirrors": { + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ] + } + } + }, + "IndexInfo": { + "description": "IndexInfo contains information about a registry.", + "type": "object", + "x-nullable": true, + "properties": { + "Name": { + "description": "Name of the registry, such as \"docker.io\".\n", + "type": "string", + "example": "docker.io" + }, + "Mirrors": { + "description": "List of mirrors, expressed as URIs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ] + }, + "Secure": { + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n> **Warning**: Insecure registries can be useful when running a local\n> registry. However, because its use creates security vulnerabilities\n> it should ONLY be enabled for testing purposes. For increased\n> security, users should add their CA to their system's list of\n> trusted CAs instead of enabling this option.\n", + "type": "boolean", + "example": true + }, + "Official": { + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "type": "boolean", + "example": true + } + } + }, + "Runtime": { + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n", + "type": "object", + "properties": { + "path": { + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "type": "array", + "x-nullable": true, + "items": { + "type": "string" + }, + "example": [ + "--debug", + "--systemd-cgroup=false" + ] + }, + "status": { + "description": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "string" + }, + "example": { + "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" + } + } + } + }, + "Commit": { + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n", + "type": "object", + "properties": { + "ID": { + "description": "Actual commit ID of external tool.", + "type": "string", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + } + } + }, + "SwarmInfo": { + "description": "Represents generic information about swarm.\n", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string", + "default": "", + "example": "k67qz4598weg5unwwffg6z1m1" + }, + "NodeAddr": { + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "type": "string", + "default": "", + "example": "10.0.0.46" + }, + "LocalNodeState": { + "$ref": "#/definitions/LocalNodeState" + }, + "ControlAvailable": { + "type": "boolean", + "default": false, + "example": true + }, + "Error": { + "type": "string", + "default": "" + }, + "RemoteManagers": { + "description": "List of ID's and addresses of other managers in the swarm.\n", + "type": "array", + "default": null, + "x-nullable": true, + "items": { + "$ref": "#/definitions/PeerNode" + }, + "example": [ + { + "NodeID": "71izy0goik036k48jg985xnds", + "Addr": "10.0.0.158:2377" + }, + { + "NodeID": "79y6h1o4gv8n120drcprv5nmc", + "Addr": "10.0.0.159:2377" + }, + { + "NodeID": "k67qz4598weg5unwwffg6z1m1", + "Addr": "10.0.0.46:2377" + } + ] + }, + "Nodes": { + "description": "Total number of nodes in the swarm.", + "type": "integer", + "x-nullable": true, + "example": 4 + }, + "Managers": { + "description": "Total number of managers in the swarm.", + "type": "integer", + "x-nullable": true, + "example": 3 + }, + "Cluster": { + "$ref": "#/definitions/ClusterInfo" + } + } + }, + "LocalNodeState": { + "description": "Current local status of this node.", + "type": "string", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ], + "example": "active" + }, + "PeerNode": { + "description": "Represents a peer-node in the swarm", + "type": "object", + "properties": { + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string" + }, + "Addr": { + "description": "IP address and ports at which this node can be reached.\n", + "type": "string" + } + } + }, + "NetworkAttachmentConfig": { + "description": "Specifies how a service should be attached to a particular network.\n", + "type": "object", + "properties": { + "Target": { + "description": "The target network for attachment. Must be a network name or ID.\n", + "type": "string" + }, + "Aliases": { + "description": "Discoverable alternate names for the service on this network.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "description": "Driver attachment options for the network target.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "EventActor": { + "description": "Actor describes something that generates events, like a container, network,\nor a volume.\n", + "type": "object", + "properties": { + "ID": { + "description": "The ID of the object emitting the event", + "type": "string", + "example": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Attributes": { + "description": "Various key/value attributes of the object, depending on its type.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-label-value", + "image": "alpine:latest", + "name": "my-container" + } + } + } + }, + "EventMessage": { + "description": "EventMessage represents the information an event contains.\n", + "type": "object", + "title": "SystemEventsResponse", + "properties": { + "Type": { + "description": "The type of object emitting the event", + "type": "string", + "enum": [ + "builder", + "config", + "container", + "daemon", + "image", + "network", + "node", + "plugin", + "secret", + "service", + "volume" + ], + "example": "container" + }, + "Action": { + "description": "The type of event", + "type": "string", + "example": "create" + }, + "Actor": { + "$ref": "#/definitions/EventActor" + }, + "scope": { + "description": "Scope of the event. Engine events are `local` scope. Cluster (Swarm)\nevents are `swarm` scope.\n", + "type": "string", + "enum": [ + "local", + "swarm" + ] + }, + "time": { + "description": "Timestamp of event", + "type": "integer", + "format": "int64", + "example": 1629574695 + }, + "timeNano": { + "description": "Timestamp of event, with nanosecond accuracy", + "type": "integer", + "format": "int64", + "example": 1629574695515050000 + } + } + }, + "OCIDescriptor": { + "type": "object", + "x-go-name": "Descriptor", + "description": "A descriptor struct containing digest, media type, and size, as defined in\nthe [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).\n", + "properties": { + "mediaType": { + "description": "The media type of the object this schema refers to.\n", + "type": "string", + "example": "application/vnd.oci.image.manifest.v1+json" + }, + "digest": { + "description": "The digest of the targeted content.\n", + "type": "string", + "example": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + }, + "size": { + "description": "The size in bytes of the blob.\n", + "type": "integer", + "format": "int64", + "example": 424 + }, + "urls": { + "description": "List of URLs from which this object MAY be downloaded.", + "type": "array", + "items": { + "type": "string", + "format": "uri" + }, + "x-nullable": true + }, + "annotations": { + "description": "Arbitrary metadata relating to the targeted content.", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.base.digest": "sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8", + "org.opencontainers.image.base.name": "scratch", + "org.opencontainers.image.created": "2025-01-27T00:00:00Z", + "org.opencontainers.image.revision": "9fabb4bad5138435b01857e2fe9363e2dc5f6a79", + "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base", + "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu", + "org.opencontainers.image.version": "24.04" + } + }, + "data": { + "type": "string", + "x-nullable": true, + "description": "Data is an embedding of the targeted content. This is encoded as a base64\nstring when marshalled to JSON (automatically, by encoding/json). If\npresent, Data can be used directly to avoid fetching the targeted content.", + "example": null + }, + "platform": { + "$ref": "#/definitions/OCIPlatform" + }, + "artifactType": { + "description": "ArtifactType is the IANA media type of this artifact.", + "type": "string", + "x-nullable": true, + "example": null + } + } + }, + "OCIPlatform": { + "type": "object", + "x-go-name": "Platform", + "x-nullable": true, + "description": "Describes the platform which the image in the manifest runs on, as defined\nin the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).\n", + "properties": { + "architecture": { + "description": "The CPU architecture, for example `amd64` or `ppc64`.\n", + "type": "string", + "example": "arm" + }, + "os": { + "description": "The operating system, for example `linux` or `windows`.\n", + "type": "string", + "example": "windows" + }, + "os.version": { + "description": "Optional field specifying the operating system version, for example on\nWindows `10.0.19041.1165`.\n", + "type": "string", + "example": "10.0.19041.1165" + }, + "os.features": { + "description": "Optional field specifying an array of strings, each listing a required\nOS feature (for example on Windows `win32k`).\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "win32k" + ] + }, + "variant": { + "description": "Optional field specifying a variant of the CPU, for example `v7` to\nspecify ARMv7 when architecture is `arm`.\n", + "type": "string", + "example": "v7" + } + } + }, + "DistributionInspect": { + "type": "object", + "x-go-name": "DistributionInspect", + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "description": "Describes the result obtained from contacting the registry to retrieve\nimage metadata.\n", + "properties": { + "Descriptor": { + "$ref": "#/definitions/OCIDescriptor" + }, + "Platforms": { + "type": "array", + "description": "An array containing all platforms supported by the image.\n", + "items": { + "$ref": "#/definitions/OCIPlatform" + } + } + } + }, + "ClusterVolume": { + "type": "object", + "description": "Options and information specific to, and only present on, Swarm CSI\ncluster volumes.\n", + "properties": { + "ID": { + "type": "string", + "description": "The Swarm ID of this volume. Because cluster volumes are Swarm\nobjects, they have an ID, unlike non-cluster volumes. This ID can\nbe used to refer to the Volume instead of the name.\n" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Spec": { + "$ref": "#/definitions/ClusterVolumeSpec" + }, + "Info": { + "type": "object", + "description": "Information about the global status of the volume.\n", + "properties": { + "CapacityBytes": { + "type": "integer", + "format": "int64", + "description": "The capacity of the volume in bytes. A value of 0 indicates that\nthe capacity is unknown.\n" + }, + "VolumeContext": { + "type": "object", + "description": "A map of strings to strings returned from the storage plugin when\nthe volume is created.\n", + "additionalProperties": { + "type": "string" + } + }, + "VolumeID": { + "type": "string", + "description": "The ID of the volume as returned by the CSI storage plugin. This\nis distinct from the volume's ID as provided by Docker. This ID\nis never used by the user when communicating with Docker to refer\nto this volume. If the ID is blank, then the Volume has not been\nsuccessfully created in the plugin yet.\n" + }, + "AccessibleTopology": { + "type": "array", + "description": "The topology this volume is actually accessible from.\n", + "items": { + "$ref": "#/definitions/Topology" + } + } + } + }, + "PublishStatus": { + "type": "array", + "description": "The status of the volume as it pertains to its publishing and use on\nspecific nodes\n", + "items": { + "type": "object", + "properties": { + "NodeID": { + "type": "string", + "description": "The ID of the Swarm node the volume is published on.\n" + }, + "State": { + "type": "string", + "description": "The published state of the volume.\n* `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.\n* `published` The volume is published successfully to the node.\n* `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.\n* `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.\n", + "enum": [ + "pending-publish", + "published", + "pending-node-unpublish", + "pending-controller-unpublish" + ] + }, + "PublishContext": { + "type": "object", + "description": "A map of strings to strings returned by the CSI controller\nplugin when a volume is published.\n", + "additionalProperties": { + "type": "string" + } + } + } + } + } + } + }, + "ClusterVolumeSpec": { + "type": "object", + "description": "Cluster-specific options used to create the volume.\n", + "properties": { + "Group": { + "type": "string", + "description": "Group defines the volume group of this volume. Volumes belonging to\nthe same group can be referred to by group name when creating\nServices. Referring to a volume by group instructs Swarm to treat\nvolumes in that group interchangeably for the purpose of scheduling.\nVolumes with an empty string for a group technically all belong to\nthe same, emptystring group.\n" + }, + "AccessMode": { + "type": "object", + "description": "Defines how the volume is used by tasks.\n", + "properties": { + "Scope": { + "type": "string", + "description": "The set of nodes this volume can be used on at one time.\n- `single` The volume may only be scheduled to one node at a time.\n- `multi` the volume may be scheduled to any supported number of nodes at a time.\n", + "default": "single", + "enum": [ + "single", + "multi" + ], + "x-nullable": false + }, + "Sharing": { + "type": "string", + "description": "The number and way that different tasks can use this volume\nat one time.\n- `none` The volume may only be used by one task at a time.\n- `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly\n- `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.\n- `all` The volume may have any number of readers and writers.\n", + "default": "none", + "enum": [ + "none", + "readonly", + "onewriter", + "all" + ], + "x-nullable": false + }, + "MountVolume": { + "type": "object", + "description": "Options for using this volume as a Mount-type volume.\n\n Either MountVolume or BlockVolume, but not both, must be\n present.\n properties:\n FsType:\n type: \"string\"\n description: |\n Specifies the filesystem type for the mount volume.\n Optional.\n MountFlags:\n type: \"array\"\n description: |\n Flags to pass when mounting the volume. Optional.\n items:\n type: \"string\"\nBlockVolume:\n type: \"object\"\n description: |\n Options for using this volume as a Block-type volume.\n Intentionally empty.\n" + }, + "Secrets": { + "type": "array", + "description": "Swarm Secrets that are passed to the CSI storage plugin when\noperating on this volume.\n", + "items": { + "type": "object", + "description": "One cluster volume secret entry. Defines a key-value pair that\nis passed to the plugin.\n", + "properties": { + "Key": { + "type": "string", + "description": "Key is the name of the key of the key-value pair passed to\nthe plugin.\n" + }, + "Secret": { + "type": "string", + "description": "Secret is the swarm Secret object from which to read data.\nThis can be a Secret name or ID. The Secret data is\nretrieved by swarm and used as the value of the key-value\npair passed to the plugin.\n" + } + } + } + }, + "AccessibilityRequirements": { + "type": "object", + "description": "Requirements for the accessible topology of the volume. These\nfields are optional. For an in-depth description of what these\nfields mean, see the CSI specification.\n", + "properties": { + "Requisite": { + "type": "array", + "description": "A list of required topologies, at least one of which the\nvolume must be accessible from.\n", + "items": { + "$ref": "#/definitions/Topology" + } + }, + "Preferred": { + "type": "array", + "description": "A list of topologies that the volume should attempt to be\nprovisioned in.\n", + "items": { + "$ref": "#/definitions/Topology" + } + } + } + }, + "CapacityRange": { + "type": "object", + "description": "The desired capacity that the volume should be created with. If\nempty, the plugin will decide the capacity.\n", + "properties": { + "RequiredBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must be at least this big. The value of 0\nindicates an unspecified minimum\n" + }, + "LimitBytes": { + "type": "integer", + "format": "int64", + "description": "The volume must not be bigger than this. The value of 0\nindicates an unspecified maximum.\n" + } + } + }, + "Availability": { + "type": "string", + "description": "The availability of the volume for use in tasks.\n- `active` The volume is fully available for scheduling on the cluster\n- `pause` No new workloads should use the volume, but existing workloads are not stopped.\n- `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.\n", + "default": "active", + "x-nullable": false, + "enum": [ + "active", + "pause", + "drain" + ] + } + } + } + } + }, + "Topology": { + "description": "A map of topological domains to topological segments. For in depth\ndetails, see documentation for the Topology object in the CSI\nspecification.\n", + "type": "object", + "properties": { + "Segments": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "AttestationStatement": { + "x-go-name": "AttestationStatement", + "description": "AttestationStatement is a single in-toto statement attached to an image.\n", + "type": "object", + "required": [ + "Descriptor", + "PredicateType" + ], + "properties": { + "Descriptor": { + "$ref": "#/definitions/OCIDescriptor" + }, + "PredicateType": { + "description": "The in-toto predicate type URI of this statement.", + "type": "string", + "example": "https://slsa.dev/provenance/v0.2" + }, + "Statement": { + "description": "The verbatim in-toto statement JSON. Only included when the caller\nopts in via the `statement=true` query parameter; otherwise absent.\n", + "type": "object", + "x-nullable": true + } + } + }, + "ImageManifestSummary": { + "x-go-name": "ManifestSummary", + "description": "ImageManifestSummary represents a summary of an image manifest.\n", + "type": "object", + "required": [ + "ID", + "Descriptor", + "Available", + "Size", + "Kind" + ], + "properties": { + "ID": { + "description": "ID is the content-addressable ID of an image and is the same as the\ndigest of the image manifest.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + }, + "Descriptor": { + "$ref": "#/definitions/OCIDescriptor" + }, + "Available": { + "description": "Indicates whether all the child content (image config, layers) is fully available locally.", + "type": "boolean", + "example": true + }, + "Size": { + "type": "object", + "x-nullable": false, + "required": [ + "Content", + "Total" + ], + "properties": { + "Total": { + "type": "integer", + "format": "int64", + "example": 8213251, + "description": "Total is the total size (in bytes) of all the locally present\ndata (both distributable and non-distributable) that's related to\nthis manifest and its children.\nThis equal to the sum of [Content] size AND all the sizes in the\n[Size] struct present in the Kind-specific data struct.\nFor example, for an image kind (Kind == \"image\")\nthis would include the size of the image content and unpacked\nimage snapshots ([Size.Content] + [ImageData.Size.Unpacked]).\n" + }, + "Content": { + "description": "Content is the size (in bytes) of all the locally present\ncontent in the content store (e.g. image config, layers)\nreferenced by this manifest and its children.\nThis only includes blobs in the content store.\n", + "type": "integer", + "format": "int64", + "example": 3987495 + } + } + }, + "Kind": { + "type": "string", + "example": "image", + "enum": [ + "image", + "attestation", + "unknown" + ], + "description": "The kind of the manifest.\n\nkind | description\n-------------|-----------------------------------------------------------\nimage | Image manifest that can be used to start a container.\nattestation | Attestation manifest produced by the Buildkit builder for a specific image manifest.\n" + }, + "ImageData": { + "description": "The image data for the image manifest.\nThis field is only populated when Kind is \"image\".\n", + "type": "object", + "x-nullable": true, + "x-omitempty": true, + "required": [ + "Platform", + "Containers", + "Size", + "UnpackedSize" + ], + "properties": { + "Platform": { + "$ref": "#/definitions/OCIPlatform", + "description": "OCI platform of the image. This will be the platform specified in the\nmanifest descriptor from the index/manifest list.\nIf it's not available, it will be obtained from the image config.\n" + }, + "Identity": { + "description": "Identity holds information about the identity and origin of this image.\nFor image list responses, this can duplicate Build/Pull fields across\nimage manifests, because those parts are image-level metadata.\n", + "x-nullable": true, + "$ref": "#/definitions/Identity" + }, + "Containers": { + "description": "The IDs of the containers that are using this image.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430", + "abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e" + ] + }, + "Size": { + "type": "object", + "x-nullable": false, + "required": [ + "Unpacked" + ], + "properties": { + "Unpacked": { + "type": "integer", + "format": "int64", + "example": 3987495, + "description": "Unpacked is the size (in bytes) of the locally unpacked\n(uncompressed) image content that's directly usable by the containers\nrunning this image.\nIt's independent of the distributable content - e.g.\nthe image might still have an unpacked data that's still used by\nsome container even when the distributable/compressed content is\nalready gone.\n" + } + } + } + } + }, + "AttestationData": { + "description": "The image data for the attestation manifest.\nThis field is only populated when Kind is \"attestation\".\n", + "type": "object", + "x-nullable": true, + "x-omitempty": true, + "required": [ + "For" + ], + "properties": { + "For": { + "description": "The digest of the image manifest that this attestation is for.\n", + "type": "string", + "example": "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + } + } + } + } + } + }, + "id": "engine-1.56-1060b9fc6554", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/definitions", + "destinationPointer": null + }, + { + "pointer": "/openapi", + "beforePresent": false, + "afterPresent": true, + "after": "3.0.0", + "id": "engine-1.56-5f9acaab2187", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/openapi" + }, + { + "pointer": "/paths/~1_ping/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "text/plain" + ], + "id": "engine-1.56-f31122b2cf9f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "type": "string", + "example": "OK" + } + } + }, + "id": "engine-1.56-1a30d150947d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/content" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Api-Version/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string" + }, + "id": "engine-1.56-7ac5e4333446", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Api-Version/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Api-Version/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-bf8f6e0ba933", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Api-Version/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/default", + "beforePresent": true, + "afterPresent": false, + "before": "2", + "id": "engine-1.56-25ba7eea3ec2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "2" + }, + "id": "engine-1.56-2d5395b3e110", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-909402e6ca62", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Builder-Version/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache, no-store, must-revalidate", + "id": "engine-1.56-580f6c3b70de", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + }, + "id": "engine-1.56-74e098076d17", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-3526b3c3e395", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Cache-Control/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Docker-Experimental/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "boolean" + }, + "id": "engine-1.56-e088a454f0a9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Docker-Experimental/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Docker-Experimental/type", + "beforePresent": true, + "afterPresent": false, + "before": "boolean", + "id": "engine-1.56-a9542ebe2159", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Docker-Experimental/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Pragma/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache", + "id": "engine-1.56-98e775d9b6eb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Pragma/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Pragma/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache" + }, + "id": "engine-1.56-7a48b741e440", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Pragma/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Pragma/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-d0f984ee5636", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Pragma/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Swarm/default", + "beforePresent": true, + "afterPresent": false, + "before": "inactive", + "id": "engine-1.56-a986a7632431", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Swarm/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Swarm/enum", + "beforePresent": true, + "afterPresent": false, + "before": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "id": "engine-1.56-9546c5c45abb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Swarm/enum", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Swarm/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "default": "inactive" + }, + "id": "engine-1.56-a092e3fef07e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/200/headers/Swarm/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/200/headers/Swarm/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-0191efbb927b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/headers/Swarm/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "example": "OK" + }, + "id": "engine-1.56-481d5c48e660", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-5f0c193d133e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/500/content" + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache, no-store, must-revalidate", + "id": "engine-1.56-6d16439fbbf6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + }, + "id": "engine-1.56-718b8185432c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-1fb0244d6d3c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/headers/Cache-Control/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Pragma/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache", + "id": "engine-1.56-d19937f61dea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/headers/Pragma/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Pragma/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache" + }, + "id": "engine-1.56-102ae75c76c4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/500/headers/Pragma/schema" + }, + { + "pointer": "/paths/~1_ping/get/responses/500/headers/Pragma/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-ba4c69a764c2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/headers/Pragma/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-103691545254", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "text/plain" + ], + "id": "engine-1.56-fcd8b947f5ce", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "type": "string", + "example": "(empty)" + } + } + }, + "id": "engine-1.56-6d1ab4e9bc68", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/content" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Api-Version/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string" + }, + "id": "engine-1.56-a4dd14813321", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Api-Version/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Api-Version/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-bdcc657b6547", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Api-Version/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Builder-Version/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string" + }, + "id": "engine-1.56-16e8d96ae87e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Builder-Version/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Builder-Version/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-a4b514019501", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Builder-Version/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache, no-store, must-revalidate", + "id": "engine-1.56-e321b9ae088a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache, no-store, must-revalidate" + }, + "id": "engine-1.56-22e29fdefd63", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-8957f74730d1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Cache-Control/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Docker-Experimental/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "boolean" + }, + "id": "engine-1.56-977288089a12", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Docker-Experimental/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Docker-Experimental/type", + "beforePresent": true, + "afterPresent": false, + "before": "boolean", + "id": "engine-1.56-7a2b59bd39ab", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Docker-Experimental/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Pragma/default", + "beforePresent": true, + "afterPresent": false, + "before": "no-cache", + "id": "engine-1.56-b6f58b3a24e4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Pragma/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Pragma/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "default": "no-cache" + }, + "id": "engine-1.56-571675e75848", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Pragma/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Pragma/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-9e2d9fa75839", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Pragma/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Swarm/default", + "beforePresent": true, + "afterPresent": false, + "before": "inactive", + "id": "engine-1.56-c707e9387542", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Swarm/default", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Swarm/enum", + "beforePresent": true, + "afterPresent": false, + "before": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "id": "engine-1.56-abc4184ee49f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Swarm/enum", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Swarm/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string", + "enum": [ + "inactive", + "pending", + "error", + "locked", + "active/worker", + "active/manager" + ], + "default": "inactive" + }, + "id": "engine-1.56-e1c6f35e3770", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/200/headers/Swarm/schema" + }, + { + "pointer": "/paths/~1_ping/head/responses/200/headers/Swarm/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-b7848e626725", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/headers/Swarm/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "example": "(empty)" + }, + "id": "engine-1.56-005181f4da03", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6857a5b79c6f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/500/content" + }, + { + "pointer": "/paths/~1_ping/head/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b8733a1ab3c6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-b6a33746d6ff", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "authConfig", + "in": "body", + "description": "Authentication to check", + "schema": { + "$ref": "#/definitions/AuthConfig" + } + } + ], + "id": "engine-1.56-eab3be3e6227", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-f140acd26b37", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthConfig" + } + } + }, + "description": "Authentication to check" + }, + "id": "engine-1.56-656855b431a9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1auth/post/requestBody" + }, + { + "pointer": "/paths/~1auth/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + } + } + }, + "id": "engine-1.56-9b42c999a759", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1auth/post/responses/200/content" + }, + { + "pointer": "/paths/~1auth/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/AuthResponse" + }, + "id": "engine-1.56-57140246acc1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/responses/401/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c135305004bf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1auth/post/responses/401/content" + }, + { + "pointer": "/paths/~1auth/post/responses/401/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c9f66bba7827", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/responses/401/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1auth/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-012622409cb2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1auth/post/responses/500/content" + }, + { + "pointer": "/paths/~1auth/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-cb54eebfc927", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1auth/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/octet-stream" + ], + "id": "engine-1.56-a3b89ad66865", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "inputStream", + "in": "body", + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.", + "schema": { + "type": "string", + "format": "binary" + } + }, + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "type": "string", + "default": "Dockerfile" + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "type": "string" + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "type": "string" + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "type": "string" + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "type": "boolean", + "default": false + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "type": "boolean", + "default": false + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "type": "string" + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "type": "string" + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "type": "boolean", + "default": true + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "type": "boolean", + "default": false + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "type": "integer", + "format": "int64" + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "type": "integer", + "format": "int64" + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "type": "integer", + "format": "int64" + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "type": "string" + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "type": "integer", + "format": "int64" + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "type": "integer", + "format": "int64" + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "type": "string" + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "type": "integer", + "format": "int64" + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "type": "boolean" + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "type": "string" + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported\nstandard values are: `bridge`, `host`, `none`, and `container:`.\nAny other value is taken as a custom network's name or ID to which this\ncontainer should connect to.\n", + "type": "string" + }, + { + "name": "Content-type", + "in": "header", + "type": "string", + "enum": [ + "application/x-tar" + ], + "default": "application/x-tar" + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "type": "string" + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "type": "string", + "default": "" + }, + { + "name": "target", + "in": "query", + "description": "Target build stage", + "type": "string", + "default": "" + }, + { + "name": "outputs", + "in": "query", + "description": "BuildKit output configuration in the format of a stringified JSON array of objects.\nEach object must have two top-level properties: `Type` and `Attrs`.\nThe `Type` property must be set to 'moby'.\nThe `Attrs` property is a map of attributes for the BuildKit output configuration.\nSee https://docs.docker.com/build/exporters/oci-docker/ for more information.\n\nExample:\n\n```\n[{\"Type\":\"moby\",\"Attrs\":{\"type\":\"image\",\"force-compression\":\"true\",\"compression\":\"zstd\"}}]\n```\n", + "type": "string", + "default": "" + }, + { + "name": "version", + "in": "query", + "type": "string", + "default": "1", + "enum": [ + "1", + "2" + ], + "description": "Version of the builder backend to use.\n\n- `1` is the first generation classic (deprecated) builder in the Docker daemon (default)\n- `2` is [BuildKit](https://github.com/moby/buildkit)\n" + } + ], + "after": [ + { + "name": "dockerfile", + "in": "query", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "schema": { + "type": "string", + "default": "Dockerfile" + } + }, + { + "name": "t", + "in": "query", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "schema": { + "type": "string" + } + }, + { + "name": "extrahosts", + "in": "query", + "description": "Extra hosts to add to /etc/hosts", + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "schema": { + "type": "string" + } + }, + { + "name": "q", + "in": "query", + "description": "Suppress verbose build output.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "nocache", + "in": "query", + "description": "Do not use the cache when building the image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "cachefrom", + "in": "query", + "description": "JSON array of images used for build cache resolution.", + "schema": { + "type": "string" + } + }, + { + "name": "pull", + "in": "query", + "description": "Attempt to pull the image even if an older image exists locally.", + "schema": { + "type": "string" + } + }, + { + "name": "rm", + "in": "query", + "description": "Remove intermediate containers after a successful build.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "forcerm", + "in": "query", + "description": "Always remove intermediate containers, even upon failure.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "memory", + "in": "query", + "description": "Set memory limit for build.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "memswap", + "in": "query", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpushares", + "in": "query", + "description": "CPU shares (relative weight).", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpusetcpus", + "in": "query", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "schema": { + "type": "string" + } + }, + { + "name": "cpuperiod", + "in": "query", + "description": "The length of a CPU period in microseconds.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cpuquota", + "in": "query", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "buildargs", + "in": "query", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "schema": { + "type": "string" + } + }, + { + "name": "shmsize", + "in": "query", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "squash", + "in": "query", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "schema": { + "type": "boolean" + } + }, + { + "name": "labels", + "in": "query", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "schema": { + "type": "string" + } + }, + { + "name": "networkmode", + "in": "query", + "description": "Sets the networking mode for the run commands during build. Supported\nstandard values are: `bridge`, `host`, `none`, and `container:`.\nAny other value is taken as a custom network's name or ID to which this\ncontainer should connect to.\n", + "schema": { + "type": "string" + } + }, + { + "name": "Content-type", + "in": "header", + "schema": { + "type": "string", + "enum": [ + "application/x-tar" + ], + "default": "application/x-tar" + } + }, + { + "name": "X-Registry-Config", + "in": "header", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]]", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "target", + "in": "query", + "description": "Target build stage", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "outputs", + "in": "query", + "description": "BuildKit output configuration in the format of a stringified JSON array of objects.\nEach object must have two top-level properties: `Type` and `Attrs`.\nThe `Type` property must be set to 'moby'.\nThe `Attrs` property is a map of attributes for the BuildKit output configuration.\nSee https://docs.docker.com/build/exporters/oci-docker/ for more information.\n\nExample:\n\n```\n[{\"Type\":\"moby\",\"Attrs\":{\"type\":\"image\",\"force-compression\":\"true\",\"compression\":\"zstd\"}}]\n```\n", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "version", + "in": "query", + "description": "Version of the builder backend to use.\n\n- `1` is the first generation classic (deprecated) builder in the Docker daemon (default)\n- `2` is [BuildKit](https://github.com/moby/buildkit)\n", + "schema": { + "type": "string", + "enum": [ + "1", + "2" + ], + "default": "1" + } + } + ], + "id": "engine-1.56-8d0f4837cc1e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build/post/parameters", + "destinationPointer": "/paths/~1build/post/parameters" + }, + { + "pointer": "/paths/~1build/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-87660097dcf5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." + }, + "id": "engine-1.56-a913ed345773", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build/post/requestBody" + }, + { + "pointer": "/paths/~1build/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-71d1c6ee210d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build/post/responses/400/content" + }, + { + "pointer": "/paths/~1build/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-172e19680d07", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b8b8579b2d28", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build/post/responses/500/content" + }, + { + "pointer": "/paths/~1build/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8cf3e8390c26", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build~1prune/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "reserved-space", + "in": "query", + "description": "Amount of disk space in bytes to keep for cache", + "type": "integer", + "format": "int64" + }, + { + "name": "max-used-space", + "in": "query", + "description": "Maximum amount of disk space allowed to keep for cache", + "type": "integer", + "format": "int64" + }, + { + "name": "min-free-space", + "in": "query", + "description": "Target amount of free disk space after pruning", + "type": "integer", + "format": "int64" + }, + { + "name": "all", + "in": "query", + "type": "boolean", + "description": "Remove all types of build cache" + }, + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the list of build cache objects.\n\nAvailable filters:\n\n- `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time.\n- `id=`\n- `parent=`\n- `type=`\n- `description=`\n- `inuse`\n- `shared`\n- `private`\n" + } + ], + "after": [ + { + "name": "reserved-space", + "in": "query", + "description": "Amount of disk space in bytes to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "max-used-space", + "in": "query", + "description": "Maximum amount of disk space allowed to keep for cache", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "min-free-space", + "in": "query", + "description": "Target amount of free disk space after pruning", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "all", + "in": "query", + "description": "Remove all types of build cache", + "schema": { + "type": "boolean" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the list of build cache objects.\n\nAvailable filters:\n\n- `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time.\n- `id=`\n- `parent=`\n- `type=`\n- `description=`\n- `inuse`\n- `shared`\n- `private`\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-cdb4e11b71fd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build~1prune/post/parameters", + "destinationPointer": "/paths/~1build~1prune/post/parameters" + }, + { + "pointer": "/paths/~1build~1prune/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-f5131f271115", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build~1prune/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build~1prune/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "BuildPruneResponse", + "properties": { + "CachesDeleted": { + "type": "array", + "items": { + "description": "ID of build cache object", + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "id": "engine-1.56-2369be3328ea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build~1prune/post/responses/200/content" + }, + { + "pointer": "/paths/~1build~1prune/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "BuildPruneResponse", + "properties": { + "CachesDeleted": { + "type": "array", + "items": { + "description": "ID of build cache object", + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "id": "engine-1.56-c925f1195bfc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build~1prune/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1build~1prune/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-d5181ac21f64", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build~1prune/post/responses/500/content" + }, + { + "pointer": "/paths/~1build~1prune/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c2cd57cbb52f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1build~1prune/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-021898a2ebb2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "containerConfig", + "in": "body", + "description": "The container configuration", + "schema": { + "$ref": "#/definitions/ContainerConfig" + } + }, + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "type": "string" + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "type": "string" + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "type": "string" + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "type": "string" + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "type": "string" + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "type": "boolean", + "default": true + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "type": "string" + } + ], + "after": [ + { + "name": "container", + "in": "query", + "description": "The ID or name of the container to commit", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name for the created image", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag name for the create image", + "schema": { + "type": "string" + } + }, + { + "name": "comment", + "in": "query", + "description": "Commit message", + "schema": { + "type": "string" + } + }, + { + "name": "author", + "in": "query", + "description": "Author of the image (e.g., `John Hannibal Smith `)", + "schema": { + "type": "string" + } + }, + { + "name": "pause", + "in": "query", + "description": "Whether to pause the container before committing", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "changes", + "in": "query", + "description": "`Dockerfile` instructions to apply while committing", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-97e59df04e5f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/parameters", + "destinationPointer": "/paths/~1commit/post/parameters" + }, + { + "pointer": "/paths/~1commit/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-bf1fcf392565", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerConfig" + } + } + }, + "description": "The container configuration" + }, + "id": "engine-1.56-689654975442", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1commit/post/requestBody" + }, + { + "pointer": "/paths/~1commit/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + }, + "id": "engine-1.56-768841b9e9ac", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1commit/post/responses/201/content" + }, + { + "pointer": "/paths/~1commit/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/IDResponse" + }, + "id": "engine-1.56-5eb9b0c6e0a3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-b804a45cfbb8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1commit/post/responses/404/content" + }, + { + "pointer": "/paths/~1commit/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-93364e7c3eff", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b7542df732aa", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1commit/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-8ba822837175", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1commit/post/responses/500/content" + }, + { + "pointer": "/paths/~1commit/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-809f3a7cda6a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1commit/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the configs list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a config name (prefix match)\n" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the configs list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a config name (prefix match)\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-b94eb4fa702f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs/get/parameters", + "destinationPointer": "/paths/~1configs/get/parameters" + }, + { + "pointer": "/paths/~1configs/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-c10899aad5fc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Config" + }, + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ] + } + } + }, + "id": "engine-1.56-349aef23e0cc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs/get/responses/200/content" + }, + { + "pointer": "/paths/~1configs/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Config" + }, + "example": [ + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "server.conf" + } + } + ] + }, + "id": "engine-1.56-688fa9670304", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-37702dec2f53", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs/get/responses/500/content" + }, + { + "pointer": "/paths/~1configs/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d620b8dfdb43", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-e5c77fefecca", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs/get/responses/503/content" + }, + { + "pointer": "/paths/~1configs/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-058798bfa6e4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-5668db1df462", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "body", + "in": "body", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + ], + "id": "engine-1.56-060b7a99fbd7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-e506382c6ac2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigSpec" + }, + { + "type": "object", + "example": { + "Name": "server.conf", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + } + } + ] + } + } + } + }, + "id": "engine-1.56-6824452d2c5a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/requestBody" + }, + { + "pointer": "/paths/~1configs~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + }, + "id": "engine-1.56-03116bede822", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1configs~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/IDResponse" + }, + "id": "engine-1.56-ead6122e1909", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-5c7009162561", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/responses/409/content" + }, + { + "pointer": "/paths/~1configs~1create/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5f2b2e52d84c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-3f5029702431", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1configs~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-6ad300d77907", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1create/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-124f127ab2b2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/responses/503/content" + }, + { + "pointer": "/paths/~1configs~1create/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-20763a58524d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1create/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "ID of the config" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the config", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-d46225f031ed", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/delete/parameters", + "destinationPointer": "/paths/~1configs~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1configs~1{id}/delete/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-dda88aa1e695", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/delete/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-efd752735dee", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-7f33e40bb781", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-47f90e9b7e73", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-111a7e9b3a13", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-1fb2da9a520a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/delete/responses/503/content" + }, + { + "pointer": "/paths/~1configs~1{id}/delete/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-1c768a717042", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/delete/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "ID of the config" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the config", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-cb8712014504", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/parameters", + "destinationPointer": "/paths/~1configs~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1configs~1{id}/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-0129ec0c5968", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Config" + }, + "examples": { + "response": { + "value": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + } + } + } + }, + "id": "engine-1.56-e733944cfc5c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt" + } + } + }, + "id": "engine-1.56-ca19bb1e7f44", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Config" + }, + "id": "engine-1.56-8bc62def6af6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-39d313791213", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-2c3f9ce5070e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-f30fc0f5360b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-928f98b6706a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-0b7ccdde7e55", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/get/responses/503/content" + }, + { + "pointer": "/paths/~1configs~1{id}/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b3374aa6912e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "type": "string", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/ConfigSpec" + }, + "description": "The spec of the config to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[ConfigInspect endpoint](#operation/ConfigInspect) response values.\n" + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is\nrequired to avoid conflicting writes.\n", + "type": "integer", + "format": "int64", + "required": true + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the config", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the config object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "id": "engine-1.56-190f6d9c7f27", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/parameters", + "destinationPointer": "/paths/~1configs~1{id}~1update/post/parameters" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConfigSpec" + } + } + }, + "description": "The spec of the config to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[ConfigInspect endpoint](#operation/ConfigInspect) response values.\n" + }, + "id": "engine-1.56-a681c228a234", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/requestBody" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-02fe8450e4fa", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/responses/400/content" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-266cf7fa4c06", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-3b2bf733a2b1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/responses/404/content" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-ffc1c65d1854", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-638532098b9e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-bcae9cb96bea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-2155516dfd28", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/responses/503/content" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-7d9a6dba6c5c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json", + "application/octet-stream" + ], + "id": "engine-1.56-f1f292cc82f1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match\n`/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n", + "type": "string", + "pattern": "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$" + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format `os[/arch[/variant]]` used for image lookup.\n\nWhen specified, the daemon checks if the requested image is present\nin the local image cache with the given OS and Architecture, and\notherwise returns a `404` status.\n\nIf the option is not set, the host's native OS and Architecture are\nused to look up the image in the image cache. However, if no platform\nis passed and the given image does exist in the local image cache,\nbut its OS or architecture does not match, the container is created\nwith the available image, and a warning is added to the `Warnings`\nfield in the response, for example;\n\n WARNING: The requested image's platform (linux/arm64/v8) does not\n match the detected host platform (linux/amd64) and no\n specific platform was requested\n", + "type": "string", + "default": "" + }, + { + "name": "body", + "in": "body", + "description": "Container to create", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/definitions/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/definitions/NetworkingConfig" + } + } + } + ], + "example": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + }, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "HostConfig": { + "Binds": [ + "/tmp:/tmp" + ], + "Links": [ + "redis3:redis" + ], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "NanoCpus": 500000, + "CpuPercent": 80, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuQuota": 50000, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "MemorySwappiness": 60, + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": 0, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "VolumesFrom": [ + "parent", + "other:ro" + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "GroupAdd": [ + "newgroup" + ], + "RestartPolicy": { + "Name": "", + "MaximumRetryCount": 0 + }, + "AutoRemove": true, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [ + {} + ], + "LogConfig": { + "Type": "json-file", + "Config": {} + }, + "SecurityOpt": [], + "StorageOpt": {}, + "CgroupParent": "", + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + } + }, + "required": true + } + ], + "after": [ + { + "name": "name", + "in": "query", + "description": "Assign the specified name to the container. Must match\n`/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n", + "schema": { + "type": "string", + "pattern": "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format `os[/arch[/variant]]` used for image lookup.\n\nWhen specified, the daemon checks if the requested image is present\nin the local image cache with the given OS and Architecture, and\notherwise returns a `404` status.\n\nIf the option is not set, the host's native OS and Architecture are\nused to look up the image in the image cache. However, if no platform\nis passed and the given image does exist in the local image cache,\nbut its OS or architecture does not match, the container is created\nwith the available image, and a warning is added to the `Warnings`\nfield in the response, for example;\n\n WARNING: The requested image's platform (linux/arm64/v8) does not\n match the detected host platform (linux/amd64) and no\n specific platform was requested\n", + "schema": { + "type": "string", + "default": "" + } + } + ], + "id": "engine-1.56-c4b02c160608", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/parameters", + "destinationPointer": "/paths/~1containers~1create/post/parameters" + }, + { + "pointer": "/paths/~1containers~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-5115ac42e7c7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ], + "example": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + }, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "HostConfig": { + "Binds": [ + "/tmp:/tmp" + ], + "Links": [ + "redis3:redis" + ], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "NanoCpus": 500000, + "CpuPercent": 80, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuQuota": 50000, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "MemorySwappiness": 60, + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": 0, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "VolumesFrom": [ + "parent", + "other:ro" + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "GroupAdd": [ + "newgroup" + ], + "RestartPolicy": { + "Name": "", + "MaximumRetryCount": 0 + }, + "AutoRemove": true, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [ + {} + ], + "LogConfig": { + "Type": "json-file", + "Config": {} + }, + "SecurityOpt": [], + "StorageOpt": {}, + "CgroupParent": "", + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + } + } + }, + "application/octet-stream": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerConfig" + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/components/schemas/HostConfig" + }, + "NetworkingConfig": { + "$ref": "#/components/schemas/NetworkingConfig" + } + } + } + ], + "example": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + }, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "HostConfig": { + "Binds": [ + "/tmp:/tmp" + ], + "Links": [ + "redis3:redis" + ], + "Memory": 0, + "MemorySwap": 0, + "MemoryReservation": 0, + "NanoCpus": 500000, + "CpuPercent": 80, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuQuota": 50000, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "MaximumIOps": 0, + "MaximumIOBps": 0, + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "DeviceRequests": [ + { + "Driver": "nvidia", + "Count": -1, + "DeviceIDs\"": [ + "0", + "1", + "GPU-fef8089b-4820-abfc-e83e-94318197576e" + ], + "Capabilities": [ + [ + "gpu", + "nvidia", + "compute" + ] + ], + "Options": { + "property1": "string", + "property2": "string" + } + } + ], + "MemorySwappiness": 60, + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": 0, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "VolumesFrom": [ + "parent", + "other:ro" + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "GroupAdd": [ + "newgroup" + ], + "RestartPolicy": { + "Name": "", + "MaximumRetryCount": 0 + }, + "AutoRemove": true, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [ + {} + ], + "LogConfig": { + "Type": "json-file", + "Config": {} + }, + "SecurityOpt": [], + "StorageOpt": {}, + "CgroupParent": "", + "VolumeDriver": "", + "ShmSize": 67108864 + }, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ], + "Aliases": [ + "server_x", + "server_y" + ] + }, + "database_nw": {} + } + } + } + } + } + }, + "description": "Container to create", + "required": true + }, + "id": "engine-1.56-60b2911dee5c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/requestBody" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerCreateResponse" + } + } + }, + "id": "engine-1.56-fbfc2de8d0e5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerCreateResponse" + }, + "id": "engine-1.56-41195d80a631", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c08d35b4e9b2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5ddb068e7915", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-92aaaf72d8f9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such image: c2ada9df5af8" + } + }, + "id": "engine-1.56-9e0e0955bfb7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-6458527d284b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b639cb840b13", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/responses/409/content" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b55afdb81a50", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-36b28f480f0d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-cae14ac55eba", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown.\n", + "type": "boolean", + "default": false + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "type": "integer" + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "type": "boolean", + "default": false + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `annotation=key` or `annotation=\"key=value\"` of a container annotation\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "type": "string" + } + ], + "after": [ + { + "name": "all", + "in": "query", + "description": "Return all containers. By default, only running containers are shown.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "limit", + "in": "query", + "description": "Return this number of most recently created containers, including\nnon-running ones.\n", + "schema": { + "type": "integer" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "Filters to process on the container list, encoded as JSON (a\n`map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\nonly return paused containers.\n\nAvailable filters:\n\n- `ancestor`=(`[:]`, ``, or ``)\n- `annotation=key` or `annotation=\"key=value\"` of a container annotation\n- `before`=(`` or ``)\n- `expose`=(`[/]`|`/[]`)\n- `exited=` containers with exit code of ``\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=` a container's name\n- `network`=(`` or ``)\n- `publish`=(`[/]`|`/[]`)\n- `since`=(`` or ``)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`` or ``)\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-f644c99f342a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1json/get/parameters", + "destinationPointer": "/paths/~1containers~1json/get/parameters" + }, + { + "pointer": "/paths/~1containers~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-54e59c9541cc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerSummary" + } + } + } + }, + "id": "engine-1.56-c3fe6747e2ce", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/ContainerSummary" + } + }, + "id": "engine-1.56-644f10f341f5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1json/get/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-e5d0356eb1b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1json/get/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1json/get/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-f61c5042acb2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1json/get/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-3256cd3c12e6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-f371a69ed2fb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1prune/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-4f2866326eb2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1prune/post/parameters", + "destinationPointer": "/paths/~1containers~1prune/post/parameters" + }, + { + "pointer": "/paths/~1containers~1prune/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-22f190b22176", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1prune/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1prune/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "ContainerPruneResponse", + "properties": { + "ContainersDeleted": { + "description": "Container IDs that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "id": "engine-1.56-1ce3ee2058c8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1prune/post/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1prune/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "ContainerPruneResponse", + "properties": { + "ContainersDeleted": { + "description": "Container IDs that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "id": "engine-1.56-822d1cde498c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1prune/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1prune/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-7b61c637114f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1prune/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1prune/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-7a40afed14de", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1prune/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "v", + "in": "query", + "description": "Remove anonymous volumes associated with the container.", + "type": "boolean", + "default": false + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "type": "boolean", + "default": false + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "v", + "in": "query", + "description": "Remove anonymous volumes associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "force", + "in": "query", + "description": "If the container is running, kill it before removing it.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "link", + "in": "query", + "description": "Remove the specified link associated with the container.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-f5fc1698546a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/parameters", + "destinationPointer": "/paths/~1containers~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-3c17caef07c6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}/delete/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-19231cc17628", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-88d75e00b47c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-fec3588e153d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-606eddfe5df1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the\ncontainer before attempting removal or force remove\n" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-0be98e5d7a45", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}/delete/responses/409/content" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/409/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the\ncontainer before attempting removal or force remove\n" + } + }, + "id": "engine-1.56-78a4bbe54b3c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/409/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-53b11f656bde", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c63e23df8c66", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-7dfeccf3b27b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-330356353a8b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar" + ], + "id": "engine-1.56-3b333302f892", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-33aefd66537b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-aca125daf808", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-cb57b87d710c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-fcd5fd079a63", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-0ba72ec22340", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6f02bcffef60", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-f1838ee5404e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Resource in the container’s filesystem to archive.", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-34b85fbf9297", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1archive/head/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/200/headers/X-Docker-Container-Path-Stat/schema", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "string" + }, + "id": "engine-1.56-578b420a1c10", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/head/responses/200/headers/X-Docker-Container-Path-Stat/schema" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/200/headers/X-Docker-Container-Path-Stat/type", + "beforePresent": true, + "afterPresent": false, + "before": "string", + "id": "engine-1.56-960b690d56dd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/200/headers/X-Docker-Container-Path-Stat/type", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b7181f07703d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d3a423fcd9ee", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-43e81e1269d2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-8e16e9bffb05", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-80088e873ba6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-dc733d5bdc37", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-37b1561da89a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar", + "application/octet-stream" + ], + "id": "engine-1.56-ec27734775ae", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "type": "string" + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If `1`, `true`, or `True` then it will be an error if unpacking the\ngiven content would cause an existing directory to be replaced with\na non-directory and vice versa.\n", + "type": "string" + }, + { + "name": "copyUIDGID", + "in": "query", + "description": "If `1`, `true`, then it will copy UID/GID maps to the dest file or\ndir\n", + "type": "string" + }, + { + "name": "inputStream", + "in": "body", + "required": true, + "description": "The input stream must be a tar archive compressed with one of the\nfollowing algorithms: `identity` (no compression), `gzip`, `bzip2`,\nor `xz`.\n", + "schema": { + "type": "string", + "format": "binary" + } + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "required": true, + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "schema": { + "type": "string" + } + }, + { + "name": "noOverwriteDirNonDir", + "in": "query", + "description": "If `1`, `true`, or `True` then it will be an error if unpacking the\ngiven content would cause an existing directory to be replaced with\na non-directory and vice versa.\n", + "schema": { + "type": "string" + } + }, + { + "name": "copyUIDGID", + "in": "query", + "description": "If `1`, `true`, then it will copy UID/GID maps to the dest file or\ndir\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-5e72f2d842ab", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "The input stream must be a tar archive compressed with one of the\nfollowing algorithms: `identity` (no compression), `gzip`, `bzip2`,\nor `xz`.\n", + "required": true + }, + "id": "engine-1.56-a152efa35a73", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/requestBody" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "not a directory" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b6ceed80eb13", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/400/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "not a directory" + } + }, + "id": "engine-1.56-d1fa605a7c33", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/400/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d153a954a289", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-925fe756f71b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/responses/403/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-61b331ca59f7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-ea04271aa3ed", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-6b968d00b395", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-0b65178d8ac2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-4882bbf7d268", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/put/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5e52011ced8c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,` or `_`.\n", + "type": "string" + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you\nwant to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been\nreturned, it will seamlessly transition into streaming current\noutput.\n", + "type": "boolean", + "default": false + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards.\n", + "type": "boolean", + "default": false + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "type": "boolean", + "default": false + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "type": "boolean", + "default": false + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you\nwant to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been\nreturned, it will seamlessly transition into streaming current\noutput.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream attached streams from the time the request was made onwards.\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-c9f0066a7d03", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream", + "application/vnd.docker.multiplexed-stream" + ], + "id": "engine-1.56-889a33817cf1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-67ca0955bea5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-25e45ddec94f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-bb6c8d31022a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-440d4207b6be", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-0f85e0d042d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-1a2793dc2eb0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-bb363019b7b5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,`, or `_`.\n", + "type": "string" + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "type": "boolean", + "default": false + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "type": "boolean", + "default": false + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "type": "boolean", + "default": false + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "type": "boolean", + "default": false + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container.Format is a single\ncharacter `[a-Z]` or `ctrl-` where `` is one of: `a-z`,\n`@`, `^`, `[`, `,`, or `_`.\n", + "schema": { + "type": "string" + } + }, + { + "name": "logs", + "in": "query", + "description": "Return logs", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stream", + "in": "query", + "description": "Return stream", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdin", + "in": "query", + "description": "Attach to `stdin`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Attach to `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Attach to `stderr`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-9d1559a12735", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1attach~1ws/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-5c4da09d2193", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-6c59e217d608", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-0532b57c95bf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-1e35b30ff2cc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c9ce1fefffc6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b2a3e92f3d5d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-de3fcc79f135", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-011782ef6fc0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1changes/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-d5e657601354", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilesystemChange" + } + }, + "examples": { + "response": { + "value": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + } + } + } + }, + "id": "engine-1.56-b899592ca978", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1changes/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + }, + "id": "engine-1.56-6f4828c6b2fe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/FilesystemChange" + } + }, + "id": "engine-1.56-2d852d79162c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-2f8aa6ea1716", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1changes/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-dec35553cde0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d09736cd9c89", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-f94de38a58f1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1changes/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1changes/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8e05f374a590", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1changes/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-b6efede1c20b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "execConfig", + "in": "body", + "description": "Exec configuration", + "schema": { + "type": "object", + "title": "ExecConfig", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "x-nullable": true, + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is\na single character `[a-Z]` or `ctrl-` where ``\nis one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n" + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside\nthe container. Format is one of: `user`, `user:group`, `uid`,\nor `uid:gid`.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container.\n" + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + }, + "required": true + }, + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "type": "string", + "required": true + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "ID or name of container", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-fbaa5df0c594", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-86c023d72d1a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecConfig", + "properties": { + "AttachStdin": { + "type": "boolean", + "description": "Attach to `stdin` of the exec command." + }, + "AttachStdout": { + "type": "boolean", + "description": "Attach to `stdout` of the exec command." + }, + "AttachStderr": { + "type": "boolean", + "description": "Attach to `stderr` of the exec command." + }, + "ConsoleSize": { + "type": [ + "array", + "null" + ], + "description": "Initial console size, as an `[height, width]` array.", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + }, + "DetachKeys": { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is\na single character `[a-Z]` or `ctrl-` where ``\nis one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n" + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY." + }, + "Env": { + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Cmd": { + "type": "array", + "description": "Command to run, as a string or array of strings.", + "items": { + "type": "string" + } + }, + "Privileged": { + "type": "boolean", + "description": "Runs the exec process with extended privileges.", + "default": false + }, + "User": { + "type": "string", + "description": "The user, and optionally, group to run the exec process inside\nthe container. Format is one of: `user`, `user:group`, `uid`,\nor `uid:gid`.\n" + }, + "WorkingDir": { + "type": "string", + "description": "The working directory for the exec process inside the container.\n" + } + }, + "example": { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "DetachKeys": "ctrl-p,ctrl-q", + "Tty": false, + "Cmd": [ + "date" + ], + "Env": [ + "FOO=bar", + "BAZ=quux" + ] + } + } + } + }, + "description": "Exec configuration", + "required": true + }, + "id": "engine-1.56-0676170cbb08", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/requestBody" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + }, + "id": "engine-1.56-4928d103aad4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/responses/201/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/IDResponse" + }, + "id": "engine-1.56-5f04ed674380", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-1c7a8f52bd89", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-ae3d05fb595c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-6acda6d38eb6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-61b0aaa0e0ac", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/responses/409/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-fa366925a2b5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-25e2894604a2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-0980eef6fe83", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-99094e09fe3a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1export/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/octet-stream" + ], + "id": "engine-1.56-24a15d82d23e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-a954bbc24403", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1export/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-0acbc0bcdf4c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-39f2b879026d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-93dedce1921d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1export/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c6c666aa8617", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "size", + "in": "query", + "type": "boolean", + "default": false, + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-8481f77717c5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1json/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-f78003dc9efc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerInspectResponse" + } + } + }, + "id": "engine-1.56-6f02409ae59a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerInspectResponse" + }, + "id": "engine-1.56-f6ef7030e7fe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-3dd2e778aa93", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1json/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-a98de3def29f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d43491833903", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-e061766b1597", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-7b450baec93f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "type": "string", + "default": "SIGKILL" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string", + "default": "SIGKILL" + } + } + ], + "id": "engine-1.56-17342e831531", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1kill/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-4540d5006a54", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1kill/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-34e3e1385c5c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-ab2da872c8f1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-44c3f9881e3d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1kill/post/responses/409/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/409/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + }, + "id": "engine-1.56-4083527ba79e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/409/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-774df4580eed", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b397e87b769a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1kill/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-fad706d8795c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "type": "boolean", + "default": false + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "type": "boolean", + "default": false + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "type": "boolean", + "default": false + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "type": "integer", + "default": 0 + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "type": "integer", + "default": 0 + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "type": "boolean", + "default": false + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "type": "string", + "default": "all" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "until", + "in": "query", + "description": "Only return logs before this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "id": "engine-1.56-4a1d36855066", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1logs/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream", + "application/vnd.docker.multiplexed-stream" + ], + "id": "engine-1.56-3f6609ff8263", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "id": "engine-1.56-d785c277a4e8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1logs/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "format": "binary" + }, + "id": "engine-1.56-5fc6a800628f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-b86632f3ac16", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1logs/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-6abf9da6c001", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-35b8fb2f1c85", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-e8a196595567", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-28a3472dd673", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-52f7663da4d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1pause/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-e1be2d686ffd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1pause/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-b8d75aa3d820", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-864ac589a42b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c86b59824d14", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1pause/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8ec44950f2af", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "name", + "in": "query", + "required": true, + "description": "New name for the container", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "required": true, + "description": "New name for the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-a493e0dbd1fb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1rename/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-1d9bc615597d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1rename/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-45aba7c190d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8320976f83d5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-a42971d21f18", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1rename/post/responses/409/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5e86ce2ab9d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-0cbcdc4578e6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1rename/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-7b5556ab9f07", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/octet-stream" + ], + "id": "engine-1.56-0fbe0b567a12", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "type": "integer" + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "type": "integer" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "id": "engine-1.56-bda31f69cc08", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1resize/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "text/plain" + ], + "id": "engine-1.56-0c329a540bc1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-8731a0279622", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1resize/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-a8f45dd8edc8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-624174097fdb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-828c71b3cfeb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-57962e07318e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "type": "string" + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "type": "integer" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "id": "engine-1.56-3f62c06632b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1restart/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-413d65e76cb4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1restart/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-a9bb60e5ef48", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-abbbb0d367cd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-69c5291e3b51", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1restart/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-368c72ac7aa0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a\nsingle character `[a-Z]` or `ctrl-` where `` is one\nof: `a-z`, `@`, `^`, `[`, `,` or `_`.\n", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "detachKeys", + "in": "query", + "description": "Override the key sequence for detaching a container. Format is a\nsingle character `[a-Z]` or `ctrl-` where `` is one\nof: `a-z`, `@`, `^`, `[`, `,` or `_`.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-cb773c96c9cc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1start/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-cb280e3b0e7c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1start/post/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-6729f98f303c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-56a7d9edf8b5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1start/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-5605ef2e9b10", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-65f40a76210b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-beac7a827bec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1start/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5198b3dad6b2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then\nit will disconnect.\n", + "type": "boolean", + "default": true + }, + { + "name": "one-shot", + "in": "query", + "description": "Only get a single stat instead of waiting for 2 cycles. Must be used\nwith `stream=false`.\n", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "stream", + "in": "query", + "description": "Stream the output. If false, the stats will be output once and then\nit will disconnect.\n", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "one-shot", + "in": "query", + "description": "Only get a single stat instead of waiting for 2 cycles. Must be used\nwith `stream=false`.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-c5f31bb3d7b7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1stats/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-7374d07fa8c6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerStatsResponse" + } + } + }, + "id": "engine-1.56-efe86f4c2d9a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stats/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerStatsResponse" + }, + "id": "engine-1.56-0117d62bf60c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-d29a18b97c2b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stats/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-89d02b8233ea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-db8ac0e42ec6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-257dcd1cab4b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stats/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1stats/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-09a11146e6bb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stats/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "type": "string" + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "type": "integer" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "signal", + "in": "query", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`).\n", + "schema": { + "type": "string" + } + }, + { + "name": "t", + "in": "query", + "description": "Number of seconds to wait before killing the container", + "schema": { + "type": "integer" + } + } + ], + "id": "engine-1.56-c16ab61f71f6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1stop/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-99401963c8c7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stop/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-2db798b84ddd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-9a9702097e1b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-0b2dd7e66168", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stop/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d103b436957d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "type": "string", + "default": "-ef" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "ps_args", + "in": "query", + "description": "The arguments to pass to `ps`. For example, `aux`", + "schema": { + "type": "string", + "default": "-ef" + } + } + ], + "id": "engine-1.56-00c1a9603fbb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1top/get/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerTopResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ContainerTopResponse" + } + } + }, + "id": "engine-1.56-d5f6a75205f7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1top/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerTopResponse" + }, + "id": "engine-1.56-4a3a1e3c7e43", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-f5df11e24249", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1top/get/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-7f462ce449e9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-3f5571d4fa90", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-7ccfc4bdd179", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1top/get/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-2afb664269a1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-9e7839856312", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1unpause/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-7fe25d261013", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-b5716f805227", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-9b56d727d07f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-998432c3ca84", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-f682bd8cc1b8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-7a80f3cccc2f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "update", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/definitions/RestartPolicy" + } + } + } + ], + "example": { + "BlkioWeight": 300, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuQuota": 50000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpusetCpus": "0,1", + "CpusetMems": "0", + "Memory": 314572800, + "MemorySwap": 514288000, + "MemoryReservation": 209715200, + "RestartPolicy": { + "MaximumRetryCount": 4, + "Name": "on-failure" + } + } + } + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-b73c868fb1f3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1update/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-d96b1e721872", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + } + } + } + ], + "example": { + "BlkioWeight": 300, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpuQuota": 50000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpusetCpus": "0,1", + "CpusetMems": "0", + "Memory": 314572800, + "MemorySwap": 514288000, + "MemoryReservation": 209715200, + "RestartPolicy": { + "MaximumRetryCount": 4, + "Name": "on-failure" + } + } + } + } + }, + "required": true + }, + "id": "engine-1.56-f63467fd47ba", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1update/post/requestBody" + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerUpdateResponse" + } + } + }, + "id": "engine-1.56-f86e0d280855", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1update/post/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerUpdateResponse" + }, + "id": "engine-1.56-e442fb7491cd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-156bea9f530e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1update/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-4c4b08a4a160", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b3eeee7721b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-145442bf1fe9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c8e9a327eeed", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "type": "string" + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition.\n\nDefaults to `not-running` if omitted or empty.\n", + "type": "string", + "enum": [ + "not-running", + "next-exit", + "removed" + ], + "default": "not-running" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the container", + "schema": { + "type": "string" + } + }, + { + "name": "condition", + "in": "query", + "description": "Wait until a container state reaches the given condition.\n\nDefaults to `not-running` if omitted or empty.\n", + "schema": { + "type": "string", + "enum": [ + "not-running", + "next-exit", + "removed" + ], + "default": "not-running" + } + } + ], + "id": "engine-1.56-4d65220dda16", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/parameters", + "destinationPointer": "/paths/~1containers~1{id}~1wait/post/parameters" + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-7dda09ca26ba", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerWaitResponse" + } + } + }, + "id": "engine-1.56-e22793a68e88", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1wait/post/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ContainerWaitResponse" + }, + "id": "engine-1.56-cb9775194eb5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-e40e3c9937ed", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1wait/post/responses/400/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-bf07b1abfc82", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-ed4f5312fdaf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1wait/post/responses/404/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + }, + "id": "engine-1.56-89c8696c3594", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-9a629f7a4fb0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-a69e38b97a49", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1wait/post/responses/500/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1wait/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-321e869294ec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1wait/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "type": "string", + "required": true + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-6483ccd908d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/parameters", + "destinationPointer": "/paths/~1distribution~1{name}~1json/get/parameters" + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-955a0b06b0bc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DistributionInspect" + } + } + }, + "id": "engine-1.56-d3ca92ad9dad", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1distribution~1{name}~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/DistributionInspect" + }, + "id": "engine-1.56-cfdbdca55cb8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/401/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: someimage (tag: latest)" + } + } + } + } + }, + "id": "engine-1.56-6ed09bd70b1f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1distribution~1{name}~1json/get/responses/401/content" + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/401/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such image: someimage (tag: latest)" + } + }, + "id": "engine-1.56-85cb5b25b560", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/responses/401/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/401/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-e3dc8b75b320", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/responses/401/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-890633823c3d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1distribution~1{name}~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1distribution~1{name}~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-71ecd61a9dad", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1distribution~1{name}~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "type": "string" + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "type": "string" + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "type": "string" + } + ], + "after": [ + { + "name": "since", + "in": "query", + "description": "Show events created since this timestamp then stream new events.", + "schema": { + "type": "string" + } + }, + { + "name": "until", + "in": "query", + "description": "Show events created until this timestamp then stop streaming.", + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=` config name or ID\n- `container=` container name or ID\n- `daemon=` daemon name or ID\n- `event=` event type\n- `image=` image name or ID\n- `label=` image or container label\n- `network=` network name or ID\n- `node=` node ID\n- `plugin`= plugin name or ID\n- `scope`= local or swarm\n- `secret=` secret name or ID\n- `service=` service name or ID\n- `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=` volume name\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-3d125c08e806", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/parameters", + "destinationPointer": "/paths/~1events/get/parameters" + }, + { + "pointer": "/paths/~1events/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/jsonl", + "application/x-ndjson", + "application/json-seq" + ], + "id": "engine-1.56-7b1d309e772a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/EventMessage" + } + } + }, + "id": "engine-1.56-280faeda8023", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1events/get/responses/200/content" + }, + { + "pointer": "/paths/~1events/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/EventMessage" + }, + "id": "engine-1.56-7c5846cfd490", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-3614dbfd5bf7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1events/get/responses/400/content" + }, + { + "pointer": "/paths/~1events/get/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-622fa7366226", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/jsonl": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/x-ndjson": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json-seq": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-d7f8de57aa3b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1events/get/responses/500/content" + }, + { + "pointer": "/paths/~1events/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-62ac743ae22f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-8074db9c1d82", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/parameters", + "destinationPointer": "/paths/~1exec~1{id}~1json/get/parameters" + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-059c95efc5c1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecInspectResponse", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/components/schemas/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "examples": { + "response": { + "value": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + } + } + } + }, + "id": "engine-1.56-34b0a96830dd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false, + "Pid": 42000 + } + }, + "id": "engine-1.56-0aa2f9059007", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "ExecInspectResponse", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "DetachKeys": { + "type": "string" + }, + "ID": { + "type": "string" + }, + "Running": { + "type": "boolean" + }, + "ExitCode": { + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/definitions/ProcessConfig" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "Pid": { + "type": "integer", + "description": "The system process ID for the exec process." + } + } + }, + "id": "engine-1.56-81843fd0d67f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-16599e0fa663", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1json/get/responses/404/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b0c4b8b6855f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-5af5ca649729", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8a95247f5d57", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "type": "string" + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "type": "integer" + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "type": "integer" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "h", + "in": "query", + "required": true, + "description": "Height of the TTY session in characters", + "schema": { + "type": "integer" + } + }, + { + "name": "w", + "in": "query", + "required": true, + "description": "Width of the TTY session in characters", + "schema": { + "type": "integer" + } + } + ], + "id": "engine-1.56-d708e19a3377", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/parameters", + "destinationPointer": "/paths/~1exec~1{id}~1resize/post/parameters" + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-4be53c0db121", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1resize/post/responses/400/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-4278bbba264b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-a685136e670d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1resize/post/responses/404/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8503da4d1c28", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-f32b17cacbe1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1resize/post/responses/500/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b0306a787282", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-4b51abcdaf49", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "execStartConfig", + "in": "body", + "schema": { + "type": "object", + "title": "ExecStartConfig", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command.", + "example": false + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY.", + "example": true + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.", + "x-nullable": true, + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + } + } + } + }, + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Exec instance ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-f8006de017fe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/parameters", + "destinationPointer": "/paths/~1exec~1{id}~1start/post/parameters" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream", + "application/vnd.docker.multiplexed-stream" + ], + "id": "engine-1.56-e044d8d697b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "ExecStartConfig", + "properties": { + "Detach": { + "type": "boolean", + "description": "Detach from the command.", + "example": false + }, + "Tty": { + "type": "boolean", + "description": "Allocate a pseudo-TTY.", + "example": true + }, + "ConsoleSize": { + "type": [ + "array", + "null" + ], + "description": "Initial console size, as an `[height, width]` array.", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + } + } + } + } + } + }, + "id": "engine-1.56-bfe155443f15", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1start/post/requestBody" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-4e713ebfbf4e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1start/post/responses/404/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-1a2e4f9adca1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-bb9daa66c222", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1start/post/responses/409/content" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c1bb21d3de7f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "text/plain", + "application/octet-stream" + ], + "id": "engine-1.56-a16ed0040f46", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1create/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. If the name includes a tag or digest, specific behavior applies:\n\n- If only `fromImage` includes a tag, that tag is used.\n- If both `fromImage` and `tag` are provided, `tag` takes precedence.\n- If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored.\n- If neither a tag nor digest is specified, all tags are pulled.\n", + "type": "string" + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "type": "string" + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "type": "string" + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "type": "string" + }, + { + "name": "message", + "in": "query", + "description": "Set commit message for imported image.", + "type": "string" + }, + { + "name": "inputImage", + "in": "body", + "description": "Image content if the value `-` has been specified in fromSrc query parameter", + "schema": { + "type": "string" + }, + "required": false + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string" + }, + { + "name": "changes", + "in": "query", + "description": "Apply `Dockerfile` instructions to the image that is created,\nfor example: `changes=ENV DEBUG=true`.\nNote that `ENV DEBUG=true` should be URI component encoded.\n\nSupported `Dockerfile` instructions:\n`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`\n", + "type": "array", + "items": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]].\n\nWhen used in combination with the `fromImage` option, the daemon checks\nif the given image is present in the local image cache with the given\nOS and Architecture, and otherwise attempts to pull the image. If the\noption is not set, the host's native OS and Architecture are used.\nIf the given image does not exist in the local image cache, the daemon\nattempts to pull the image with the host's native OS and Architecture.\nIf the given image does exists in the local image cache, but its OS or\narchitecture does not match, a warning is produced.\n\nWhen used with the `fromSrc` option to import an image from an archive,\nthis option sets the platform information for the imported image. If\nthe option is not set, the host's native OS and Architecture are used\nfor the imported image.\n", + "type": "string", + "default": "" + } + ], + "after": [ + { + "name": "fromImage", + "in": "query", + "description": "Name of the image to pull. If the name includes a tag or digest, specific behavior applies:\n\n- If only `fromImage` includes a tag, that tag is used.\n- If both `fromImage` and `tag` are provided, `tag` takes precedence.\n- If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored.\n- If neither a tag nor digest is specified, all tags are pulled.\n", + "schema": { + "type": "string" + } + }, + { + "name": "fromSrc", + "in": "query", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "schema": { + "type": "string" + } + }, + { + "name": "message", + "in": "query", + "description": "Set commit message for imported image.", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + }, + { + "name": "changes", + "in": "query", + "description": "Apply `Dockerfile` instructions to the image that is created,\nfor example: `changes=ENV DEBUG=true`.\nNote that `ENV DEBUG=true` should be URI component encoded.\n\nSupported `Dockerfile` instructions:\n`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform in the format os[/arch[/variant]].\n\nWhen used in combination with the `fromImage` option, the daemon checks\nif the given image is present in the local image cache with the given\nOS and Architecture, and otherwise attempts to pull the image. If the\noption is not set, the host's native OS and Architecture are used.\nIf the given image does not exist in the local image cache, the daemon\nattempts to pull the image with the host's native OS and Architecture.\nIf the given image does exists in the local image cache, but its OS or\narchitecture does not match, a warning is produced.\n\nWhen used with the `fromSrc` option to import an image from an archive,\nthis option sets the platform information for the imported image. If\nthe option is not set, the host's native OS and Architecture are used\nfor the imported image.\n", + "schema": { + "type": "string", + "default": "" + } + } + ], + "id": "engine-1.56-02d325ce8597", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1create/post/parameters", + "destinationPointer": "/paths/~1images~1create/post/parameters" + }, + { + "pointer": "/paths/~1images~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-b1012bb6775d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/octet-stream": { + "schema": { + "type": "string" + } + } + }, + "description": "Image content if the value `-` has been specified in fromSrc query parameter" + }, + "id": "engine-1.56-4b5586c67408", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1create/post/requestBody" + }, + { + "pointer": "/paths/~1images~1create/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-d17b646c42d9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1create/post/responses/404/content" + }, + { + "pointer": "/paths/~1images~1create/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-377aba9a40f9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1create/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-7dd7880d963e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1images~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-6e1266a91ac4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1get/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "type": "array", + "items": { + "type": "string" + } + }, + { + "name": "platform", + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to be saved if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n" + } + ], + "after": [ + { + "name": "names", + "in": "query", + "description": "Image names to filter by", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to be saved if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "id": "engine-1.56-86f99b31744b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1get/get/parameters", + "destinationPointer": "/paths/~1images~1get/get/parameters" + }, + { + "pointer": "/paths/~1images~1get/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar" + ], + "id": "engine-1.56-97cb03f4d3e4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1get/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1get/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "id": "engine-1.56-bd919cffe156", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1get/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1get/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "format": "binary" + }, + "id": "engine-1.56-f6a9651d055c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1get/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1get/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-f9b39efb1886", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1get/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1get/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b594f72d1377", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1get/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "type": "boolean", + "default": false + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the images list.\n\nAvailable filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n- `until=`\n", + "type": "string" + }, + { + "name": "shared-size", + "in": "query", + "description": "Compute and show shared size as a `SharedSize` field on each image.", + "type": "boolean", + "default": false + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "type": "boolean", + "default": false + }, + { + "name": "manifests", + "in": "query", + "description": "Include `Manifests` in the image summary.", + "type": "boolean", + "default": false + }, + { + "name": "identity", + "in": "query", + "description": "Include `Identity` in each manifest summary. Requires `manifests=1`.", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "all", + "in": "query", + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the images list.\n\nAvailable filters:\n\n- `before`=(`[:]`, `` or ``)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`[:]`)\n- `since`=(`[:]`, `` or ``)\n- `until=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "shared-size", + "in": "query", + "description": "Compute and show shared size as a `SharedSize` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "digests", + "in": "query", + "description": "Show digest information as a `RepoDigests` field on each image.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "manifests", + "in": "query", + "description": "Include `Manifests` in the image summary.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "identity", + "in": "query", + "description": "Include `Identity` in each manifest summary. Requires `manifests=1`.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-43d88e968bfe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1json/get/parameters", + "destinationPointer": "/paths/~1images~1json/get/parameters" + }, + { + "pointer": "/paths/~1images~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-447fccb4c87c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageSummary" + } + } + } + }, + "id": "engine-1.56-3d26ae44b29a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/ImageSummary" + } + }, + "id": "engine-1.56-729b69749059", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-40c20f9c0957", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-97d9ba88dd48", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1load/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar" + ], + "id": "engine-1.56-9ba33bcd070c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1load/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1load/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "imagesTarball", + "in": "body", + "description": "Tar archive containing images", + "schema": { + "type": "string", + "format": "binary" + } + }, + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "type": "boolean", + "default": false + }, + { + "name": "platform", + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to load if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be loaded.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n" + } + ], + "after": [ + { + "name": "quiet", + "in": "query", + "description": "Suppress progress details during load.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform(s) which will be used to select the\nplatform-specific image(s) to load if the image is\nmulti-platform. If not provided, the full multi-platform image\nwill be loaded.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "id": "engine-1.56-c02f4bf1a462", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1load/post/parameters", + "destinationPointer": "/paths/~1images~1load/post/parameters" + }, + { + "pointer": "/paths/~1images~1load/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-71bf775726ea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1load/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1load/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "Tar archive containing images" + }, + "id": "engine-1.56-085b0d930a2f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1load/post/requestBody" + }, + { + "pointer": "/paths/~1images~1load/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-572f19b9edf7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1load/post/responses/500/content" + }, + { + "pointer": "/paths/~1images~1load/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-f37ce6ec20c2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1load/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1prune/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-feff182e2a3f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1prune/post/parameters", + "destinationPointer": "/paths/~1images~1prune/post/parameters" + }, + { + "pointer": "/paths/~1images~1prune/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-3be4a26ea1cd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1prune/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1prune/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "ImagePruneResponse", + "properties": { + "ImagesDeleted": { + "description": "Images that were deleted", + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "id": "engine-1.56-d4abb18f4a7e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1prune/post/responses/200/content" + }, + { + "pointer": "/paths/~1images~1prune/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "ImagePruneResponse", + "properties": { + "ImagesDeleted": { + "description": "Images that were deleted", + "type": "array", + "items": { + "$ref": "#/definitions/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "id": "engine-1.56-ba43548bdad3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1prune/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1prune/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c24a3983163e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1prune/post/responses/500/content" + }, + { + "pointer": "/paths/~1images~1prune/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-97152ed9f208", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1prune/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1search/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "type": "string", + "required": true + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "type": "integer" + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n", + "type": "string" + } + ], + "after": [ + { + "name": "term", + "in": "query", + "description": "Term to search", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results to return", + "schema": { + "type": "integer" + } + }, + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-official=(true|false)`\n- `stars=` Matches images that has at least 'number' stars.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-c4f90bc260a1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/parameters", + "destinationPointer": "/paths/~1images~1search/get/parameters" + }, + { + "pointer": "/paths/~1images~1search/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-3c1949a368e0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1search/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "title": "ImageSearchResponseItem", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "description": "Whether this repository has automated builds enabled.\n\n\n\n\n\n\n> **Deprecated**: This field is deprecated and will always be \"false\".\n", + "type": "boolean", + "example": false + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "examples": { + "response": { + "value": [ + { + "description": "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!", + "is_official": true, + "is_automated": false, + "name": "alpine", + "star_count": 10093 + }, + { + "description": "Busybox base image.", + "is_official": true, + "is_automated": false, + "name": "Busybox base image.", + "star_count": 3037 + }, + { + "description": "The PostgreSQL object-relational database system provides reliability and data integrity.", + "is_official": true, + "is_automated": false, + "name": "postgres", + "star_count": 12408 + } + ] + } + } + } + }, + "id": "engine-1.56-88e7ddc3b122", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1search/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1search/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": [ + { + "description": "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!", + "is_official": true, + "is_automated": false, + "name": "alpine", + "star_count": 10093 + }, + { + "description": "Busybox base image.", + "is_official": true, + "is_automated": false, + "name": "Busybox base image.", + "star_count": 3037 + }, + { + "description": "The PostgreSQL object-relational database system provides reliability and data integrity.", + "is_official": true, + "is_automated": false, + "name": "postgres", + "star_count": 12408 + } + ] + }, + "id": "engine-1.56-5ef160af7546", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1search/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "type": "object", + "title": "ImageSearchResponseItem", + "properties": { + "description": { + "type": "string" + }, + "is_official": { + "type": "boolean" + }, + "is_automated": { + "description": "Whether this repository has automated builds enabled.\n\n


\n\n> **Deprecated**: This field is deprecated and will always be \"false\".\n", + "type": "boolean", + "example": false + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "id": "engine-1.56-5bf7b95d4f45", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1search/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-7b19ad83d13f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1search/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1search/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-feba326217a4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "type": "string", + "required": true + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "type": "boolean", + "default": false + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "type": "boolean", + "default": false + }, + { + "name": "platforms", + "in": "query", + "description": "Select platform-specific content to delete.\nMultiple values are accepted.\nEach platform is a OCI platform encoded as a JSON string.\n", + "type": "array", + "items": { + "type": "string" + } + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "noprune", + "in": "query", + "description": "Do not delete untagged parent images", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platforms", + "in": "query", + "description": "Select platform-specific content to delete.\nMultiple values are accepted.\nEach platform is a OCI platform encoded as a JSON string.\n", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "id": "engine-1.56-d6ccd4a4532d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/parameters", + "destinationPointer": "/paths/~1images~1{name}/delete/parameters" + }, + { + "pointer": "/paths/~1images~1{name}/delete/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-7b4c2900f563", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageDeleteResponseItem" + } + }, + "examples": { + "response": { + "value": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + } + } + } + }, + "id": "engine-1.56-b8179a19bd9e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}/delete/responses/200/content" + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + }, + "id": "engine-1.56-b95fcea523ad", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/ImageDeleteResponseItem" + } + }, + "id": "engine-1.56-910d34102b44", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-7c4782c93281", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-35fba62fb4d2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-0ed32225084e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}/delete/responses/409/content" + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-4e6e0fb558c4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-0b9baa814d9d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-37aea11cc982", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "type": "string", + "required": true + }, + { + "name": "platform", + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "in": "query", + "description": "JSON-encoded OCI platform to select the image variant whose\nattestations to return.\nIf omitted, the daemon's default (host) platform is used.\n\nOnly one platform value is currently accepted; passing more than\none returns an error. The parameter is declared as an array so the\nwire shape can accept multiple values in the future without an\nAPI version bump.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"amd64\"}`", + "required": false + }, + { + "name": "type", + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "in": "query", + "description": "In-toto predicate type URI to filter returned statements. May be\nrepeated to accept any of several predicate types. If omitted, all\nstatements are returned.\n\nExample: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document`", + "required": false + }, + { + "name": "statement", + "type": "boolean", + "in": "query", + "description": "Include the verbatim in-toto statement body in each returned\nentry. Defaults to false; when omitted or false, only the\ndescriptor and predicate type are returned and statement blobs\nare not read.", + "default": false, + "required": false + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the image variant whose\nattestations to return.\nIf omitted, the daemon's default (host) platform is used.\n\nOnly one platform value is currently accepted; passing more than\none returns an error. The parameter is declared as an array so the\nwire shape can accept multiple values in the future without an\nAPI version bump.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"amd64\"}`", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "type", + "in": "query", + "description": "In-toto predicate type URI to filter returned statements. May be\nrepeated to accept any of several predicate types. If omitted, all\nstatements are returned.\n\nExample: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document`", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "statement", + "in": "query", + "description": "Include the verbatim in-toto statement body in each returned\nentry. Defaults to false; when omitted or false, only the\ndescriptor and predicate type are returned and statement blobs\nare not read.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-5aff6031fe4f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/parameters", + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-0e1ae53f0dbd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AttestationStatement" + } + } + } + }, + "id": "engine-1.56-c48d65c6ee65", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/AttestationStatement" + } + }, + "id": "engine-1.56-88d44da8bd17", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-7081db4dba5f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/responses/400/content" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d2523049b60f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-1ab5facf158d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-6c8188501f64", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-914386322e85", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d7cea8e65555", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/501/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c4f97b58852a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1attestations/get/responses/501/content" + }, + { + "pointer": "/paths/~1images~1{name}~1attestations/get/responses/501/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5ac46137b299", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1attestations/get/responses/501/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "type": "string", + "required": true + }, + { + "name": "platform", + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi", + "in": "query", + "description": "JSON encoded OCI platform describing a platform which will be used\nto select a platform-specific image to be saved if the image is\nmulti-platform.\nIf not provided, the full multi-platform image will be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON encoded OCI platform describing a platform which will be used\nto select a platform-specific image to be saved if the image is\nmulti-platform.\nIf not provided, the full multi-platform image will be saved.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "id": "engine-1.56-af7853f8bc6b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1get/get/parameters", + "destinationPointer": "/paths/~1images~1{name}~1get/get/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar" + ], + "id": "engine-1.56-2244e0334299", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1get/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "id": "engine-1.56-0a74908d8371", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1get/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "format": "binary" + }, + "id": "engine-1.56-552cf6d20585", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1get/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-2a96ed6f3ae7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1get/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-484df107a7f7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1get/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "type": "string", + "required": true + }, + { + "name": "platform", + "type": "string", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show the history for. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show the history for. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-3fb71168d49a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/parameters", + "destinationPointer": "/paths/~1images~1{name}~1history/get/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-a0c5aaef92c9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageHistoryResponseItem" + } + }, + "examples": { + "response": { + "value": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + } + } + } + }, + "id": "engine-1.56-44b3a3e53b68", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1history/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": [], + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + }, + "id": "engine-1.56-bd698703e867", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/ImageHistoryResponseItem" + } + }, + "id": "engine-1.56-1d8a9bb58fdd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-a95ca59fe8f1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1history/get/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-97eb6076f471", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-e490000cf6ef", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1history/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1history/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-41f9fcadba34", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1history/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "type": "string", + "required": true + }, + { + "name": "manifests", + "in": "query", + "description": "Include Manifests in the image summary.\n\nThe `manifests` and `platform` options are mutually exclusive, and\nan error is produced if both are set.", + "type": "boolean", + "default": false, + "required": false + }, + { + "name": "platform", + "type": "string", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show inspect. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nThe `platform` and `manifests` options are mutually exclusive, and\nan error is produced if both are set.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "manifests", + "in": "query", + "description": "Include Manifests in the image summary.\n\nThe `manifests` and `platform` options are mutually exclusive, and\nan error is produced if both are set.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant.\nIf omitted, it defaults to any locally available platform,\nprioritizing the daemon's host platform.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to show inspect. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nThe `platform` and `manifests` options are mutually exclusive, and\nan error is produced if both are set.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-3f0ba7e758bf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/parameters", + "destinationPointer": "/paths/~1images~1{name}~1json/get/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-8578a15f6414", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageInspect" + } + } + }, + "id": "engine-1.56-0603c5898139", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ImageInspect" + }, + "id": "engine-1.56-28165ebb52e7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such image: someimage (tag: latest)" + } + } + } + } + }, + "id": "engine-1.56-d93299a2bb5c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1json/get/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such image: someimage (tag: latest)" + } + }, + "id": "engine-1.56-5a4f3f544db1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-34adb2439830", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b4654a3adaaf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-2f38dc6a4e90", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/octet-stream" + ], + "id": "engine-1.56-c25e105f4118", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Name of the image to push. For example, `registry.example.com/myimage`.\nThe image must be present in the local image store with the same name.\n\nThe name should be provided without tag; if a tag is provided, it\nis ignored. For example, `registry.example.com/myimage:latest` is\nconsidered equivalent to `registry.example.com/myimage`.\n\nUse the `tag` parameter to specify the tag to push.\n", + "type": "string", + "required": true + }, + { + "name": "tag", + "in": "query", + "description": "Tag of the image to push. For example, `latest`. If no tag is provided,\nall tags of the given image that are present in the local image store\nare pushed.\n", + "type": "string" + }, + { + "name": "platform", + "type": "string", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant to push.\nIf not provided, all available variants will attempt to be pushed.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to push to the registry. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n" + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string", + "required": true + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Name of the image to push. For example, `registry.example.com/myimage`.\nThe image must be present in the local image store with the same name.\n\nThe name should be provided without tag; if a tag is provided, it\nis ignored. For example, `registry.example.com/myimage:latest` is\nconsidered equivalent to `registry.example.com/myimage`.\n\nUse the `tag` parameter to specify the tag to push.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Tag of the image to push. For example, `latest`. If no tag is provided,\nall tags of the given image that are present in the local image store\nare pushed.\n", + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "JSON-encoded OCI platform to select the platform-variant to push.\nIf not provided, all available variants will attempt to be pushed.\n\nIf the daemon provides a multi-platform image store, this selects\nthe platform-variant to push to the registry. If the image is\na single-platform image, or if the multi-platform image does not\nprovide a variant matching the given platform, an error is returned.\n\nExample: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-607c30e901b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/parameters", + "destinationPointer": "/paths/~1images~1{name}~1push/post/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-1a7de6b06664", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1push/post/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-db4a5abe4be2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-5d8aed18511b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1push/post/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-33df340f5788", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "type": "string", + "required": true + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "type": "string" + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "type": "string" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "Image name or ID to tag.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "The name of the new tag.", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-d8486c5ba6be", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/parameters", + "destinationPointer": "/paths/~1images~1{name}~1tag/post/parameters" + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-fec682264052", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1tag/post/responses/400/content" + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-081de71a1663", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-5d5ed461deb2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1tag/post/responses/404/content" + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d9534b160b1f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-2d2e0e32754e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1tag/post/responses/409/content" + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-afe746832fcb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-2c9536e20dfe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1tag/post/responses/500/content" + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c534cc5e64ec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1info/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-3be1b9973809", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1info/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1info/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemInfo" + } + } + }, + "id": "engine-1.56-c79fa00af0b7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1info/get/responses/200/content" + }, + { + "pointer": "/paths/~1info/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/SystemInfo" + }, + "id": "engine-1.56-44e9d72f71b0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1info/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1info/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6a69db0b9bc3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1info/get/responses/500/content" + }, + { + "pointer": "/paths/~1info/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d930557b6fc1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1info/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process\non the networks list.\n\nAvailable filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n networks that are not in use by a container. When set to `false`\n (or `0`), only networks that are in use by one or more\n containers are returned.\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process\non the networks list.\n\nAvailable filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n networks that are not in use by a container. When set to `false`\n (or `0`), only networks that are in use by one or more\n containers are returned.\n- `driver=` Matches a network's driver.\n- `id=` Matches all or part of a network ID.\n- `label=` or `label==` of a network label.\n- `name=` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-cb9e07e9e297", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks/get/parameters", + "destinationPointer": "/paths/~1networks/get/parameters" + }, + { + "pointer": "/paths/~1networks/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-6abf102a9c64", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkSummary" + } + }, + "examples": { + "response": { + "value": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv4": true, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + } + } + } + }, + "id": "engine-1.56-692cc4dacbca", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks/get/responses/200/content" + }, + { + "pointer": "/paths/~1networks/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": [ + { + "Name": "bridge", + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Created": "2016-10-19T06:21:00.416543526Z", + "Scope": "local", + "Driver": "bridge", + "EnableIPv4": true, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ] + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + { + "Name": "none", + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "null", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + }, + { + "Name": "host", + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Created": "0001-01-01T00:00:00Z", + "Scope": "local", + "Driver": "host", + "EnableIPv4": false, + "EnableIPv6": false, + "Internal": false, + "Attachable": false, + "Ingress": false, + "IPAM": { + "Driver": "default", + "Config": [] + }, + "Containers": {}, + "Options": {} + } + ] + }, + "id": "engine-1.56-244189637d80", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/NetworkSummary" + } + }, + "id": "engine-1.56-54186c12c913", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-de10d657632d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks/get/responses/500/content" + }, + { + "pointer": "/paths/~1networks/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b9fe4ce5786e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-f60491e9957f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "networkConfig", + "in": "body", + "description": "Network configuration", + "required": true, + "schema": { + "type": "object", + "title": "NetworkCreateRequest", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "The network's name.", + "type": "string", + "example": "my_network" + }, + "Driver": { + "description": "Name of the network driver plugin to use.", + "type": "string", + "default": "bridge", + "example": "bridge" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level).\n", + "type": "string" + }, + "Internal": { + "description": "Restrict external access to the network.", + "type": "boolean" + }, + "Attachable": { + "description": "Globally scoped network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "example": true + }, + "Ingress": { + "description": "Ingress network is the network which provides the routing-mesh\nin swarm mode.\n", + "type": "boolean", + "example": false + }, + "ConfigOnly": { + "description": "Creates a config-only network. Config-only networks are placeholder\nnetworks for network configurations to be used by other networks.\nConfig-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "default": false, + "example": false + }, + "ConfigFrom": { + "description": "Specifies the source which will provide the configuration for\nthis network. The specified network must be an existing\nconfig-only network; see ConfigOnly.\n", + "$ref": "#/definitions/ConfigReference" + }, + "IPAM": { + "description": "Optional custom IP scheme for the network.", + "$ref": "#/definitions/IPAM" + }, + "EnableIPv4": { + "description": "Enable IPv4 on the network.", + "type": "boolean", + "example": true + }, + "EnableIPv6": { + "description": "Enable IPv6 on the network.", + "type": "boolean", + "example": true + }, + "Options": { + "description": "Network specific options to be used by the drivers.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + } + ], + "id": "engine-1.56-fbd8601a51dd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-8c09ceceefb4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "NetworkCreateRequest", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "The network's name.", + "type": "string", + "example": "my_network" + }, + "Driver": { + "description": "Name of the network driver plugin to use.", + "type": "string", + "default": "bridge", + "example": "bridge" + }, + "Scope": { + "description": "The level at which the network exists (e.g. `swarm` for cluster-wide\nor `local` for machine level).\n", + "type": "string" + }, + "Internal": { + "description": "Restrict external access to the network.", + "type": "boolean" + }, + "Attachable": { + "description": "Globally scoped network is manually attachable by regular\ncontainers from workers in swarm mode.\n", + "type": "boolean", + "example": true + }, + "Ingress": { + "description": "Ingress network is the network which provides the routing-mesh\nin swarm mode.\n", + "type": "boolean", + "example": false + }, + "ConfigOnly": { + "description": "Creates a config-only network. Config-only networks are placeholder\nnetworks for network configurations to be used by other networks.\nConfig-only networks cannot be used directly to run containers\nor services.\n", + "type": "boolean", + "default": false, + "example": false + }, + "ConfigFrom": { + "allOf": [ + { + "$ref": "#/components/schemas/ConfigReference" + }, + { + "description": "Specifies the source which will provide the configuration for\nthis network. The specified network must be an existing\nconfig-only network; see ConfigOnly.\n" + } + ] + }, + "IPAM": { + "allOf": [ + { + "$ref": "#/components/schemas/IPAM" + }, + { + "description": "Optional custom IP scheme for the network." + } + ] + }, + "EnableIPv4": { + "description": "Enable IPv4 on the network.", + "type": "boolean", + "example": true + }, + "EnableIPv6": { + "description": "Enable IPv6 on the network.", + "type": "boolean", + "example": true + }, + "Options": { + "description": "Network specific options to be used by the drivers.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + } + } + } + } + }, + "description": "Network configuration", + "required": true + }, + "id": "engine-1.56-46390cb65764", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/requestBody" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkCreateResponse" + } + } + }, + "id": "engine-1.56-94f958bc4bf0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/NetworkCreateResponse" + }, + "id": "engine-1.56-4ed4611acf60", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-ccee151f5a81", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/responses/400/content" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-a7ce53a737b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-ed8e7b074898", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/responses/403/content" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5f90abc9a5c1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-192f7649fc70", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/responses/404/content" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5b3306c4935b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-98fc72908355", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-a19ba1caae5b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1prune/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-8d54fc769f9b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1prune/post/parameters", + "destinationPointer": "/paths/~1networks~1prune/post/parameters" + }, + { + "pointer": "/paths/~1networks~1prune/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-9714f340eed8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1prune/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1prune/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "NetworkPruneResponse", + "properties": { + "NetworksDeleted": { + "description": "Networks that were deleted", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "id": "engine-1.56-c5793b25b78e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1prune/post/responses/200/content" + }, + { + "pointer": "/paths/~1networks~1prune/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "NetworkPruneResponse", + "properties": { + "NetworksDeleted": { + "description": "Networks that were deleted", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "id": "engine-1.56-ebdc78b7ca6b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1prune/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1prune/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6ee86c48ab12", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1prune/post/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1prune/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-72e6afec6354", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1prune/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-77472283eb60", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/parameters", + "destinationPointer": "/paths/~1networks~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-47c235afb9f6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/delete/responses/403/content" + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-91023e841152", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6cb852e39bc0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-215597a3b0f7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c705b3ea93bd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-68675dcbee7e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "type": "string" + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "type": "boolean", + "default": false + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "verbose", + "in": "query", + "description": "Detailed inspect output for troubleshooting", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "scope", + "in": "query", + "description": "Filter the network by scope (swarm, global, or local)", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-90e5e337fa74", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/get/parameters", + "destinationPointer": "/paths/~1networks~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1networks~1{id}/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-fca9d1e20925", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkInspect" + } + } + }, + "id": "engine-1.56-1f6c394c3a3e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/NetworkInspect" + }, + "id": "engine-1.56-1abdb85496f8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c5eca0a16010", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5326031809db", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-11b909cffa03", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d0063f050ef8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-f2d81f9be52c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "type": "string" + }, + { + "name": "container", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/NetworkConnectRequest" + } + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-2edd7193d3dd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/parameters", + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/parameters" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkConnectRequest" + } + } + }, + "required": true + }, + "id": "engine-1.56-2f1b13820bd8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/requestBody" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-087acd571555", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/responses/400/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-bb5c4ae8aef3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-2870549ca39b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/responses/403/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8da3f40cf30c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-3a1c79e3fe3b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/responses/404/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-6434d115ccee", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-99d263005f5b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1connect/post/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-57add2bbc914", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-59d5d3f41578", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "type": "string" + }, + { + "name": "container", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/NetworkDisconnectRequest" + } + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "Network ID or name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-a80d7bf6b3d9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/parameters", + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/parameters" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkDisconnectRequest" + } + } + }, + "required": true + }, + "id": "engine-1.56-858a70e19498", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/requestBody" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-9cc6f27a2325", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-456d27e28d41", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-becafa604761", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-1fac4a3785a5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-8949bd871487", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/content" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-2fbf4f0f3c09", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `node.label=`\n- `role=`(`manager`|`worker`)`\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=`\n- `label=`\n- `membership=`(`accepted`|`pending`)`\n- `name=`\n- `node.label=`\n- `role=`(`manager`|`worker`)`\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-5bcbfcc84545", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/parameters", + "destinationPointer": "/paths/~1nodes/get/parameters" + }, + { + "pointer": "/paths/~1nodes/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Node" + } + } + } + }, + "id": "engine-1.56-971b9a53edce", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes/get/responses/200/content" + }, + { + "pointer": "/paths/~1nodes/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Node" + } + }, + "id": "engine-1.56-e6f10b2b1197", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-2e20008df797", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes/get/responses/500/content" + }, + { + "pointer": "/paths/~1nodes/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d094a325376e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-a40767dcd9c8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes/get/responses/503/content" + }, + { + "pointer": "/paths/~1nodes/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b8fbf812648c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "type": "string", + "required": true + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "default": false, + "type": "boolean" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force remove a node from the swarm", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-bfa5ff16cd35", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/parameters", + "destinationPointer": "/paths/~1nodes~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-407606e7fa93", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-84b69be58b4f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c924849db92d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-4a688a4169cd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-710e4e65db4e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/delete/responses/503/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-bea41eb5eddf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "type": "string", + "required": true + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the node", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-a3f1ec012696", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/parameters", + "destinationPointer": "/paths/~1nodes~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Node" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Node" + } + } + }, + "id": "engine-1.56-e9d46af2f54d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Node" + }, + "id": "engine-1.56-a3f69e7d9360", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-1013ad0a99b0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-ac142fb7b6c5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-a8a267782b39", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-643a744346f4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b92f97e0291e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/get/responses/503/content" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c4dc6945d151", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "type": "string", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/NodeSpec" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required\nto avoid conflicting writes.\n", + "type": "integer", + "format": "int64", + "required": true + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "The ID of the node", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the node object being updated. This is required\nto avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "id": "engine-1.56-d6d56e0fddcb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/parameters", + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/parameters" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NodeSpec" + } + } + } + }, + "id": "engine-1.56-be5adf7055bd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/requestBody" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-a064946502da", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/responses/400/content" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d522e50b32b6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-e59f47e3866c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/responses/404/content" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c9716cca11d2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6e6b9c704f33", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-6da79c89cc7e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6045b5506528", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/responses/503/content" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-147429cca3e6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the plugin list.\n\nAvailable filters:\n\n- `capability=`\n- `enable=|`\n" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the plugin list.\n\nAvailable filters:\n\n- `capability=`\n- `enable=|`\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-f51ae0c31fc6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins/get/parameters", + "destinationPointer": "/paths/~1plugins/get/parameters" + }, + { + "pointer": "/paths/~1plugins/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-67b596b9549d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plugin" + } + } + } + }, + "id": "engine-1.56-84ddbf4b05b1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins/get/responses/200/content" + }, + { + "pointer": "/paths/~1plugins/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Plugin" + } + }, + "id": "engine-1.56-f701c3436e5a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-75084ae63339", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins/get/responses/500/content" + }, + { + "pointer": "/paths/~1plugins/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-a2368cdb4709", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/x-tar" + ], + "id": "engine-1.56-a939d62d112c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1create/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "tarContext", + "in": "body", + "description": "Path to tar containing plugin rootfs and manifest", + "schema": { + "type": "string", + "format": "binary" + } + } + ], + "after": [ + { + "name": "name", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-025ac6ed5424", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1create/post/parameters", + "destinationPointer": "/paths/~1plugins~1create/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/x-tar": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "description": "Path to tar containing plugin rootfs and manifest" + }, + "id": "engine-1.56-b501d7b0e808", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1create/post/requestBody" + }, + { + "pointer": "/paths/~1plugins~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-13173e95e2bf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-31568c120353", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1privileges/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "remote", + "in": "query", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-53b21e2fdf25", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1privileges/get/parameters", + "destinationPointer": "/paths/~1plugins~1privileges/get/parameters" + }, + { + "pointer": "/paths/~1plugins~1privileges/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + }, + "id": "engine-1.56-0e6383481e17", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1privileges/get/responses/200/content" + }, + { + "pointer": "/paths/~1plugins~1privileges/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + }, + "id": "engine-1.56-71417ff08b62", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1privileges/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1privileges/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c9eee629aebf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1privileges/get/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1privileges/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-3d171b44527c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1privileges/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1pull/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": false, + "type": "string" + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + ], + "after": [ + { + "name": "remote", + "in": "query", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-6f3a898d1781", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1pull/post/parameters", + "destinationPointer": "/paths/~1plugins~1pull/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1pull/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-0c42897be0fb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1pull/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1pull/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "$ref": "#/components/requestBodies/PluginPrivilegeArray" + }, + "id": "engine-1.56-3e0adfa5dae2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1pull/post/requestBody" + }, + { + "pointer": "/paths/~1plugins~1pull/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-e20f2e799edd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1pull/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1pull/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-0f1d12c206a6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1pull/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the\nplugin is in use by a container.\n", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Disable the plugin before removing. This may result in issues if the\nplugin is in use by a container.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-6eef25d1e2c9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/parameters", + "destinationPointer": "/paths/~1plugins~1{name}/delete/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + }, + "id": "engine-1.56-e941027cce19", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}/delete/responses/200/content" + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Plugin" + }, + "id": "engine-1.56-bb57b024030a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-d0632ffe7a5b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d68ad8defc67", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-d6f43c701d77", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d9a179e3afcc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "force", + "in": "query", + "description": "Force disable a plugin even if still in use.\n", + "required": false, + "type": "boolean" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force disable a plugin even if still in use.\n", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "id": "engine-1.56-308d5e3911db", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1disable/post/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1disable/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-0e9d42796c82", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-01a271d170e6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-642710fcb346", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-df03e93b3931", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "type": "integer", + "default": 0 + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "query", + "description": "Set the HTTP client timeout (in seconds)", + "schema": { + "type": "integer", + "default": 0 + } + } + ], + "id": "engine-1.56-0a417f3c4bf5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1enable/post/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1enable/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-37c507ef2ff9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-10cbdc4e2310", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-e8a03331e6c7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-557e4202e16a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-9bbf3b93b1f3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1json/get/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Plugin" + } + } + }, + "id": "engine-1.56-921081768fac", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1json/get/responses/200/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Plugin" + }, + "id": "engine-1.56-44b35b17dae5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-1599be2abed2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1json/get/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-0315523cbf90", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-466c83dce093", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1json/get/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c6ce204c102e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-f8c9c7da3ffa", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1push/post/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1push/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-fe85099c6226", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1push/post/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-41fb98a7e7a4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1push/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-1118eb971001", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1push/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-76a4ea16ef9e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1push/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-3dc2c5519851", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=1" + ] + } + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-5e2e62492f04", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1set/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=1" + ] + } + } + } + }, + "id": "engine-1.56-d67097f75580", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1set/post/requestBody" + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b00f5ddde1ee", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1set/post/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-dbd84682aa4e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-66867a073186", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1set/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b38ff3ddcf0e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "type": "string" + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginPrivilege" + }, + "example": [ + { + "Name": "network", + "Description": "", + "Value": [ + "host" + ] + }, + { + "Name": "mount", + "Description": "", + "Value": [ + "/data" + ] + }, + { + "Name": "device", + "Description": "", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name of the plugin. The `:latest` tag is optional, and is the\ndefault if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote", + "in": "query", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration to use when pulling a plugin\nfrom a registry.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-26395c9d1df0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1upgrade/post/parameters", + "destinationPointer": "/paths/~1plugins~1{name}~1upgrade/post/parameters" + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "$ref": "#/components/requestBodies/PluginPrivilegeArray" + }, + "id": "engine-1.56-8b8bd3aa06bb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1upgrade/post/requestBody" + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6076ad738f1b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-a02b234801e7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-4c9e5f935654", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/content" + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-059fc20dca5b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the secrets list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a secret name (prefix match)\n- `names=` matches a secret name (exact match)\n" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the secrets list.\n\nAvailable filters:\n\n- `id=`\n- `label= or label==value`\n- `name=` matches all or part of a secret name (prefix match)\n- `names=` matches a secret name (exact match)\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-478769609b6d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets/get/parameters", + "destinationPointer": "/paths/~1secrets/get/parameters" + }, + { + "pointer": "/paths/~1secrets/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-2f3cfc5de0c3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Secret" + }, + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "id": "engine-1.56-ea794a078f16", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets/get/responses/200/content" + }, + { + "pointer": "/paths/~1secrets/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Secret" + }, + "example": [ + { + "ID": "blt1owaxmitz71s9v5zh81zun", + "Version": { + "Index": 85 + }, + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Spec": { + "Name": "mysql-passwd", + "Labels": { + "some.label": "some.value" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + }, + { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + } + } + } + ] + }, + "id": "engine-1.56-fa1bf2816cfa", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-105b73c83eff", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets/get/responses/500/content" + }, + { + "pointer": "/paths/~1secrets/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-2323dcf1cad5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-148245b93dd5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets/get/responses/503/content" + }, + { + "pointer": "/paths/~1secrets/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-02cd9b841c92", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-6fd4e7dc64c6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "body", + "in": "body", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + ], + "id": "engine-1.56-218eabb834d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-a7903480ec4c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/SecretSpec" + }, + { + "type": "object", + "example": { + "Name": "app-key.crt", + "Labels": { + "foo": "bar" + }, + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + ] + } + } + } + }, + "id": "engine-1.56-1443c3b3aaeb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/requestBody" + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IDResponse" + } + } + }, + "id": "engine-1.56-03c4e7363fd0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/IDResponse" + }, + "id": "engine-1.56-09595910701a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-ba6e88885b61", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/responses/409/content" + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d53ba05fbec2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-17f077d89294", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-6f734aa4066a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6e91c994b33d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/responses/503/content" + }, + { + "pointer": "/paths/~1secrets~1create/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-230ebc522152", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1create/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "ID of the secret" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the secret", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-3ed926b7a0b8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/delete/parameters", + "destinationPointer": "/paths/~1secrets~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-311c0d5b3a42", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/delete/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-35292ab86e54", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-1882a5480077", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c6b1405502d1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-1e24957f3455", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-5818c6a95a17", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/delete/responses/503/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d3d85492d204", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/delete/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "ID of the secret" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the secret", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-be1fea7e5eb3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/parameters", + "destinationPointer": "/paths/~1secrets~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-d10e78db33ea", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Secret" + }, + "examples": { + "response": { + "value": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + } + } + } + }, + "id": "engine-1.56-5b91961e53b0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/200/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Version": { + "Index": 11 + }, + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Spec": { + "Name": "app-dev.crt", + "Labels": { + "foo": "bar" + }, + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + } + } + } + }, + "id": "engine-1.56-6bf02815dedb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/responses/200/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Secret" + }, + "id": "engine-1.56-0586ab0c011f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b2e4837f2a04", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8edc4eefcfd0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-3e4b9e93c8ba", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-3606b4921c05", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-a855856598d6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/get/responses/503/content" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-734fb90fd1d0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "type": "string", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/SecretSpec" + }, + "description": "The spec of the secret to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[SecretInspect endpoint](#operation/SecretInspect) response values.\n" + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is\nrequired to avoid conflicting writes.\n", + "type": "integer", + "format": "int64", + "required": true + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "The ID or name of the secret", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the secret object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "id": "engine-1.56-ecb1625a7fdd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/parameters", + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/parameters" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SecretSpec" + } + } + }, + "description": "The spec of the secret to update. Currently, only the Labels field\ncan be updated. All other fields must remain unchanged from the\n[SecretInspect endpoint](#operation/SecretInspect) response values.\n" + }, + "id": "engine-1.56-9d3071c40298", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/requestBody" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-bf270f943cca", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/responses/400/content" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-196ae6f4214f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b0d7602befd6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/responses/404/content" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-0d9443f2aec9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-adbe0831d79e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8ffb68dc278d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-51907cae073a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/responses/503/content" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5f50e2b5d203", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the services list.\n\nAvailable filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n" + }, + { + "name": "status", + "in": "query", + "type": "boolean", + "description": "Include service status, with count of running and desired tasks.\n" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the services list.\n\nAvailable filters:\n\n- `id=`\n- `label=`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=`\n", + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "query", + "description": "Include service status, with count of running and desired tasks.\n", + "schema": { + "type": "boolean" + } + } + ], + "id": "engine-1.56-e71de8b79898", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/parameters", + "destinationPointer": "/paths/~1services/get/parameters" + }, + { + "pointer": "/paths/~1services/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + } + } + }, + "id": "engine-1.56-acb02bf5cdda", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services/get/responses/200/content" + }, + { + "pointer": "/paths/~1services/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Service" + } + }, + "id": "engine-1.56-934307bd574c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6aae1b1747a0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services/get/responses/500/content" + }, + { + "pointer": "/paths/~1services/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-e0444841a296", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-3f59545cdece", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services/get/responses/503/content" + }, + { + "pointer": "/paths/~1services/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-606754ffa78f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-60ecce1c86e1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ], + "OomScoreAdj": 0 + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string" + } + ], + "after": [ + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-62bd6114a805", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/parameters", + "destinationPointer": "/paths/~1services~1create/post/parameters" + }, + { + "pointer": "/paths/~1services~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-13a7170303fc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "web", + "TaskTemplate": { + "ContainerSpec": { + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "User": "33", + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Search": [ + "example.org" + ], + "Options": [ + "timeout:3" + ] + }, + "Secrets": [ + { + "File": { + "Name": "www.example.org.key", + "UID": "33", + "GID": "33", + "Mode": 384 + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ], + "OomScoreAdj": 0 + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + } + } + } + ] + } + } + }, + "required": true + }, + "id": "engine-1.56-569729623416", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/requestBody" + }, + { + "pointer": "/paths/~1services~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceCreateResponse" + } + } + }, + "id": "engine-1.56-f90e28b69462", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ServiceCreateResponse" + }, + "id": "engine-1.56-e97c7df91a3f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-7f7fbd7e40cc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/400/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c67933161811", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/responses/403/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-b48d65a65b05", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/403/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/403/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-c753c2759fa9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/403/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-1cbe8b01ff1c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/409/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8209fb0c8367", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-8c33df583c4b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-1148c54bca75", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1create/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-0a8e2862fe34", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/responses/503/content" + }, + { + "pointer": "/paths/~1services~1create/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-bb57d451210c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1create/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-74a351d94ad6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/parameters", + "destinationPointer": "/paths/~1services~1{id}/delete/parameters" + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-3623fd59b336", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-cb04ab53985e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c551a68558bf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d930bf424f47", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-43f8be22b162", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/delete/responses/503/content" + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-37a2f859fd61", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "type": "string" + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "insertDefaults", + "in": "query", + "description": "Fill empty fields with default values.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-10253f64f798", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/parameters", + "destinationPointer": "/paths/~1services~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Service" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Service" + } + } + }, + "id": "engine-1.56-4b4bba58f44a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Service" + }, + "id": "engine-1.56-f7cfe871e85b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-212ed6082897", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-31d7953541e4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-ee61a237a136", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-279863552b27", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-50e5ff058eee", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/get/responses/503/content" + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-92a735d6ac7b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the service", + "type": "string" + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "type": "boolean", + "default": false + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "type": "boolean", + "default": false + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "type": "boolean", + "default": false + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "type": "boolean", + "default": false + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "type": "integer", + "default": 0 + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "type": "boolean", + "default": false + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "type": "string", + "default": "all" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID or name of the service", + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show service context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "id": "engine-1.56-5b0827115fe2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/parameters", + "destinationPointer": "/paths/~1services~1{id}~1logs/get/parameters" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream", + "application/vnd.docker.multiplexed-stream" + ], + "id": "engine-1.56-e95b26c3dbe8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "id": "engine-1.56-fa81ab2d5d08", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/200/content" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "format": "binary" + }, + "id": "engine-1.56-82570f61da84", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such service: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-729584add335", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/404/content" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such service: c2ada9df5af8" + } + }, + "id": "engine-1.56-6125acfb78d1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-bd24b640fc26", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-68c4b07ac205", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/500/content" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b49376e2a5dc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-925d4638cbcd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/503/content" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-05291b3ea173", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-9469840ec852", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ], + "OomScoreAdj": 0 + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is\nrequired to avoid conflicting writes.\nThis version number should be the value as currently set on the\nservice *before* the update. You can find the current version by\ncalling `GET /services/{id}`\n", + "required": true, + "type": "integer" + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the `X-Registry-Auth` header is not specified, this parameter\nindicates where to find registry authorization credentials.\n", + "type": "string", + "enum": [ + "spec", + "previous-spec" + ], + "default": "spec" + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback\nto the previous service spec. The supplied spec will be ignored in\nthis case.\n", + "type": "string" + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "ID or name of service.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the service object being updated. This is\nrequired to avoid conflicting writes.\nThis version number should be the value as currently set on the\nservice *before* the update. You can find the current version by\ncalling `GET /services/{id}`\n", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "registryAuthFrom", + "in": "query", + "description": "If the `X-Registry-Auth` header is not specified, this parameter\nindicates where to find registry authorization credentials.\n", + "schema": { + "type": "string", + "enum": [ + "spec", + "previous-spec" + ], + "default": "spec" + } + }, + { + "name": "rollback", + "in": "query", + "description": "Set to this parameter to `previous` to cause a server-side rollback\nto the previous service spec. The supplied spec will be ignored in\nthis case.\n", + "schema": { + "type": "string" + } + }, + { + "name": "X-Registry-Auth", + "in": "header", + "description": "A base64url-encoded auth configuration for pulling from private\nregistries.\n\nRefer to the [authentication section](#section/Authentication) for\ndetails.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-5fb0014f912e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/parameters", + "destinationPointer": "/paths/~1services~1{id}~1update/post/parameters" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-8605dc7d56b0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ServiceSpec" + }, + { + "type": "object", + "example": { + "Name": "top", + "TaskTemplate": { + "ContainerSpec": { + "Image": "busybox", + "Args": [ + "top" + ], + "OomScoreAdj": 0 + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {}, + "ForceUpdate": 0 + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": { + "Parallelism": 2, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "RollbackConfig": { + "Parallelism": 1, + "Delay": 1000000000, + "FailureAction": "pause", + "Monitor": 15000000000, + "MaxFailureRatio": 0.15 + }, + "EndpointSpec": { + "Mode": "vip" + } + } + } + ] + } + } + }, + "required": true + }, + "id": "engine-1.56-595c0c373e65", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/requestBody" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUpdateResponse" + } + } + }, + "id": "engine-1.56-cb1647e4580a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/responses/200/content" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ServiceUpdateResponse" + }, + "id": "engine-1.56-4614e0b82e25", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c081848ef5e2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/responses/400/content" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-0af39b24293f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-475153a36837", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/responses/404/content" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5a5254d001e9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-3aafc89ddd3b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-52ccab6715ec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-d0db3c41024f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/responses/503/content" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-9d342d5fe0f5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1update/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1session/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream" + ], + "id": "engine-1.56-8685e1cf6140", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1session/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1session/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-adcd61b4b538", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1session/post/responses/400/content" + }, + { + "pointer": "/paths/~1session/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8def75426146", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1session/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1session/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6d57f96a1900", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1session/post/responses/500/content" + }, + { + "pointer": "/paths/~1session/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-0e8f5ff66ff8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1session/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Swarm" + } + } + }, + "id": "engine-1.56-fd88f40eb8fe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm/get/responses/200/content" + }, + { + "pointer": "/paths/~1swarm/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Swarm" + }, + "id": "engine-1.56-85bdc24706ca", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-1b4f000c7f85", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm/get/responses/404/content" + }, + { + "pointer": "/paths/~1swarm/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-da144fcfdc97", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c2c0d2b6776a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm/get/responses/500/content" + }, + { + "pointer": "/paths/~1swarm/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-31d162421416", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-ae4a709e3746", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm/get/responses/503/content" + }, + { + "pointer": "/paths/~1swarm/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-9a9469550e24", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "title": "SwarmInitRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "type": "integer", + "format": "uint32" + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "type": "array", + "items": { + "type": "string", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "ForceNewCluster": { + "description": "Force creation of a new swarm.", + "type": "boolean" + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "type": "integer", + "format": "uint32" + }, + "Spec": { + "$ref": "#/definitions/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + ], + "id": "engine-1.56-43d06b8ff48a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json", + "text/plain" + ], + "id": "engine-1.56-610321a92057", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmInitRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "type": "integer", + "format": "uint32" + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "type": "array", + "items": { + "type": "string", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "ForceNewCluster": { + "description": "Force creation of a new swarm.", + "type": "boolean" + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "type": "integer", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SwarmInitRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication, as well\nas determining the networking interface used for the VXLAN\nTunnel Endpoint (VTEP). This can either be an address/port\ncombination in the form `192.168.1.1:4567`, or an interface\nfollowed by a port number, like `eth0:4567`. If the port number\nis omitted, the default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "DataPathPort": { + "description": "DataPathPort specifies the data path port number for data traffic.\nAcceptable port range is 1024 to 49151.\nif no port is set or is set to 0, default port 4789 will be used.\n", + "type": "integer", + "format": "uint32" + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global\nscope networks.\n", + "type": "array", + "items": { + "type": "string", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "ForceNewCluster": { + "description": "Force creation of a new swarm.", + "type": "boolean" + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created\nfrom the default subnet pool.\n", + "type": "integer", + "format": "uint32" + }, + "Spec": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathPort": 4789, + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "SubnetSize": 24, + "ForceNewCluster": false, + "Spec": { + "Orchestration": {}, + "Raft": {}, + "Dispatcher": {}, + "CAConfig": {}, + "EncryptionConfig": { + "AutoLockManagers": false + } + } + } + } + } + }, + "required": true + }, + "id": "engine-1.56-1b9446d5af4a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/requestBody" + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "description": "The node ID", + "type": "string", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + }, + "text/plain": { + "schema": { + "description": "The node ID", + "type": "string", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + } + }, + "id": "engine-1.56-2e0d7636241f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/responses/200/content" + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "description": "The node ID", + "type": "string", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + }, + "id": "engine-1.56-7698f92a8a75", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-347947b1e0ec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/responses/400/content" + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d62d85258f45", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-49e5da6d9092", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-536900541795", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-474df7c99d8a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-358ea5c9bff2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "title": "SwarmJoinRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP). This is\nrequired for joining a swarm. If the port number is omitted,\nthe default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "RemoteAddrs": { + "description": "Addresses of manager nodes already participating in the swarm.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "JoinToken": { + "description": "Secret token for joining this swarm.", + "type": "string" + } + }, + "required": [ + "ListenAddr", + "RemoteAddrs", + "JoinToken" + ], + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathAddr": "192.168.1.1", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + ], + "id": "engine-1.56-981ce3c8edd7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmJoinRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP). This is\nrequired for joining a swarm. If the port number is omitted,\nthe default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "RemoteAddrs": { + "description": "Addresses of manager nodes already participating in the swarm.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "JoinToken": { + "description": "Secret token for joining this swarm.", + "type": "string" + } + }, + "required": [ + "ListenAddr", + "RemoteAddrs", + "JoinToken" + ], + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathAddr": "192.168.1.1", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SwarmJoinRequest", + "properties": { + "ListenAddr": { + "description": "Listen address used for inter-manager communication if the node\ngets promoted to manager, as well as determining the networking\ninterface used for the VXLAN Tunnel Endpoint (VTEP). This is\nrequired for joining a swarm. If the port number is omitted,\nthe default swarm listening port is used.\n", + "type": "string" + }, + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This\ncan either be an address/port combination in the form\n`192.168.1.1:4567`, or an interface followed by a port number,\nlike `eth0:4567`. If the port number is omitted, the port\nnumber from the listen address is used. If `AdvertiseAddr` is\nnot specified, it will be automatically detected when possible.\n", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format:\n``), for example, `192.168.1.1`, or an interface,\nlike `eth0`. If `DataPathAddr` is unspecified, the same address\nas `AdvertiseAddr` is used.\n\nThe `DataPathAddr` specifies the address that global scope\nnetwork drivers will publish towards other nodes in order to\nreach the containers running on this node. Using this parameter\nit is possible to separate the container data traffic from the\nmanagement traffic of the cluster.\n", + "type": "string" + }, + "RemoteAddrs": { + "description": "Addresses of manager nodes already participating in the swarm.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "JoinToken": { + "description": "Secret token for joining this swarm.", + "type": "string" + } + }, + "required": [ + "ListenAddr", + "RemoteAddrs", + "JoinToken" + ], + "example": { + "ListenAddr": "0.0.0.0:2377", + "AdvertiseAddr": "192.168.1.1:2377", + "DataPathAddr": "192.168.1.1", + "RemoteAddrs": [ + "node1:2377" + ], + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + } + } + } + }, + "required": true + }, + "id": "engine-1.56-d4953a0f7ab4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1join/post/requestBody" + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-39637cbe7b1a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1join/post/responses/400/content" + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-a9930fe02ae8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-ca48a29e87e9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1join/post/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b2cc469c09f2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-312f57da12b4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1join/post/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-b0d96528ad39", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1leave/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "force", + "description": "Force leave swarm, even if this is the last manager or that it will\nbreak the cluster.\n", + "in": "query", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "force", + "description": "Force leave swarm, even if this is the last manager or that it will\nbreak the cluster.\n", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-5deeedc58e9e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1leave/post/parameters", + "destinationPointer": "/paths/~1swarm~1leave/post/parameters" + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-f6e643764ff8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1leave/post/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-f3af3e9f796a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1leave/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-6808c6e9cfa0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1leave/post/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-ff90eaa53cf0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1leave/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlock/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-baa1430bf5e1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlock/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlock/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "title": "SwarmUnlockRequest", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + ], + "id": "engine-1.56-988e9d13d57d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlock/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlock/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-068b7e2375cf", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlock/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlock/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "SwarmUnlockRequest", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "required": true + }, + "id": "engine-1.56-235d481229c4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlock/post/requestBody" + }, + { + "pointer": "/paths/~1swarm~1unlock/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-7f05cb7c7428", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlock/post/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1unlock/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-1a5654d02cca", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlock/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlock/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c2491baa8316", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlock/post/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1unlock/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-928354728a80", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlock/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-8040e0af80d4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "UnlockKeyResponse", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "UnlockKeyResponse", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + } + } + }, + "id": "engine-1.56-ab16f847b58a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlockkey/get/responses/200/content" + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "UnlockKeyResponse", + "properties": { + "UnlockKey": { + "description": "The swarm's unlock key.", + "type": "string" + } + }, + "example": { + "UnlockKey": "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + } + }, + "id": "engine-1.56-8a118707b47d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-af860c07aa88", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlockkey/get/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-1396639c2cfa", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-17a82fda405c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlockkey/get/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-0660c8e4c007", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SwarmSpec" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is\nrequired to avoid conflicting writes.\n", + "type": "integer", + "format": "int64", + "required": true + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "type": "boolean", + "default": false + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "type": "boolean", + "default": false + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "version", + "in": "query", + "description": "The version number of the swarm object being updated. This is\nrequired to avoid conflicting writes.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "rotateWorkerToken", + "in": "query", + "description": "Rotate the worker join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerToken", + "in": "query", + "description": "Rotate the manager join token.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "rotateManagerUnlockKey", + "in": "query", + "description": "Rotate the manager unlock key.", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-f358e50a8519", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/parameters", + "destinationPointer": "/paths/~1swarm~1update/post/parameters" + }, + { + "pointer": "/paths/~1swarm~1update/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SwarmSpec" + } + } + }, + "required": true + }, + "id": "engine-1.56-d33628dbb0c6", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1update/post/requestBody" + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-46f67082c8d4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1update/post/responses/400/content" + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-3320f99da205", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-29ca24a58043", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1update/post/responses/500/content" + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-356d9fe088e2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-742591ba9f37", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1update/post/responses/503/content" + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-6e0991e98961", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1system~1df/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "type", + "in": "query", + "description": "Object types, for which to compute and return data.\n", + "type": "array", + "collectionFormat": "multi", + "items": { + "type": "string", + "enum": [ + "container", + "image", + "volume", + "build-cache" + ] + } + }, + { + "name": "verbose", + "in": "query", + "description": "Show detailed information on space usage.\n", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "type", + "in": "query", + "description": "Object types, for which to compute and return data.\n", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "container", + "image", + "volume", + "build-cache" + ] + } + } + }, + { + "name": "verbose", + "in": "query", + "description": "Show detailed information on space usage.\n", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-b2ee059afd2e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1system~1df/get/parameters", + "destinationPointer": "/paths/~1system~1df/get/parameters" + }, + { + "pointer": "/paths/~1system~1df/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "SystemDataUsageResponse", + "properties": { + "ImageUsage": { + "$ref": "#/components/schemas/ImagesDiskUsage" + }, + "ContainerUsage": { + "$ref": "#/components/schemas/ContainersDiskUsage" + }, + "VolumeUsage": { + "$ref": "#/components/schemas/VolumesDiskUsage" + }, + "BuildCacheUsage": { + "$ref": "#/components/schemas/BuildCacheDiskUsage" + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "title": "SystemDataUsageResponse", + "properties": { + "ImageUsage": { + "$ref": "#/components/schemas/ImagesDiskUsage" + }, + "ContainerUsage": { + "$ref": "#/components/schemas/ContainersDiskUsage" + }, + "VolumeUsage": { + "$ref": "#/components/schemas/VolumesDiskUsage" + }, + "BuildCacheUsage": { + "$ref": "#/components/schemas/BuildCacheDiskUsage" + } + } + } + } + }, + "id": "engine-1.56-88940587faff", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1system~1df/get/responses/200/content" + }, + { + "pointer": "/paths/~1system~1df/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "SystemDataUsageResponse", + "properties": { + "ImageUsage": { + "$ref": "#/definitions/ImagesDiskUsage" + }, + "ContainerUsage": { + "$ref": "#/definitions/ContainersDiskUsage" + }, + "VolumeUsage": { + "$ref": "#/definitions/VolumesDiskUsage" + }, + "BuildCacheUsage": { + "$ref": "#/definitions/BuildCacheDiskUsage" + } + } + }, + "id": "engine-1.56-21ff2732699d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1system~1df/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1system~1df/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-d0724d27a0dd", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1system~1df/get/responses/500/content" + }, + { + "pointer": "/paths/~1system~1df/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-0c517dfa8923", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1system~1df/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the tasks list.\n\nAvailable filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the tasks list.\n\nAvailable filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=`\n- `label=key` or `label=\"key=value\"`\n- `name=`\n- `node=`\n- `service=`\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-888057e6250a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks/get/parameters", + "destinationPointer": "/paths/~1tasks/get/parameters" + }, + { + "pointer": "/paths/~1tasks/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-8490823b1b3a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Task" + }, + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ] + } + } + }, + "id": "engine-1.56-e435d3d376d3", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks/get/responses/200/content" + }, + { + "pointer": "/paths/~1tasks/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "array", + "items": { + "$ref": "#/definitions/Task" + }, + "example": [ + { + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "Version": { + "Index": 71 + }, + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:31.290032978Z", + "State": "running", + "Message": "started", + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + } + }, + "DesiredState": "running", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.10/16" + ] + } + ] + }, + { + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Version": { + "Index": 30 + }, + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Name": "hopeful_cori", + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "Status": { + "Timestamp": "2016-06-07T21:07:30.202183143Z", + "State": "shutdown", + "Message": "shutdown", + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + } + }, + "DesiredState": "shutdown", + "NetworksAttachments": [ + { + "Network": { + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "Version": { + "Index": 18 + }, + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Spec": { + "Name": "ingress", + "Labels": { + "com.docker.swarm.internal": "true" + }, + "DriverConfiguration": {}, + "IPAMOptions": { + "Driver": {}, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "IPAMOptions": { + "Driver": { + "Name": "default" + }, + "Configs": [ + { + "Subnet": "10.255.0.0/16", + "Gateway": "10.255.0.1" + } + ] + } + }, + "Addresses": [ + "10.255.0.5/16" + ] + } + ] + } + ] + }, + "id": "engine-1.56-655f2acf6294", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-591d0154c32d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks/get/responses/500/content" + }, + { + "pointer": "/paths/~1tasks/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-8b77e28d9960", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-f2af1e50428f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks/get/responses/503/content" + }, + { + "pointer": "/paths/~1tasks/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-bebf93382687", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "type": "string" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "description": "ID of the task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-51aa5dcff183", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/parameters", + "destinationPointer": "/paths/~1tasks~1{id}/get/parameters" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-f6035b5ef5d2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + }, + "id": "engine-1.56-afd671beb466", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}/get/responses/200/content" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Task" + }, + "id": "engine-1.56-fe521bfb13a1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-c6deb209c7a9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}/get/responses/404/content" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-ea5f31687b5a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-5ba47f770e71", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}/get/responses/500/content" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-76fbb92dd154", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-f8e3a06ce56f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}/get/responses/503/content" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-d35602c73cc7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the task", + "type": "string" + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "type": "boolean", + "default": false + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "type": "boolean", + "default": false + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "type": "boolean", + "default": false + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "type": "boolean", + "default": false + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "type": "integer", + "default": 0 + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "type": "boolean", + "default": false + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "type": "string", + "default": "all" + } + ], + "after": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "ID of the task", + "schema": { + "type": "string" + } + }, + { + "name": "details", + "in": "query", + "description": "Show task context and extra details provided to logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "follow", + "in": "query", + "description": "Keep connection after returning logs.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stdout", + "in": "query", + "description": "Return logs from `stdout`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "stderr", + "in": "query", + "description": "Return logs from `stderr`", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "since", + "in": "query", + "description": "Only return logs since this time, as a UNIX timestamp", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "name": "timestamps", + "in": "query", + "description": "Add timestamps to every log line", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "tail", + "in": "query", + "description": "Only return this number of log lines from the end of the logs.\nSpecify as an integer or `all` to output all log lines.\n", + "schema": { + "type": "string", + "default": "all" + } + } + ], + "id": "engine-1.56-e2d18794d6f2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/parameters", + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/parameters" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/vnd.docker.raw-stream", + "application/vnd.docker.multiplexed-stream" + ], + "id": "engine-1.56-fe6b994864b7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "id": "engine-1.56-a5871e79f30a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/content" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "string", + "format": "binary" + }, + "id": "engine-1.56-246071b6f050", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/json": { + "examples": { + "response": { + "value": { + "message": "No such task: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-831a0edc092e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/content" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/examples", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "message": "No such task: c2ada9df5af8" + } + }, + "id": "engine-1.56-4d93d78f72ba", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/examples", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-bc44f287ab17", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-aa6b4f337a68", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-4f262bc3ca8e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/vnd.docker.raw-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "application/vnd.docker.multiplexed-stream": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-1e7e5dcfa087", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-9fbb4931764f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1version/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-8a86288fc4f5", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1version/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1version/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemVersion" + } + } + }, + "id": "engine-1.56-03ed4cd77671", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1version/get/responses/200/content" + }, + { + "pointer": "/paths/~1version/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/SystemVersion" + }, + "id": "engine-1.56-0e7a1c2fe46f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1version/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1version/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-18b0539f54eb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1version/get/responses/500/content" + }, + { + "pointer": "/paths/~1version/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-a50b2fffeaf0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1version/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "type": "string", + "format": "json" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=` Matches volumes based on their driver.\n- `label=` or `label=:` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=` Matches all or part of a volume name.\n", + "schema": { + "type": "string", + "format": "json" + } + } + ], + "id": "engine-1.56-78c41a701d66", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes/get/parameters", + "destinationPointer": "/paths/~1volumes/get/parameters" + }, + { + "pointer": "/paths/~1volumes/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-03d039f7cda9", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeListResponse" + } + } + }, + "id": "engine-1.56-25b10f6ea781", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes/get/responses/200/content" + }, + { + "pointer": "/paths/~1volumes/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/VolumeListResponse" + }, + "id": "engine-1.56-5f2de8de3ad1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-dc2ad7a0c03d", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes/get/responses/500/content" + }, + { + "pointer": "/paths/~1volumes/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-fa650247ed6c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1create/post/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-0ae8d7659a9a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1create/post/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1create/post/parameters", + "beforePresent": true, + "afterPresent": false, + "before": [ + { + "name": "volumeConfig", + "in": "body", + "required": true, + "description": "Volume configuration", + "schema": { + "$ref": "#/definitions/VolumeCreateRequest" + } + } + ], + "id": "engine-1.56-7df5fc62b84f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1create/post/parameters", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1create/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-c0224404e700", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1create/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1create/post/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VolumeCreateRequest" + } + } + }, + "description": "Volume configuration", + "required": true + }, + "id": "engine-1.56-7fce7a7f1399", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1create/post/requestBody" + }, + { + "pointer": "/paths/~1volumes~1create/post/responses/201/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + }, + "id": "engine-1.56-4e61eaaa46cb", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1create/post/responses/201/content" + }, + { + "pointer": "/paths/~1volumes~1create/post/responses/201/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Volume" + }, + "id": "engine-1.56-7ea733aec38c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1create/post/responses/201/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1create/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-f0b62954042c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1create/post/responses/500/content" + }, + { + "pointer": "/paths/~1volumes~1create/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-32c1aa492964", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1create/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1prune/post/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n- `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.\n", + "type": "string" + } + ], + "after": [ + { + "name": "filters", + "in": "query", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n- `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.\n", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-ba84a3e5a399", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1prune/post/parameters", + "destinationPointer": "/paths/~1volumes~1prune/post/parameters" + }, + { + "pointer": "/paths/~1volumes~1prune/post/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-72cd3e597e60", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1prune/post/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1prune/post/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "type": "object", + "title": "VolumePruneResponse", + "properties": { + "VolumesDeleted": { + "description": "Volumes that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "id": "engine-1.56-4ab31f3ecb93", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1prune/post/responses/200/content" + }, + { + "pointer": "/paths/~1volumes~1prune/post/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "type": "object", + "title": "VolumePruneResponse", + "properties": { + "VolumesDeleted": { + "description": "Volumes that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "id": "engine-1.56-89406770d489", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1prune/post/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1prune/post/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-242e098e8d59", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1prune/post/responses/500/content" + }, + { + "pointer": "/paths/~1volumes~1prune/post/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-9b7b9ad35090", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1prune/post/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "type": "string" + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "type": "boolean", + "default": false + } + ], + "after": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "description": "Force the removal of the volume", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "id": "engine-1.56-aff75b21bef8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/parameters", + "destinationPointer": "/paths/~1volumes~1{name}/delete/parameters" + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-7a1201de706b", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/delete/responses/404/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-87dd624a5f93", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/409/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-171e102f8d60", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/delete/responses/409/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/409/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5167074c00a0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/409/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-06da9d20d06f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/delete/responses/500/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-22b656919f73", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/get/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "type": "string" + } + ], + "after": [ + { + "name": "name", + "in": "path", + "required": true, + "description": "Volume name or ID", + "schema": { + "type": "string" + } + } + ], + "id": "engine-1.56-357a4d8a3139", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/get/parameters", + "destinationPointer": "/paths/~1volumes~1{name}/get/parameters" + }, + { + "pointer": "/paths/~1volumes~1{name}/get/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-1cab3812b6f8", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/get/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Volume" + } + } + }, + "id": "engine-1.56-2ab1bffea9b2", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/get/responses/200/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/200/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/Volume" + }, + "id": "engine-1.56-637a2c94457f", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/get/responses/200/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-215c1af1e1f0", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/get/responses/404/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-38e4992a194a", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/get/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-390946562ffc", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/get/responses/500/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/get/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-27c650831a50", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/get/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/consumes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-b588d89962c4", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/consumes", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/parameters", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "name", + "in": "path", + "description": "The name or ID of the volume", + "type": "string", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "description": "Volume configuration", + "properties": { + "Spec": { + "$ref": "#/definitions/ClusterVolumeSpec" + } + } + }, + "description": "The spec of the volume to update. Currently, only Availability may\nchange. All other fields must remain unchanged.\n" + }, + { + "name": "version", + "in": "query", + "description": "The version number of the volume being updated. This is required to\navoid conflicting writes. Found in the volume's `ClusterVolume`\nfield.\n", + "type": "integer", + "format": "int64", + "required": true + } + ], + "after": [ + { + "name": "name", + "in": "path", + "description": "The name or ID of the volume", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "The version number of the volume being updated. This is required to\navoid conflicting writes. Found in the volume's `ClusterVolume`\nfield.\n", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "id": "engine-1.56-a1f4a68e9efe", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/parameters", + "destinationPointer": "/paths/~1volumes~1{name}/put/parameters" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json" + ], + "id": "engine-1.56-a7af4c539d83", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/produces", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/requestBody", + "beforePresent": false, + "afterPresent": true, + "after": { + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Volume configuration", + "properties": { + "Spec": { + "$ref": "#/components/schemas/ClusterVolumeSpec" + } + } + } + } + }, + "description": "The spec of the volume to update. Currently, only Availability may\nchange. All other fields must remain unchanged.\n" + }, + "id": "engine-1.56-a3f49c1ad7e1", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/requestBody" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/400/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-d118b3689b52", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/responses/400/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/400/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-48d6ff5de219", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/responses/400/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/404/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-a23933c3d233", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/responses/404/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/404/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-292c0e70e30e", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/responses/404/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/500/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-43c9f572f90c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/responses/500/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/500/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-5b16eed1fac7", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/responses/500/schema", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/503/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-55601af135ec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/responses/503/content" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/responses/503/schema", + "beforePresent": true, + "afterPresent": false, + "before": { + "$ref": "#/definitions/ErrorResponse" + }, + "id": "engine-1.56-aa5ee3d65379", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/put/responses/503/schema", + "destinationPointer": null + }, + { + "pointer": "/produces", + "beforePresent": true, + "afterPresent": false, + "before": [ + "application/json", + "text/plain" + ], + "id": "engine-1.56-a84aef967d4c", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/produces", + "destinationPointer": null + }, + { + "pointer": "/schemes", + "beforePresent": true, + "afterPresent": false, + "before": [ + "http", + "https" + ], + "id": "engine-1.56-2250e1953585", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/schemes", + "destinationPointer": null + }, + { + "pointer": "/servers", + "beforePresent": false, + "afterPresent": true, + "after": [ + { + "url": "/v1.56" + } + ], + "id": "engine-1.56-ab7cdc6d6aad", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/servers" + }, + { + "pointer": "/swagger", + "beforePresent": true, + "afterPresent": false, + "before": "2.0", + "id": "engine-1.56-6ac37e324fec", + "stage": "swagger-to-oas3", + "classification": "mechanical conversion", + "rationale": "Pinned converter with refSiblings=allOf; compare every moved field and review Engine generation semantics.", + "evidence": "swagger2openapi 7.0.8", + "owner": "moby/moby", + "sourcePointer": "/swagger", + "destinationPointer": null + }, + { + "pointer": "/jsonSchemaDialect", + "beforePresent": false, + "afterPresent": true, + "after": "https://spec.openapis.org/oas/3.1/dialect/base", + "id": "engine-1.56-03ee85af235e", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/jsonSchemaDialect" + }, + { + "pointer": "/openapi", + "beforePresent": true, + "afterPresent": true, + "before": "3.0.0", + "after": "3.2.0", + "id": "engine-1.56-71377657b6ae", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "moby/moby", + "sourcePointer": "/openapi", + "destinationPointer": "/openapi" + }, + { + "pointer": "/components/schemas/AttestationStatement/properties/Statement/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-4f13ee1f0b16", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/AttestationStatement/properties/Statement/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/AttestationStatement/properties/Statement/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-15d13a7db649", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/AttestationStatement/properties/Statement/type", + "destinationPointer": "/components/schemas/AttestationStatement/properties/Statement/type" + }, + { + "pointer": "/components/schemas/AuthResponse/properties/IdentityToken/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-131411ec6727", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/AuthResponse/properties/IdentityToken/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/AuthResponse/properties/Status/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-cc391c353ba9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/AuthResponse/properties/Status/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/BuildCache/properties/LastUsedAt/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-a0b9f800ca67", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/BuildCache/properties/LastUsedAt/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/BuildCache/properties/LastUsedAt/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-eac32e0891ef", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/BuildCache/properties/LastUsedAt/type", + "destinationPointer": "/components/schemas/BuildCache/properties/LastUsedAt/type" + }, + { + "pointer": "/components/schemas/BuildCache/properties/Parents/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-9c76e2fbf8f4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/BuildCache/properties/Parents/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/BuildCache/properties/Parents/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-21e1a5c5ebcb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/BuildCache/properties/Parents/type", + "destinationPointer": "/components/schemas/BuildCache/properties/Parents/type" + }, + { + "pointer": "/components/schemas/ChangeType/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-a588dfc8ae07", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ChangeType/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ClusterInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-fd3264236968", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ClusterInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ClusterInfo/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-e691663d5d85", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ClusterInfo/type", + "destinationPointer": "/components/schemas/ClusterInfo/type" + }, + { + "pointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Availability/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-d44eceffb2ed", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Availability/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Scope/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-e7100df1ab24", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Scope/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Sharing/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-4734e5ee4f89", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ClusterVolumeSpec/properties/AccessMode/properties/Sharing/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ConfigReference/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-7b78dc24e1c7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ConfigReference/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStatEntry/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-b3e59fd3c36f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStatEntry/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStatEntry/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-cb66c51d4d4f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStatEntry/type", + "destinationPointer": "/components/schemas/ContainerBlkioStatEntry/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-2463575d1373", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_merged_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-b13f621f9d0e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_merged_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_merged_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-9918d41a6336", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_merged_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_merged_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_queue_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-cc2a321331fe", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_queue_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_queue_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-4e3fb4d3e82d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_queue_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_queue_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_service_time_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-4e694aa40186", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_service_time_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_service_time_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-6d5d57f93cee", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_service_time_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_service_time_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_serviced_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-b79761ed5e36", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_serviced_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_serviced_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-ab5146b49c41", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_serviced_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_serviced_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_time_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-14daab7c99c8", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_time_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_time_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-8acf464c709d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_time_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_time_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_wait_time_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-ad304d535f23", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_wait_time_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/io_wait_time_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-4c112b3f2994", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/io_wait_time_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/io_wait_time_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/sectors_recursive/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-c174fa816be0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/sectors_recursive/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/properties/sectors_recursive/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-618613a35036", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/properties/sectors_recursive/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/properties/sectors_recursive/type" + }, + { + "pointer": "/components/schemas/ContainerBlkioStats/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-e11373dfdef0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerBlkioStats/type", + "destinationPointer": "/components/schemas/ContainerBlkioStats/type" + }, + { + "pointer": "/components/schemas/ContainerCPUStats/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-a3ddd0ec2bd0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCPUStats/properties/online_cpus/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-c16c1c5b0566", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/properties/online_cpus/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCPUStats/properties/online_cpus/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-ac0676e38fa5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/properties/online_cpus/type", + "destinationPointer": "/components/schemas/ContainerCPUStats/properties/online_cpus/type" + }, + { + "pointer": "/components/schemas/ContainerCPUStats/properties/system_cpu_usage/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-ee6850e80c20", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/properties/system_cpu_usage/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCPUStats/properties/system_cpu_usage/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-33629b0c660e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/properties/system_cpu_usage/type", + "destinationPointer": "/components/schemas/ContainerCPUStats/properties/system_cpu_usage/type" + }, + { + "pointer": "/components/schemas/ContainerCPUStats/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-5014c5543e4b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUStats/type", + "destinationPointer": "/components/schemas/ContainerCPUStats/type" + }, + { + "pointer": "/components/schemas/ContainerCPUUsage/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-c4a8b13e1d42", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUUsage/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCPUUsage/properties/percpu_usage/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-79b9617c9bb6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUUsage/properties/percpu_usage/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCPUUsage/properties/percpu_usage/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-7c8818603e15", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUUsage/properties/percpu_usage/type", + "destinationPointer": "/components/schemas/ContainerCPUUsage/properties/percpu_usage/type" + }, + { + "pointer": "/components/schemas/ContainerCPUUsage/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-e9f4a1e0e139", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCPUUsage/type", + "destinationPointer": "/components/schemas/ContainerCPUUsage/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/ArgsEscaped/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-592fbb583d2c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/ArgsEscaped/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/ArgsEscaped/type", + "beforePresent": true, + "afterPresent": true, + "before": "boolean", + "after": [ + "boolean", + "null" + ], + "id": "engine-1.56-9a7a5d95e49c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/ArgsEscaped/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/ArgsEscaped/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/ExposedPorts/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-5ecdead7fd99", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/ExposedPorts/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/ExposedPorts/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-efcb921aa113", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/ExposedPorts/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/ExposedPorts/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/NetworkDisabled/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-e0af6aa6a4a8", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/NetworkDisabled/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/NetworkDisabled/type", + "beforePresent": true, + "afterPresent": true, + "before": "boolean", + "after": [ + "boolean", + "null" + ], + "id": "engine-1.56-17f2d7e45402", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/NetworkDisabled/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/NetworkDisabled/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/OnBuild/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-96c9825a132c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/OnBuild/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/OnBuild/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-0f31462c8250", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/OnBuild/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/OnBuild/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/Shell/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-498b9be87873", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/Shell/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/Shell/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-2ce9526549f4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/Shell/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/Shell/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/StopSignal/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-06093d6132d3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/StopSignal/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/StopSignal/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-24db05e34722", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/StopSignal/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/StopSignal/type" + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/StopTimeout/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-23ce32633ea3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/StopTimeout/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerConfig/properties/StopTimeout/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-451e9c96536e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerConfig/properties/StopTimeout/type", + "destinationPointer": "/components/schemas/ContainerConfig/properties/StopTimeout/type" + }, + { + "pointer": "/components/schemas/ContainerCreateResponse/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-7c72e912457b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCreateResponse/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerCreateResponse/properties/Warnings/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-e64225cfc759", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerCreateResponse/properties/Warnings/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/Created/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-45c77d02e456", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/Created/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/Created/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-ee5c785dd94d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/Created/type", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/Created/type" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/ExecIDs/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-0cb2940f3834", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/ExecIDs/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/ExecIDs/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-87bc140da83c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/ExecIDs/type", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/ExecIDs/type" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/LogPath/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-09725a9d1943", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/LogPath/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/LogPath/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-50d107a3e4b6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/LogPath/type", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/LogPath/type" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-678a51418554", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-becf2480d045", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/type", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/SizeRootFs/type" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-1390727ff1c1", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-fd4406842a71", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/type", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/SizeRw/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/commitbytes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-33e58da72dff", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/commitbytes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/commitbytes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-04cec05b5edc", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/commitbytes/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/commitbytes/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/commitpeakbytes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-d1e6444445ec", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/commitpeakbytes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/commitpeakbytes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-14bd3659ac59", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/commitpeakbytes/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/commitpeakbytes/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/failcnt/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-7a68942beac0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/failcnt/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/failcnt/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-1d60fc155a3d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/failcnt/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/failcnt/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/limit/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-807ed2dc7b5a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/limit/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/limit/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-898333d69999", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/limit/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/limit/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/max_usage/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-f47d5de647ee", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/max_usage/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/max_usage/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-dea0d47dd1ca", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/max_usage/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/max_usage/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/privateworkingset/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-7cf91752a4a6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/privateworkingset/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/privateworkingset/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-927187654df2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/privateworkingset/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/privateworkingset/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/stats/additionalProperties/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-052349c7c369", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/stats/additionalProperties/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/stats/additionalProperties/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-039ecd94c812", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/stats/additionalProperties/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/stats/additionalProperties/type" + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/usage/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-a9d139c8f417", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/usage/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerMemoryStats/properties/usage/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-e0cbe236fdf4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerMemoryStats/properties/usage/type", + "destinationPointer": "/components/schemas/ContainerMemoryStats/properties/usage/type" + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-3a8d66729a52", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/properties/endpoint_id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-36f0d4c9f747", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/properties/endpoint_id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/properties/endpoint_id/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-2500126386bb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/properties/endpoint_id/type", + "destinationPointer": "/components/schemas/ContainerNetworkStats/properties/endpoint_id/type" + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/properties/instance_id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-ea6a862e6e1a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/properties/instance_id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/properties/instance_id/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-5e4267c26eb6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/properties/instance_id/type", + "destinationPointer": "/components/schemas/ContainerNetworkStats/properties/instance_id/type" + }, + { + "pointer": "/components/schemas/ContainerNetworkStats/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-3ba852c8ef0b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerNetworkStats/type", + "destinationPointer": "/components/schemas/ContainerNetworkStats/type" + }, + { + "pointer": "/components/schemas/ContainerPidsStats/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-4ff586080dc9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerPidsStats/properties/current/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-7f2d50b25730", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/properties/current/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerPidsStats/properties/current/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-d14d22186d67", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/properties/current/type", + "destinationPointer": "/components/schemas/ContainerPidsStats/properties/current/type" + }, + { + "pointer": "/components/schemas/ContainerPidsStats/properties/limit/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-b48cf618184c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/properties/limit/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerPidsStats/properties/limit/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-60e398415998", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/properties/limit/type", + "destinationPointer": "/components/schemas/ContainerPidsStats/properties/limit/type" + }, + { + "pointer": "/components/schemas/ContainerPidsStats/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-8f8bbe40ea18", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerPidsStats/type", + "destinationPointer": "/components/schemas/ContainerPidsStats/type" + }, + { + "pointer": "/components/schemas/ContainerState/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-c3e86a002c49", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerState/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerState/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-96532db70aa3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerState/type", + "destinationPointer": "/components/schemas/ContainerState/type" + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-9008d205c3bb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/id/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-5a7dd3169eed", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/id/type", + "destinationPointer": "/components/schemas/ContainerStatsResponse/properties/id/type" + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-adb48e61def7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/name/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-d353d1db6561", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/name/type", + "destinationPointer": "/components/schemas/ContainerStatsResponse/properties/name/type" + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/networks/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-2b935ff661d3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/networks/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/os_type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-910750e7a437", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/os_type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStatsResponse/properties/os_type/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-ac82242ff043", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStatsResponse/properties/os_type/type", + "destinationPointer": "/components/schemas/ContainerStatsResponse/properties/os_type/type" + }, + { + "pointer": "/components/schemas/ContainerStorageStats/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-9af818126c18", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/read_count_normalized/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-7ea2f9229280", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/read_count_normalized/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/read_count_normalized/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-446a8537861b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/read_count_normalized/type", + "destinationPointer": "/components/schemas/ContainerStorageStats/properties/read_count_normalized/type" + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/read_size_bytes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-8fae336f2cc3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/read_size_bytes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/read_size_bytes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-df43a4949fb9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/read_size_bytes/type", + "destinationPointer": "/components/schemas/ContainerStorageStats/properties/read_size_bytes/type" + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/write_count_normalized/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-74a517d26afb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/write_count_normalized/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/write_count_normalized/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-7c0ff34723d7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/write_count_normalized/type", + "destinationPointer": "/components/schemas/ContainerStorageStats/properties/write_count_normalized/type" + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/write_size_bytes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-7ed476fb417a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/write_size_bytes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerStorageStats/properties/write_size_bytes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-e3bc1cc0b2cf", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/properties/write_size_bytes/type", + "destinationPointer": "/components/schemas/ContainerStorageStats/properties/write_size_bytes/type" + }, + { + "pointer": "/components/schemas/ContainerStorageStats/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-316faefeb8ff", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerStorageStats/type", + "destinationPointer": "/components/schemas/ContainerStorageStats/type" + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/HostConfig/properties/Annotations/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-9c934e9e5fd0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/HostConfig/properties/Annotations/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/HostConfig/properties/Annotations/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-b86b14795972", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/HostConfig/properties/Annotations/type", + "destinationPointer": "/components/schemas/ContainerSummary/properties/HostConfig/properties/Annotations/type" + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-96a20dfe695a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-32c658ee4fa2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/type", + "destinationPointer": "/components/schemas/ContainerSummary/properties/SizeRootFs/type" + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/SizeRw/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-f2437f7f8c98", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/SizeRw/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/SizeRw/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-d262c79c9dd5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/SizeRw/type", + "destinationPointer": "/components/schemas/ContainerSummary/properties/SizeRw/type" + }, + { + "pointer": "/components/schemas/ContainerThrottlingData/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-e91529243e1d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerThrottlingData/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerThrottlingData/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-2a914a1e0bae", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerThrottlingData/type", + "destinationPointer": "/components/schemas/ContainerThrottlingData/type" + }, + { + "pointer": "/components/schemas/ContainerWaitResponse/properties/StatusCode/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-71e6c6887590", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerWaitResponse/properties/StatusCode/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerdInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-62fbece6835d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerdInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ContainerdInfo/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-33b39e0f3b82", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerdInfo/type", + "destinationPointer": "/components/schemas/ContainerdInfo/type" + }, + { + "pointer": "/components/schemas/Driver/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-05e774242ba2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Driver/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Driver/properties/Options/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-02ab6be7b3ad", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Driver/properties/Options/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/DriverData/properties/Data/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-99a6b517844f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/DriverData/properties/Data/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/DriverData/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-5ab8732d8bb5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/DriverData/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/EndpointIPAMConfig/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-9be5ceea43ce", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/EndpointIPAMConfig/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/EndpointIPAMConfig/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-8d041ad3df11", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/EndpointIPAMConfig/type", + "destinationPointer": "/components/schemas/EndpointIPAMConfig/type" + }, + { + "pointer": "/components/schemas/EndpointSettings/properties/DriverOpts/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-b7f613d2ced5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/EndpointSettings/properties/DriverOpts/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/EndpointSettings/properties/DriverOpts/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-8e486c093bc3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/EndpointSettings/properties/DriverOpts/type", + "destinationPointer": "/components/schemas/EndpointSettings/properties/DriverOpts/type" + }, + { + "pointer": "/components/schemas/ErrorResponse/properties/message/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-ecc00714fae4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ErrorResponse/properties/message/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/FilesystemChange/properties/Path/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-baf01a01b7c7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/FilesystemChange/properties/Path/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/FirewallInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-4dbc2d40cdc7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/FirewallInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/FirewallInfo/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-5a1bae65f24a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/FirewallInfo/type", + "destinationPointer": "/components/schemas/FirewallInfo/type" + }, + { + "pointer": "/components/schemas/Health/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-3fa4c1e7edd3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Health/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Health/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-966a69c28bbd", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Health/type", + "destinationPointer": "/components/schemas/Health/type" + }, + { + "pointer": "/components/schemas/HealthcheckResult/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-96be2206f530", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/HealthcheckResult/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/HealthcheckResult/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-8ad4874e9700", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/HealthcheckResult/type", + "destinationPointer": "/components/schemas/HealthcheckResult/type" + }, + { + "pointer": "/components/schemas/HostConfig/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written", + "example": "" + }, + "LogConfig": { + "type": "object", + "description": "The logging configuration for this container", + "properties": { + "Type": { + "description": "Name of the logging driver used for the container or \"none\"\nif logging is disabled.", + "type": "string", + "enum": [ + "local", + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "description": "Driver-specific configuration options for the logging driver.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "5", + "max-size": "10m" + } + } + } + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to the container.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "type": "array", + "description": "Initial console size, as an `[height, width]` array.\n", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ], + "nullable": true + }, + "Annotations": { + "type": "object", + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n", + "additionalProperties": { + "type": "string" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "enum": [ + "private", + "host" + ], + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n" + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string", + "format": "ip-address", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n", + "additionalProperties": { + "type": "string" + } + }, + "Tmpfs": { + "type": "object", + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n", + "additionalProperties": { + "type": "string" + } + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "type": "integer", + "format": "int64", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "minimum": 0 + }, + "Sysctls": { + "type": "object", + "description": "A list of kernel parameters (sysctls) to set in the container.\n\nThis field is omitted if not set.", + "additionalProperties": { + "type": "string" + }, + "example": { + "net.ipv4.ip_forward": "1" + }, + "nullable": true + }, + "Runtime": { + "type": "string", + "description": "Runtime to use with this container.", + "nullable": true + }, + "Umask": { + "type": "integer", + "format": "uint32", + "description": "Set the initial umask for a Unix container.\n\nIf omitted, the daemon does not set a umask in the OCI process\nspecification, and the runtime's default behavior applies.\n\nJSON integers are decimal. For example, use `18` for the octal\numask `0022`, and `511` for the octal umask `0777`.", + "nullable": true + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/asound", + "/proc/acpi", + "/proc/kcore", + "/proc/keys", + "/proc/latency_stats", + "/proc/timer_list", + "/proc/timer_stats", + "/proc/sched_debug", + "/proc/scsi", + "/sys/firmware", + "/sys/devices/virtual/powercap" + ] + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/bus", + "/proc/fs", + "/proc/irq", + "/proc/sys", + "/proc/sysrq-trigger" + ] + } + } + } + ], + "after": [ + { + "$ref": "#/components/schemas/Resources" + }, + { + "type": "object", + "properties": { + "Binds": { + "type": "array", + "description": "A list of volume bindings for this container. Each volume binding\nis a string in one of these forms:\n\n- `host-src:container-dest[:options]` to bind-mount a host path\n into the container. Both `host-src`, and `container-dest` must\n be an _absolute_ path.\n- `volume-name:container-dest[:options]` to bind-mount a volume\n managed by a volume driver into the container. `container-dest`\n must be an _absolute_ path.\n\n`options` is an optional, comma-delimited list of:\n\n- `nocopy` disables automatic copying of data from the container\n path to the volume. The `nocopy` flag only applies to named volumes.\n- `[ro|rw]` mounts a volume read-only or read-write, respectively.\n If omitted or set to `rw`, volumes are mounted read-write.\n- `[z|Z]` applies SELinux labels to allow or deny multiple containers\n to read and write to the same volume.\n - `z`: a _shared_ content label is applied to the content. This\n label indicates that multiple containers can share the volume\n content, for both reading and writing.\n - `Z`: a _private unshared_ label is applied to the content.\n This label indicates that only the current container can use\n a private volume. Labeling systems such as SELinux require\n proper labels to be placed on volume content that is mounted\n into a container. Without a label, the security system can\n prevent a container's processes from using the content. By\n default, the labels set by the host operating system are not\n modified.\n- `[[r]shared|[r]slave|[r]private]` specifies mount\n [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n This only applies to bind-mounted volumes, not internal volumes\n or named volumes. Mount propagation requires the source mount\n point (the location where the source directory is mounted in the\n host operating system) to have the correct propagation properties.\n For shared volumes, the source mount point must be set to `shared`.\n For slave volumes, the mount must be set to either `shared` or\n `slave`.\n", + "items": { + "type": "string" + } + }, + "ContainerIDFile": { + "type": "string", + "description": "Path to a file where the container ID is written", + "example": "" + }, + "LogConfig": { + "type": "object", + "description": "The logging configuration for this container", + "properties": { + "Type": { + "description": "Name of the logging driver used for the container or \"none\"\nif logging is disabled.", + "type": "string", + "enum": [ + "local", + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + }, + "Config": { + "description": "Driver-specific configuration options for the logging driver.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "5", + "max-size": "10m" + } + } + } + }, + "NetworkMode": { + "type": "string", + "description": "Network mode to use for this container. Supported standard values\nare: `bridge`, `host`, `none`, and `container:`. Any\nother value is taken as a custom network's name to which this\ncontainer should connect to.\n" + }, + "PortBindings": { + "$ref": "#/components/schemas/PortMap" + }, + "RestartPolicy": { + "$ref": "#/components/schemas/RestartPolicy" + }, + "AutoRemove": { + "type": "boolean", + "description": "Automatically remove the container when the container's process\nexits. This has no effect if `RestartPolicy` is set.\n" + }, + "VolumeDriver": { + "type": "string", + "description": "Driver that this container uses to mount volumes." + }, + "VolumesFrom": { + "type": "array", + "description": "A list of volumes to inherit from another container, specified in\nthe form `[:]`.\n", + "items": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to the container.\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mount" + } + }, + "ConsoleSize": { + "type": [ + "array", + "null" + ], + "description": "Initial console size, as an `[height, width]` array.\n", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "integer", + "minimum": 0 + }, + "example": [ + 80, + 64 + ] + }, + "Annotations": { + "type": "object", + "description": "Arbitrary non-identifying metadata attached to container and\nprovided to the runtime when the container is started.\n", + "additionalProperties": { + "type": "string" + } + }, + "CapAdd": { + "type": "array", + "description": "A list of kernel capabilities to add to the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CapDrop": { + "type": "array", + "description": "A list of kernel capabilities to drop from the container. Conflicts\nwith option 'Capabilities'.\n", + "items": { + "type": "string" + } + }, + "CgroupnsMode": { + "type": "string", + "enum": [ + "private", + "host" + ], + "description": "cgroup namespace mode for the container. Possible values are:\n\n- `\"private\"`: the container runs in its own private cgroup namespace\n- `\"host\"`: use the host system's cgroup namespace\n\nIf not specified, the daemon default is used, which can either be `\"private\"`\nor `\"host\"`, depending on daemon version, kernel support and configuration.\n" + }, + "Dns": { + "type": "array", + "description": "A list of DNS servers for the container to use.", + "items": { + "type": "string", + "format": "ip-address", + "x-go-type": { + "type": "Addr", + "import": { + "package": "net/netip" + } + } + } + }, + "DnsOptions": { + "type": "array", + "description": "A list of DNS options.", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "type": "array", + "description": "A list of DNS search domains.", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "type": "array", + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts`\nfile. Specified in the form `[\"hostname:IP\"]`.\n", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "type": "array", + "description": "A list of additional groups that the container process will run as.\n", + "items": { + "type": "string" + } + }, + "IpcMode": { + "type": "string", + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n" + }, + "Cgroup": { + "type": "string", + "description": "Cgroup to use for the container." + }, + "Links": { + "type": "array", + "description": "A list of links for the container in the form `container_name:alias`.\n", + "items": { + "type": "string" + } + }, + "OomScoreAdj": { + "type": "integer", + "description": "An integer value containing the score given to the container in\norder to tune OOM killer preferences.\n", + "example": 500 + }, + "PidMode": { + "type": "string", + "description": "Set the PID (Process) Namespace mode for the container. It can be\neither:\n\n- `\"container:\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n" + }, + "Privileged": { + "type": "boolean", + "description": "Gives the container full access to the host." + }, + "PublishAllPorts": { + "type": "boolean", + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when\nthe container starts. The allocated port might be changed when\nrestarting the container.\n\nThe port is selected from the ephemeral port range that depends on\nthe kernel. For example, on Linux the range is defined by\n`/proc/sys/net/ipv4/ip_local_port_range`.\n" + }, + "ReadonlyRootfs": { + "type": "boolean", + "description": "Mount the container's root filesystem as read only." + }, + "SecurityOpt": { + "type": "array", + "description": "A list of string values to customize labels for MLS systems, such\nas SELinux.\n", + "items": { + "type": "string" + } + }, + "StorageOpt": { + "type": "object", + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n", + "additionalProperties": { + "type": "string" + } + }, + "Tmpfs": { + "type": "object", + "description": "A map of container directories which should be replaced by tmpfs\nmounts, and their corresponding mount options. For example:\n\n```\n{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n```\n", + "additionalProperties": { + "type": "string" + } + }, + "UTSMode": { + "type": "string", + "description": "UTS namespace to use for the container." + }, + "UsernsMode": { + "type": "string", + "description": "Sets the usernamespace mode for the container when usernamespace\nremapping option is enabled.\n" + }, + "ShmSize": { + "type": "integer", + "format": "int64", + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n", + "minimum": 0 + }, + "Sysctls": { + "type": [ + "object", + "null" + ], + "description": "A list of kernel parameters (sysctls) to set in the container.\n\nThis field is omitted if not set.", + "additionalProperties": { + "type": "string" + }, + "example": { + "net.ipv4.ip_forward": "1" + } + }, + "Runtime": { + "type": [ + "string", + "null" + ], + "description": "Runtime to use with this container." + }, + "Umask": { + "type": [ + "integer", + "null" + ], + "format": "uint32", + "description": "Set the initial umask for a Unix container.\n\nIf omitted, the daemon does not set a umask in the OCI process\nspecification, and the runtime's default behavior applies.\n\nJSON integers are decimal. For example, use `18` for the octal\numask `0022`, and `511` for the octal umask `0777`." + }, + "Isolation": { + "type": "string", + "description": "Isolation technology of the container. (Windows only)\n", + "enum": [ + "default", + "process", + "hyperv", + "" + ] + }, + "MaskedPaths": { + "type": "array", + "description": "The list of paths to be masked inside the container (this overrides\nthe default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/asound", + "/proc/acpi", + "/proc/kcore", + "/proc/keys", + "/proc/latency_stats", + "/proc/timer_list", + "/proc/timer_stats", + "/proc/sched_debug", + "/proc/scsi", + "/sys/firmware", + "/sys/devices/virtual/powercap" + ] + }, + "ReadonlyPaths": { + "type": "array", + "description": "The list of paths to be set as read-only inside the container\n(this overrides the default set of paths).\n", + "items": { + "type": "string" + }, + "example": [ + "/proc/bus", + "/proc/fs", + "/proc/irq", + "/proc/sys", + "/proc/sysrq-trigger" + ] + } + } + } + ], + "id": "engine-1.56-1b0f541ec40d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/HostConfig/allOf", + "destinationPointer": "/components/schemas/HostConfig/allOf" + }, + { + "pointer": "/components/schemas/IDResponse/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-f1a4a2ffc947", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/IDResponse/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/IPAM/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-db3deefd5144", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/IPAM/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/IPAMStatus/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-63dcb09a54a5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/IPAMStatus/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/ArgsEscaped/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-3472c644724f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/ArgsEscaped/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/ArgsEscaped/type", + "beforePresent": true, + "afterPresent": true, + "before": "boolean", + "after": [ + "boolean", + "null" + ], + "id": "engine-1.56-40f8fbf0ab10", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/ArgsEscaped/type", + "destinationPointer": "/components/schemas/ImageConfig/properties/ArgsEscaped/type" + }, + { + "pointer": "/components/schemas/ImageConfig/properties/ExposedPorts/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-6f2215341650", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/ExposedPorts/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/ExposedPorts/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-8d7461f1c448", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/ExposedPorts/type", + "destinationPointer": "/components/schemas/ImageConfig/properties/ExposedPorts/type" + }, + { + "pointer": "/components/schemas/ImageConfig/properties/OnBuild/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-dda051607eb2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/OnBuild/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/OnBuild/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-d8523bcfdf86", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/OnBuild/type", + "destinationPointer": "/components/schemas/ImageConfig/properties/OnBuild/type" + }, + { + "pointer": "/components/schemas/ImageConfig/properties/Shell/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-8dc420945067", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/Shell/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/Shell/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-45cddd70e77b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/Shell/type", + "destinationPointer": "/components/schemas/ImageConfig/properties/Shell/type" + }, + { + "pointer": "/components/schemas/ImageConfig/properties/StopSignal/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-c21b7e064c8e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/StopSignal/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageConfig/properties/StopSignal/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-7e0a1b57f28b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageConfig/properties/StopSignal/type", + "destinationPointer": "/components/schemas/ImageConfig/properties/StopSignal/type" + }, + { + "pointer": "/components/schemas/ImageHistoryResponseItem/properties/Comment/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-ef81019d7434", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageHistoryResponseItem/properties/Comment/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageHistoryResponseItem/properties/Created/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-1da1090749c2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageHistoryResponseItem/properties/Created/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageHistoryResponseItem/properties/CreatedBy/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-369746ed882b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageHistoryResponseItem/properties/CreatedBy/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageHistoryResponseItem/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-90f10d549e34", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageHistoryResponseItem/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageHistoryResponseItem/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-559b652dee7b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageHistoryResponseItem/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Architecture/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-091211193a2f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Architecture/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Author/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-8e95934ae282", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Author/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Author/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-ca914aeac89e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Author/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Author/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Comment/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-30b4eae62a50", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Comment/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Comment/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-6217e9353355", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Comment/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Comment/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Created/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-a67b6e56b2f1", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Created/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Created/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-bbabebb187b5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Created/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Created/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-a5f9d37af98e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Manifests/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-7e3930451689", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Manifests/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Manifests/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-15aeb69a592f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Manifests/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Manifests/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Metadata/properties/LastTagTime/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-9ce66a3ce45e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Metadata/properties/LastTagTime/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Metadata/properties/LastTagTime/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-dbb5dd3d6a8c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Metadata/properties/LastTagTime/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Metadata/properties/LastTagTime/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Os/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-67d5751955de", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Os/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/OsVersion/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-2dd849351f67", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/OsVersion/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/OsVersion/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-9123b00580cf", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/OsVersion/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/OsVersion/type" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/RootFS/properties/Type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-c11d3d4e53d9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/RootFS/properties/Type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-de29fb490fa9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Variant/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-e506122f0b68", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Variant/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Variant/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-0bd1d89eb57b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Variant/type", + "destinationPointer": "/components/schemas/ImageInspect/properties/Variant/type" + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/AttestationData/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-2d40649f97d9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/AttestationData/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/AttestationData/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-34bb91271a18", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/AttestationData/type", + "destinationPointer": "/components/schemas/ImageManifestSummary/properties/AttestationData/type" + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/ImageData/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-7b25cc3cf904", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/ImageData/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/ImageData/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-622720b9aa7c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/ImageData/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/ImageData/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-b4d3b763ee9a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/ImageData/type", + "destinationPointer": "/components/schemas/ImageManifestSummary/properties/ImageData/type" + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-545f29331257", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Containers/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-3f0964c1dbea", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Containers/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Created/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-17bf40bda20a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Created/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-67a4b649d538", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Labels/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-78dbb3636104", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Labels/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Manifests/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-1d22557b268b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Manifests/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/ParentId/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-88b80cb6a9a6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/ParentId/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/RepoDigests/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-6e6c0aac17b4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/RepoDigests/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/RepoTags/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-93bacf602211", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/RepoTags/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/SharedSize/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-ca9792e46f92", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/SharedSize/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-9eabbce1e22a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/IndexInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-1851b0847614", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/IndexInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/IndexInfo/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-d2e5efc0b47c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/IndexInfo/type", + "destinationPointer": "/components/schemas/IndexInfo/type" + }, + { + "pointer": "/components/schemas/ManagerStatus/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-20259d29a84e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ManagerStatus/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ManagerStatus/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-98a57f89466c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ManagerStatus/type", + "destinationPointer": "/components/schemas/ManagerStatus/type" + }, + { + "pointer": "/components/schemas/NRIInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-499fa6db43c3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NRIInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NRIInfo/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-8b8136a2f75d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NRIInfo/type", + "destinationPointer": "/components/schemas/NRIInfo/type" + }, + { + "pointer": "/components/schemas/Network/properties/Attachable/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-c039fd4e6204", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Network/properties/Attachable/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Network/properties/ConfigOnly/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-3d61d1ab8e98", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Network/properties/ConfigOnly/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Network/properties/Ingress/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-c72c5a2d01c4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Network/properties/Ingress/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Network/properties/Internal/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-47253b344cf7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Network/properties/Internal/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkConnectRequest/properties/Container/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-044bd3c97bd6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkConnectRequest/properties/Container/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkCreateResponse/properties/Id/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-b74b3fcb6a52", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkCreateResponse/properties/Id/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkCreateResponse/properties/Warning/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-bc37a5068f05", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkCreateResponse/properties/Warning/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkDisconnectRequest/properties/Container/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-c8f78d632acd", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkDisconnectRequest/properties/Container/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkDisconnectRequest/properties/Force/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-2e6bc6642949", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkDisconnectRequest/properties/Force/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/NetworkTaskInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-a56793c2196f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkTaskInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/annotations/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-ec0cfeded7c8", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/annotations/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/annotations/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-0d2d634da25a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/annotations/type", + "destinationPointer": "/components/schemas/OCIDescriptor/properties/annotations/type" + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/artifactType/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-55052987dbc2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/artifactType/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/artifactType/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-b393bd2a7ffb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/artifactType/type", + "destinationPointer": "/components/schemas/OCIDescriptor/properties/artifactType/type" + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/data/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-3500007964ed", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/data/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/data/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "engine-1.56-56d0fcbfc3a7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/data/type", + "destinationPointer": "/components/schemas/OCIDescriptor/properties/data/type" + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/urls/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-1ff177303ec3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/urls/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIDescriptor/properties/urls/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-7e82ec12f9b5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIDescriptor/properties/urls/type", + "destinationPointer": "/components/schemas/OCIDescriptor/properties/urls/type" + }, + { + "pointer": "/components/schemas/OCIPlatform/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-b8e8a17e3949", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIPlatform/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/OCIPlatform/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-d636a0ad3b00", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/OCIPlatform/type", + "destinationPointer": "/components/schemas/OCIPlatform/type" + }, + { + "pointer": "/components/schemas/PeerInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-2f9120161d0f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PeerInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-ebbce18afdd0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Args/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-02cdea3fa2d7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Args/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Args/properties/Description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-2e6f8af3b345", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Args/properties/Description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Args/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-225c409d5967", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Args/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-af2320867bd3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Documentation/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-8a5f7c48973b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Documentation/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Interface/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-cd5327fa6603", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Interface/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Interface/properties/Socket/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-1f30b2205b4c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Interface/properties/Socket/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/IpcHost/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-3f2cd45a427d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/IpcHost/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Linux/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-b787cd953187", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Linux/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Linux/properties/AllowAllDevices/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-c13635ce8f84", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Linux/properties/AllowAllDevices/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Network/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-3f23cd1fbbeb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Network/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/Network/properties/Type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-25201ac4a5a0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/Network/properties/Type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/PidHost/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-90681522ae90", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/PidHost/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/PropagatedMount/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-9de29da193bc", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/PropagatedMount/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/User/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-d390bc64e21b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/User/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Config/properties/WorkDir/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-763dda265092", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Config/properties/WorkDir/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Enabled/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-3bb6c7b88794", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Enabled/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-5ad766a199cc", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/PluginReference/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-1544725a66bc", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/PluginReference/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Plugin/properties/Settings/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-55670ba786b4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Plugin/properties/Settings/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginDevice/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-6c3168bf4390", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginDevice/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginDevice/properties/Description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-2c127622db7e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginDevice/properties/Description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginDevice/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-bc2a51a142b7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginDevice/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginEnv/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-e690094f37d5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginEnv/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginEnv/properties/Description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-5357bb53f264", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginEnv/properties/Description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginEnv/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-e2294210224d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginEnv/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginMount/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-8e38f625d03c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginMount/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginMount/properties/Description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-862e209ad927", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginMount/properties/Description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginMount/properties/Destination/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-fcced6eb0bc7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginMount/properties/Destination/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginMount/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-5d519a2f8069", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginMount/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PluginMount/properties/Type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-3babb22581a4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginMount/properties/Type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PortMap/additionalProperties/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-bf23054514bc", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PortMap/additionalProperties/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PortMap/additionalProperties/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-07bbfd94d9c7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PortMap/additionalProperties/type", + "destinationPointer": "/components/schemas/PortMap/additionalProperties/type" + }, + { + "pointer": "/components/schemas/PortSummary/properties/PrivatePort/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-ed5b46b5674a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PortSummary/properties/PrivatePort/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PortSummary/properties/Type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-a0346b92cfa2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PortSummary/properties/Type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/RegistryServiceConfig/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-025eb33452f9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/RegistryServiceConfig/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/RegistryServiceConfig/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-f5fb95cb3e21", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/RegistryServiceConfig/type", + "destinationPointer": "/components/schemas/RegistryServiceConfig/type" + }, + { + "pointer": "/components/schemas/Resources/properties/Init/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-f5c88e14fa98", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Resources/properties/Init/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Resources/properties/Init/type", + "beforePresent": true, + "afterPresent": true, + "before": "boolean", + "after": [ + "boolean", + "null" + ], + "id": "engine-1.56-a7bdf8c36b65", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Resources/properties/Init/type", + "destinationPointer": "/components/schemas/Resources/properties/Init/type" + }, + { + "pointer": "/components/schemas/Resources/properties/PidsLimit/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-a75c80a95070", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Resources/properties/PidsLimit/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Resources/properties/PidsLimit/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-24723b7891fa", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Resources/properties/PidsLimit/type", + "destinationPointer": "/components/schemas/Resources/properties/PidsLimit/type" + }, + { + "pointer": "/components/schemas/RootFSStorageSnapshot/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-9bb8e5b0c313", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/RootFSStorageSnapshot/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Runtime/properties/runtimeArgs/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-e480eb73bd9f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Runtime/properties/runtimeArgs/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Runtime/properties/runtimeArgs/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-6d00bdf32f02", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Runtime/properties/runtimeArgs/type", + "destinationPointer": "/components/schemas/Runtime/properties/runtimeArgs/type" + }, + { + "pointer": "/components/schemas/Runtime/properties/status/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-0b9d6f8dfe1e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Runtime/properties/status/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Runtime/properties/status/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-56e40dbc4c95", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Runtime/properties/status/type", + "destinationPointer": "/components/schemas/Runtime/properties/status/type" + }, + { + "pointer": "/components/schemas/ServiceCreateResponse/properties/ID/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-4a218043aeb2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ServiceCreateResponse/properties/ID/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ServiceCreateResponse/properties/Warnings/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-e7702345982e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ServiceCreateResponse/properties/Warnings/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/ServiceCreateResponse/properties/Warnings/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-e91bec0aecd5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ServiceCreateResponse/properties/Warnings/type", + "destinationPointer": "/components/schemas/ServiceCreateResponse/properties/Warnings/type" + }, + { + "pointer": "/components/schemas/ServiceInfo/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-ed9e61d01a1a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ServiceInfo/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SubnetStatus/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-dc2a9f0da82f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SubnetStatus/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/Managers/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-118a5b28533b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/Managers/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/Managers/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-f38085d277ef", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/Managers/type", + "destinationPointer": "/components/schemas/SwarmInfo/properties/Managers/type" + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/Nodes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-079845fd2f92", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/Nodes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/Nodes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-11608089ce4d", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/Nodes/type", + "destinationPointer": "/components/schemas/SwarmInfo/properties/Nodes/type" + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/RemoteManagers/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-bd8a1236a6e7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/RemoteManagers/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmInfo/properties/RemoteManagers/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-e79ad19b4d48", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmInfo/properties/RemoteManagers/type", + "destinationPointer": "/components/schemas/SwarmInfo/properties/RemoteManagers/type" + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/CAConfig/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-bf74bc876060", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/CAConfig/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/CAConfig/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-1ceb47174e8a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/CAConfig/type", + "destinationPointer": "/components/schemas/SwarmSpec/properties/CAConfig/type" + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/Dispatcher/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-f8c96e88acd7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/Dispatcher/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/Dispatcher/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-d232666aec8e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/Dispatcher/type", + "destinationPointer": "/components/schemas/SwarmSpec/properties/Dispatcher/type" + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/Orchestration/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-e4a39d61d7a6", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/Orchestration/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SwarmSpec/properties/Orchestration/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-d57588d7054e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SwarmSpec/properties/Orchestration/type", + "destinationPointer": "/components/schemas/SwarmSpec/properties/Orchestration/type" + }, + { + "pointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Details/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-967241d47d51", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Details/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Details/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-3f165c3612d3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Details/type", + "destinationPointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Details/type" + }, + { + "pointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Version/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-1f0ae0396f2b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemVersion/properties/Components/items/properties/Version/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Init/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-efc9de8b59b5", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Init/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Init/type", + "beforePresent": true, + "afterPresent": true, + "before": "boolean", + "after": [ + "boolean", + "null" + ], + "id": "engine-1.56-88646544d5ed", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Init/type", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Init/type" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/Resources/properties/MemorySwappiness/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-53a655b743f2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/Resources/properties/MemorySwappiness/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/TaskSpec/properties/Resources/properties/MemorySwappiness/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-1bc08295d232", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/Resources/properties/MemorySwappiness/type", + "destinationPointer": "/components/schemas/TaskSpec/properties/Resources/properties/MemorySwappiness/type" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/Resources/properties/SwapBytes/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-17ef8f0f8838", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/Resources/properties/SwapBytes/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/TaskSpec/properties/Resources/properties/SwapBytes/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "engine-1.56-35d66f4e9221", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/Resources/properties/SwapBytes/type", + "destinationPointer": "/components/schemas/TaskSpec/properties/Resources/properties/SwapBytes/type" + }, + { + "pointer": "/components/schemas/Volume/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-872f92cd5141", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/Driver/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-800e3fbc2041", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/Driver/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/Labels/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-118781f291b3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/Labels/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/Mountpoint/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-ef58a8962681", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/Mountpoint/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-e68996fb1d8f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/Scope/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-525594cbb7b0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/Scope/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/UsageData/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-2441d501868a", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/UsageData/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/UsageData/properties/RefCount/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-8f68b4c865c2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/UsageData/properties/RefCount/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/UsageData/properties/Size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-10e3c5cf93b2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/UsageData/properties/Size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/Volume/properties/UsageData/type", + "beforePresent": true, + "afterPresent": true, + "before": "object", + "after": [ + "object", + "null" + ], + "id": "engine-1.56-978613386d1c", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Volume/properties/UsageData/type", + "destinationPointer": "/components/schemas/Volume/properties/UsageData/type" + }, + { + "pointer": "/components/schemas/VolumeCreateRequest/properties/Driver/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-231b40bc6e18", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/VolumeCreateRequest/properties/Driver/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/VolumeCreateRequest/properties/Name/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "engine-1.56-79584aeeeaed", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/VolumeCreateRequest/properties/Name/nullable", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/requestBody/content/application~1json/schema/properties/ConsoleSize/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-4ff432f286f3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/requestBody/content/application~1json/schema/properties/ConsoleSize/nullable", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1exec/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-e504304587f3", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1exec/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type", + "destinationPointer": "/paths/~1containers~1{id}~1exec/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json/schema/properties/ConsoleSize/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "engine-1.56-6dd8a6ea2e23", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json/schema/properties/ConsoleSize/nullable", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type", + "beforePresent": true, + "afterPresent": true, + "before": "array", + "after": [ + "array", + "null" + ], + "id": "engine-1.56-e1b360d1df38", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type", + "destinationPointer": "/paths/~1exec~1{id}~1start/post/requestBody/content/application~1json/schema/properties/ConsoleSize/type" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/GraphDriver/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.56-3d0abf47748f", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/GraphDriver/allOf", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/GraphDriver/allOf" + }, + { + "pointer": "/components/schemas/ContainerInspectResponse/properties/Storage/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/Storage" + }, + { + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/Storage" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.56-dcc44e39a2a6", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerInspectResponse/properties/Storage/allOf", + "destinationPointer": "/components/schemas/ContainerInspectResponse/properties/Storage/allOf" + }, + { + "pointer": "/components/schemas/ContainerSummary/properties/ImageManifestDescriptor/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "x-nullable": true, + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store.\n\nThis field is not populated in the `GET /system/df` endpoint.\n" + } + ], + "after": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "OCI descriptor of the platform-specific manifest of the image\nthe container was created from.\n\nNote: Only available if the daemon provides a multi-platform\nimage store.\n\nThis field is not populated in the `GET /system/df` endpoint.\n" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.56-d6eb3dd343f3", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ContainerSummary/properties/ImageManifestDescriptor/allOf", + "destinationPointer": "/components/schemas/ContainerSummary/properties/ImageManifestDescriptor/allOf" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Descriptor/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.56-d5ab92ec5880", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Descriptor/allOf", + "destinationPointer": "/components/schemas/ImageInspect/properties/Descriptor/allOf" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/GraphDriver/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/DriverData" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.56-2bb8013972af", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/GraphDriver/allOf", + "destinationPointer": "/components/schemas/ImageInspect/properties/GraphDriver/allOf" + }, + { + "pointer": "/components/schemas/ImageInspect/properties/Identity/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name.", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "anyOf": [ + { + "description": "Identity holds information about the identity and origin of the image.\nThis is trusted information verified by the daemon and cannot be modified\nby tagging an image to a different name." + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.56-73ca85a00beb", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageInspect/properties/Identity/allOf", + "destinationPointer": "/components/schemas/ImageInspect/properties/Identity/allOf" + }, + { + "pointer": "/components/schemas/ImageManifestSummary/properties/ImageData/properties/Identity/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "description": "Identity holds information about the identity and origin of this image.\nFor image list responses, this can duplicate Build/Pull fields across\nimage manifests, because those parts are image-level metadata.\n", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/Identity" + }, + { + "anyOf": [ + { + "description": "Identity holds information about the identity and origin of this image.\nFor image list responses, this can duplicate Build/Pull fields across\nimage manifests, because those parts are image-level metadata.\n" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.56-9a794868473c", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageManifestSummary/properties/ImageData/properties/Identity/allOf", + "destinationPointer": "/components/schemas/ImageManifestSummary/properties/ImageData/properties/Identity/allOf" + }, + { + "pointer": "/components/schemas/ImageSummary/properties/Descriptor/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/OCIDescriptor" + }, + { + "anyOf": [ + { + "description": "Descriptor is an OCI descriptor of the image target.\nIn case of a multi-platform image, this descriptor points to the OCI index\nor a manifest list.\n\nThis field is only present if the daemon provides a multi-platform image store.\n\nWARNING: This is experimental and may change at any time without any backward\ncompatibility.\n" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.56-6c19cf1e0f2d", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/ImageSummary/properties/Descriptor/allOf", + "destinationPointer": "/components/schemas/ImageSummary/properties/Descriptor/allOf" + }, + { + "pointer": "/components/schemas/NetworkConnectRequest/properties/EndpointConfig/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/EndpointSettings" + }, + { + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/EndpointSettings" + }, + { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.56-0e0f32e5e2d2", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NetworkConnectRequest/properties/EndpointConfig/allOf", + "destinationPointer": "/components/schemas/NetworkConnectRequest/properties/EndpointConfig/allOf" + }, + { + "pointer": "/components/schemas/RootFSStorage/properties/Snapshot/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/RootFSStorageSnapshot" + }, + { + "description": "Information about the snapshot used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/RootFSStorageSnapshot" + }, + { + "anyOf": [ + { + "description": "Information about the snapshot used for the container's root filesystem.\n", + "type": "object" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.56-a008bef4981c", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/RootFSStorage/properties/Snapshot/allOf", + "destinationPointer": "/components/schemas/RootFSStorage/properties/Snapshot/allOf" + }, + { + "pointer": "/components/schemas/Storage/properties/RootFS/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/schemas/RootFSStorage" + }, + { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object", + "x-nullable": true + } + ], + "after": [ + { + "$ref": "#/components/schemas/RootFSStorage" + }, + { + "anyOf": [ + { + "description": "Information about the storage used for the container's root filesystem.\n", + "type": "object" + }, + { + "type": "null" + } + ] + } + ], + "id": "engine-1.56-dab886f3702b", + "stage": "engine-nullability-assumption", + "classification": "provisional assumption", + "rationale": "Interpret x-nullable as admitting null for this preview only. Moby must reconcile pointer/omission/generation semantics before upstream adoption.", + "evidence": "Original x-nullable declarations; inventory Engine migration risk", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Storage/properties/RootFS/allOf", + "destinationPointer": "/components/schemas/Storage/properties/RootFS/allOf" + }, + { + "pointer": "/paths/~1build~1prune/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete builder cache.", + "id": "engine-1.56-76ef9c41d040", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1build~1prune/post/description" + }, + { + "pointer": "/paths/~1commit/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a new image from a container.", + "id": "engine-1.56-5d4f23b29d08", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1commit/post/description" + }, + { + "pointer": "/paths/~1configs/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List configs.", + "id": "engine-1.56-413d0b2585f0", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs/get/description" + }, + { + "pointer": "/paths/~1configs~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a config.", + "id": "engine-1.56-2f5f825c39ec", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1create/post/description" + }, + { + "pointer": "/paths/~1configs~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete a config.", + "id": "engine-1.56-479793494148", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/delete/description" + }, + { + "pointer": "/paths/~1configs~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a config.", + "id": "engine-1.56-c54324a79b20", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}/get/description" + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Update a Config.", + "id": "engine-1.56-13e3ed94eff2", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1configs~1{id}~1update/post/description" + }, + { + "pointer": "/paths/~1containers~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a container.", + "id": "engine-1.56-b0a36e58d43b", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1create/post/description" + }, + { + "pointer": "/paths/~1containers~1prune/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete stopped containers.", + "id": "engine-1.56-2dd86cb2c3d5", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1prune/post/description" + }, + { + "pointer": "/paths/~1containers~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Remove a container.", + "id": "engine-1.56-ec6f7810ae3c", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}/delete/description" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Attach to a container via a websocket.", + "id": "engine-1.56-1457126608c1", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach~1ws/get/description" + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Rename a container.", + "id": "engine-1.56-da4a66c80198", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1rename/post/description" + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Restart a container.", + "id": "engine-1.56-498363bb9746", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1restart/post/description" + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Start a container.", + "id": "engine-1.56-9537c7a5936b", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1start/post/description" + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Stop a container.", + "id": "engine-1.56-de835fc5b32e", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1stop/post/description" + }, + { + "pointer": "/paths/~1images~1prune/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete unused images.", + "id": "engine-1.56-825fe6b6aca0", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1prune/post/description" + }, + { + "pointer": "/paths/~1info/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Get system information.", + "id": "engine-1.56-7e086bafbfd5", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1info/get/description" + }, + { + "pointer": "/paths/~1networks~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a network.", + "id": "engine-1.56-f577f572ca2d", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1create/post/description" + }, + { + "pointer": "/paths/~1networks~1prune/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete unused networks.", + "id": "engine-1.56-3d1d75060209", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1prune/post/description" + }, + { + "pointer": "/paths/~1networks~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Remove a network.", + "id": "engine-1.56-1a0c6d7fa050", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/delete/description" + }, + { + "pointer": "/paths/~1networks~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a network.", + "id": "engine-1.56-10e546f9ea6d", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}/get/description" + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Disconnect a container from a network.", + "id": "engine-1.56-af5155420dac", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1networks~1{id}~1disconnect/post/description" + }, + { + "pointer": "/paths/~1nodes/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List nodes.", + "id": "engine-1.56-db4174902420", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes/get/description" + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete a node.", + "id": "engine-1.56-eb07ba7b51fc", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/delete/description" + }, + { + "pointer": "/paths/~1nodes~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a node.", + "id": "engine-1.56-8982653c698c", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}/get/description" + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Update a node.", + "id": "engine-1.56-0e1fe3ad1780", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1nodes~1{id}~1update/post/description" + }, + { + "pointer": "/paths/~1plugins~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a plugin.", + "id": "engine-1.56-1480754d0802", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1create/post/description" + }, + { + "pointer": "/paths/~1plugins~1privileges/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Get plugin privileges.", + "id": "engine-1.56-4d6b7f4206a1", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1privileges/get/description" + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Remove a plugin.", + "id": "engine-1.56-648b78632503", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}/delete/description" + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Disable a plugin.", + "id": "engine-1.56-bf85020296db", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1disable/post/description" + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Enable a plugin.", + "id": "engine-1.56-93b3dde7e817", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1enable/post/description" + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a plugin.", + "id": "engine-1.56-8c5b7fe5b366", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1json/get/description" + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Configure a plugin.", + "id": "engine-1.56-31b527342b5d", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1set/post/description" + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Upgrade a plugin.", + "id": "engine-1.56-e2be9209f22c", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1plugins~1{name}~1upgrade/post/description" + }, + { + "pointer": "/paths/~1secrets/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List secrets.", + "id": "engine-1.56-2943945b0c8f", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets/get/description" + }, + { + "pointer": "/paths/~1secrets~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a secret.", + "id": "engine-1.56-3c42af3ef580", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1create/post/description" + }, + { + "pointer": "/paths/~1secrets~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete a secret.", + "id": "engine-1.56-68f466e6ec33", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/delete/description" + }, + { + "pointer": "/paths/~1secrets~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a secret.", + "id": "engine-1.56-3ec5c352b6dd", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}/get/description" + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Update a Secret.", + "id": "engine-1.56-d78f47f3ccd1", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1secrets~1{id}~1update/post/description" + }, + { + "pointer": "/paths/~1services/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List services.", + "id": "engine-1.56-f3d7809f2959", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services/get/description" + }, + { + "pointer": "/paths/~1services~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a service.", + "id": "engine-1.56-384d3ba7c867", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1create/post/description" + }, + { + "pointer": "/paths/~1services~1{id}/delete/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete a service.", + "id": "engine-1.56-ff3811e7506f", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/delete/description" + }, + { + "pointer": "/paths/~1services~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a service.", + "id": "engine-1.56-f9f9ee30a02a", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}/get/description" + }, + { + "pointer": "/paths/~1services~1{id}~1update/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Update a service.", + "id": "engine-1.56-dc11d31a66ba", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1update/post/description" + }, + { + "pointer": "/paths/~1swarm/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect swarm.", + "id": "engine-1.56-f5507d6d063a", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm/get/description" + }, + { + "pointer": "/paths/~1swarm~1init/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Initialize a new swarm.", + "id": "engine-1.56-6c5ee3eac6db", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1init/post/description" + }, + { + "pointer": "/paths/~1swarm~1join/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Join an existing swarm.", + "id": "engine-1.56-50a0b0e2eff7", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1join/post/description" + }, + { + "pointer": "/paths/~1swarm~1leave/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Leave a swarm.", + "id": "engine-1.56-2a14eb8d37f1", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1leave/post/description" + }, + { + "pointer": "/paths/~1swarm~1unlock/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Unlock a locked manager.", + "id": "engine-1.56-0fb822794e3e", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlock/post/description" + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Get the unlock key.", + "id": "engine-1.56-b45fb4c44d39", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1unlockkey/get/description" + }, + { + "pointer": "/paths/~1swarm~1update/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Update a swarm.", + "id": "engine-1.56-184e1658bcbd", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1swarm~1update/post/description" + }, + { + "pointer": "/paths/~1system~1df/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Get data usage information.", + "id": "engine-1.56-5fe539ff33af", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1system~1df/get/description" + }, + { + "pointer": "/paths/~1tasks/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List tasks.", + "id": "engine-1.56-4de080ea6dbf", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks/get/description" + }, + { + "pointer": "/paths/~1tasks~1{id}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a task.", + "id": "engine-1.56-419de5157321", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}/get/description" + }, + { + "pointer": "/paths/~1volumes/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "List volumes.", + "id": "engine-1.56-6e5aae6f8b61", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes/get/description" + }, + { + "pointer": "/paths/~1volumes~1create/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Create a volume.", + "id": "engine-1.56-ae557e325f95", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1create/post/description" + }, + { + "pointer": "/paths/~1volumes~1prune/post/description", + "beforePresent": false, + "afterPresent": true, + "after": "Delete unused volumes.", + "id": "engine-1.56-ad0a5bb72df0", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1prune/post/description" + }, + { + "pointer": "/paths/~1volumes~1{name}/get/description", + "beforePresent": false, + "afterPresent": true, + "after": "Inspect a volume.", + "id": "engine-1.56-89db4b6541da", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/get/description" + }, + { + "pointer": "/paths/~1volumes~1{name}/put/description", + "beforePresent": false, + "afterPresent": true, + "after": "\"Update a volume. Valid only for Swarm cluster volumes\"\n.", + "id": "engine-1.56-2e03340adfe1", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1volumes~1{name}/put/description" + }, + { + "pointer": "/tags", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "Container", + "x-displayName": "Containers", + "description": "Create and manage containers.\n" + }, + { + "name": "Image", + "x-displayName": "Images" + }, + { + "name": "Network", + "x-displayName": "Networks", + "description": "Networks are user-defined networks that containers can be attached to.\nSee the [networking documentation](https://docs.docker.com/network/)\nfor more information.\n" + }, + { + "name": "Volume", + "x-displayName": "Volumes", + "description": "Create and manage persistent storage that can be attached to containers.\n" + }, + { + "name": "Exec", + "x-displayName": "Exec", + "description": "Run new commands inside running containers. Refer to the\n[command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\nfor more information.\n\nTo exec a command in a container, you first need to create an exec instance,\nthen start it. These two API endpoints are wrapped up in a single command-line\ncommand, `docker exec`.\n" + }, + { + "name": "Swarm", + "x-displayName": "Swarm", + "description": "Engines can be clustered together in a swarm. Refer to the\n[swarm mode documentation](https://docs.docker.com/engine/swarm/)\nfor more information.\n" + }, + { + "name": "Node", + "x-displayName": "Nodes", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode\nmust be enabled for these endpoints to work.\n" + }, + { + "name": "Service", + "x-displayName": "Services", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must\nbe enabled for these endpoints to work.\n" + }, + { + "name": "Task", + "x-displayName": "Tasks", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit\nof swarm. Swarm mode must be enabled for these endpoints to work.\n" + }, + { + "name": "Secret", + "x-displayName": "Secrets", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must\nbe enabled for these endpoints to work.\n" + }, + { + "name": "Config", + "x-displayName": "Configs", + "description": "Configs are application configurations that can be used by services. Swarm\nmode must be enabled for these endpoints to work.\n" + }, + { + "name": "Plugin", + "x-displayName": "Plugins" + }, + { + "name": "System", + "x-displayName": "System" + } + ], + "after": [ + { + "name": "Container", + "description": "Create and manage containers.\n", + "summary": "Containers", + "kind": "nav" + }, + { + "name": "Image", + "summary": "Images", + "kind": "nav", + "description": "Images reference." + }, + { + "name": "Network", + "description": "Networks are user-defined networks that containers can be attached to.\nSee the [networking documentation](https://docs.docker.com/network/)\nfor more information.\n", + "summary": "Networks", + "kind": "nav" + }, + { + "name": "Volume", + "description": "Create and manage persistent storage that can be attached to containers.\n", + "summary": "Volumes", + "kind": "nav" + }, + { + "name": "Exec", + "description": "Run new commands inside running containers. Refer to the\n[command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\nfor more information.\n\nTo exec a command in a container, you first need to create an exec instance,\nthen start it. These two API endpoints are wrapped up in a single command-line\ncommand, `docker exec`.\n", + "summary": "Exec", + "kind": "nav" + }, + { + "name": "Swarm", + "description": "Engines can be clustered together in a swarm. Refer to the\n[swarm mode documentation](https://docs.docker.com/engine/swarm/)\nfor more information.\n", + "summary": "Swarm", + "kind": "nav" + }, + { + "name": "Node", + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode\nmust be enabled for these endpoints to work.\n", + "summary": "Nodes", + "kind": "nav" + }, + { + "name": "Service", + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must\nbe enabled for these endpoints to work.\n", + "summary": "Services", + "kind": "nav" + }, + { + "name": "Task", + "description": "A task is a container running on a swarm. It is the atomic scheduling unit\nof swarm. Swarm mode must be enabled for these endpoints to work.\n", + "summary": "Tasks", + "kind": "nav" + }, + { + "name": "Secret", + "description": "Secrets are sensitive data that can be used by services. Swarm mode must\nbe enabled for these endpoints to work.\n", + "summary": "Secrets", + "kind": "nav" + }, + { + "name": "Config", + "description": "Configs are application configurations that can be used by services. Swarm\nmode must be enabled for these endpoints to work.\n", + "summary": "Configs", + "kind": "nav" + }, + { + "name": "Plugin", + "summary": "Plugins", + "kind": "nav", + "description": "Plugins reference." + }, + { + "name": "System", + "summary": "System", + "kind": "nav", + "description": "System reference." + }, + { + "name": "Distribution", + "description": "Distribution operations.", + "summary": "Distribution", + "kind": "nav" + }, + { + "name": "Session", + "description": "Session operations.", + "summary": "Session", + "kind": "nav" + } + ], + "id": "engine-1.56-8d93cf25f3e7", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "moby/moby", + "sourcePointer": "/tags", + "destinationPointer": "/tags" + }, + { + "pointer": "/components/schemas/EndpointPortConfig/properties/PublishMode/description", + "beforePresent": true, + "afterPresent": true, + "before": "The mode in which port is published.\n\n


\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "after": "The mode in which port is published.\n\n\n\n\n\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "id": "engine-1.56-7f967a3d7e0e", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/EndpointPortConfig/properties/PublishMode/description", + "destinationPointer": "/components/schemas/EndpointPortConfig/properties/PublishMode/description" + }, + { + "pointer": "/components/schemas/FirewallInfo/properties/Info/description", + "beforePresent": true, + "afterPresent": true, + "before": "Information about the firewall backend, provided as\n\"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "after": "Information about the firewall backend, provided as\n\"label\" / \"value\" pairs.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "id": "engine-1.56-26a3fc86cea8", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/FirewallInfo/properties/Info/description", + "destinationPointer": "/components/schemas/FirewallInfo/properties/Info/description" + }, + { + "pointer": "/components/schemas/NRIInfo/properties/Info/description", + "beforePresent": true, + "afterPresent": true, + "before": "Information about NRI, provided as \"label\" / \"value\" pairs.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "after": "Information about NRI, provided as \"label\" / \"value\" pairs.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "id": "engine-1.56-39bec68e2ba6", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/NRIInfo/properties/Info/description", + "destinationPointer": "/components/schemas/NRIInfo/properties/Info/description" + }, + { + "pointer": "/components/schemas/PluginsInfo/description", + "beforePresent": true, + "afterPresent": true, + "before": "Available plugins per type.\n\n


\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n", + "after": "Available plugins per type.\n\n\n\n\n\n\n> **Note**: Only unmanaged (V1) plugins are included in this list.\n> V1 plugins are \"lazily\" loaded, and are not returned in this list\n> if there is no resource using the plugin.\n", + "id": "engine-1.56-04c928b55092", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/PluginsInfo/description", + "destinationPointer": "/components/schemas/PluginsInfo/description" + }, + { + "pointer": "/components/schemas/Runtime/properties/status/description", + "beforePresent": true, + "afterPresent": true, + "before": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "after": "Information specific to the runtime.\n\nWhile this API specification does not define data provided by runtimes,\nthe following well-known properties may be provided by runtimes:\n\n`org.opencontainers.runtime-spec.features`: features structure as defined\nin the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\nin a JSON string representation.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "id": "engine-1.56-67960b45330c", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/Runtime/properties/status/description", + "destinationPointer": "/components/schemas/Runtime/properties/status/description" + }, + { + "pointer": "/components/schemas/SystemInfo/properties/DriverStatus/description", + "beforePresent": true, + "afterPresent": true, + "before": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n


\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "after": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n\n\n\n\n\n> **Note**: The information returned in this field, including the\n> formatting of values and labels, should not be considered stable,\n> and may change without notice.\n", + "id": "engine-1.56-0329e3b6fbc2", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemInfo/properties/DriverStatus/description", + "destinationPointer": "/components/schemas/SystemInfo/properties/DriverStatus/description" + }, + { + "pointer": "/components/schemas/SystemInfo/properties/ID/description", + "beforePresent": true, + "afterPresent": true, + "before": "Unique identifier of the daemon.\n\n


\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "after": "Unique identifier of the daemon.\n\n\n\n\n\n\n> **Note**: The format of the ID itself is not part of the API, and\n> should not be considered stable.\n", + "id": "engine-1.56-d4f94dbd2612", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemInfo/properties/ID/description", + "destinationPointer": "/components/schemas/SystemInfo/properties/ID/description" + }, + { + "pointer": "/components/schemas/SystemInfo/properties/Labels/description", + "beforePresent": true, + "afterPresent": true, + "before": "User-defined labels (key/value metadata) as set on the daemon.\n\n


\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "after": "User-defined labels (key/value metadata) as set on the daemon.\n\n\n\n\n\n\n> **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n> set through the daemon configuration, and _node_ labels, set from a\n> manager node in the Swarm. Node labels are not included in this\n> field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n> on a manager node in the Swarm.\n", + "id": "engine-1.56-1e49e9f0457a", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemInfo/properties/Labels/description", + "destinationPointer": "/components/schemas/SystemInfo/properties/Labels/description" + }, + { + "pointer": "/components/schemas/SystemInfo/properties/OSVersion/description", + "beforePresent": true, + "afterPresent": true, + "before": "Version of the host's operating system\n\n


\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "after": "Version of the host's operating system\n\n\n\n\n\n\n> **Note**: The information returned in this field, including its\n> very existence, and the formatting of values, should not be considered\n> stable, and may change without notice.\n", + "id": "engine-1.56-f86780f70899", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/SystemInfo/properties/OSVersion/description", + "destinationPointer": "/components/schemas/SystemInfo/properties/OSVersion/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/description", + "beforePresent": true, + "afterPresent": true, + "before": "Container spec for the service.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "after": "Container spec for the service.\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "id": "engine-1.56-e1b22562c6de", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/File/description", + "beforePresent": true, + "afterPresent": true, + "before": "File represents a specific target that is backed by a file.\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n", + "after": "File represents a specific target that is backed by a file.\n\n\n\n\n\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n", + "id": "engine-1.56-6f16e374c89c", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/File/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/File/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/Runtime/description", + "beforePresent": true, + "afterPresent": true, + "before": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n


\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n", + "after": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n\n\n\n\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n", + "id": "engine-1.56-6052ab3cc9f0", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/Runtime/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Configs/items/properties/Runtime/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Config/description", + "beforePresent": true, + "afterPresent": true, + "before": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "after": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "id": "engine-1.56-07f8929a3621", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Config/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Config/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/File/description", + "beforePresent": true, + "afterPresent": true, + "before": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n


\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "after": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "id": "engine-1.56-a9af2cd3fb7f", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/File/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/File/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Registry/description", + "beforePresent": true, + "afterPresent": true, + "before": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n


\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "after": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n\n\n\n\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n", + "id": "engine-1.56-b07336ab42a3", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Registry/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/ContainerSpec/properties/Privileges/properties/CredentialSpec/properties/Registry/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/NetworkAttachmentSpec/description", + "beforePresent": true, + "afterPresent": true, + "before": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "after": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "id": "engine-1.56-fb45f5fdc555", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/NetworkAttachmentSpec/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/NetworkAttachmentSpec/description" + }, + { + "pointer": "/components/schemas/TaskSpec/properties/PluginSpec/description", + "beforePresent": true, + "afterPresent": true, + "before": "Plugin spec for the service. *(Experimental release only.)*\n\n


\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "after": "Plugin spec for the service. *(Experimental release only.)*\n\n\n\n\n\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n", + "id": "engine-1.56-bf2c070cb392", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/components/schemas/TaskSpec/properties/PluginSpec/description", + "destinationPointer": "/components/schemas/TaskSpec/properties/PluginSpec/description" + }, + { + "pointer": "/paths/~1images~1search/get/responses/200/content/application~1json/schema/items/properties/is_automated/description", + "beforePresent": true, + "afterPresent": true, + "before": "Whether this repository has automated builds enabled.\n\n


\n\n> **Deprecated**: This field is deprecated and will always be \"false\".\n", + "after": "Whether this repository has automated builds enabled.\n\n\n\n\n\n\n> **Deprecated**: This field is deprecated and will always be \"false\".\n", + "id": "engine-1.56-c61fab38f68a", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1search/get/responses/200/content/application~1json/schema/items/properties/is_automated/description", + "destinationPointer": "/paths/~1images~1search/get/responses/200/content/application~1json/schema/items/properties/is_automated/description" + }, + { + "pointer": "/paths/~1_ping/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-58ad577fab31", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1_ping/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-0d13f473d0ad", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-8357f99366f6", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1_ping/head/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1_ping/head/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-1126748b86c2", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-cb39a2b10f31", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-918a6a86ff4a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-375043447441", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1configs~1{id}~1update/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-753730442b6e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1configs~1{id}~1update/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-9883afc857b6", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-dd0d1ff52034", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/409/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-1714d4399fd5", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/409/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-83c84e9f155b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/200/content", + "beforePresent": false, + "afterPresent": true, + "after": { + "application/x-tar": {} + }, + "id": "engine-1.56-8753b847ea7d", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/200/content" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-ae99432f7518", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content/application~1x-tar", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-ee5d4fbe8c9a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/400/content/application~1x-tar", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-da67029e4cf7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content/application~1x-tar", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-5b1662077caf", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/get/responses/500/content/application~1x-tar", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-cf6ce9fa4865", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-ff9d91720016", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-794f5d92128f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d2c291dd0caa", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/403/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-ad8b28dd9160", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/403/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-1e0cbd182ad4", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/put/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-0fe5c397e45f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/put/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d7418b2edfc7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d27fe3dd1532", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d6d053ac5b9b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/400/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-fac48a263743", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-154fa359a757", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-5a25452b1ed1", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach/post/responses/500/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-b0771c2bdfa5", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-6a1f7c7288a3", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-0a18defa2788", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1attach~1ws/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d35e7209fa30", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1export/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1export/get/responses/500/content/application~1octet-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-f71e21b3661f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1export/get/responses/500/content/application~1octet-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-bdd7198a082e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/409/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-61f79a32e180", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/409/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1kill/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-a2ff3d36341d", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1kill/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-4b2a36942e2f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-0d7737b41b42", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d1c6c1dd5036", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-95c2bd091abf", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1pause/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-28d517448277", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1pause/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-82d79fa47678", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/409/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-67285f334fad", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/409/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1rename/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-b8f941a54c0e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1rename/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-4412fa721c4f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-86e7ee06eeea", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1resize/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-61c1e07a5a2f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1restart/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d853a4c673c0", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1restart/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-7f662f1214d9", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-fc33e1c128fa", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1start/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-965f3fcdaa71", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1start/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-8fe9059ae1c0", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1stop/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-446da0881f87", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1stop/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-b7aa3caab1cb", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1top/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-6351c6673c1a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1top/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-9113b940846c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-167c2a8247b7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1unpause/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/400/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-a93b29ba23c5", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1events/get/responses/400/content/application~1json" + }, + { + "pointer": "/paths/~1events/get/responses/400/content/application~1json-seq", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-9493370b1cab", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/400/content/application~1json-seq", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/400/content/application~1jsonl", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-0dc625b45b49", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/400/content/application~1jsonl", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/400/content/application~1x-ndjson", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-f20c90e5d932", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/400/content/application~1x-ndjson", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-718c181d9243", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1events/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1events/get/responses/500/content/application~1json-seq", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-20a81e3c2ce7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/500/content/application~1json-seq", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/500/content/application~1jsonl", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-30f4a1459543", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/500/content/application~1jsonl", + "destinationPointer": null + }, + { + "pointer": "/paths/~1events/get/responses/500/content/application~1x-ndjson", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-c5585fe5962e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1events/get/responses/500/content/application~1x-ndjson", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-4f00ffc2608d", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-87da18fee0df", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1resize/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-3a6aa52ce200", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1resize/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-7ce2a67d94e8", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1json" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-fa672416eeb2", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-889101f745be", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/404/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-35949b21b286", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1json" + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-46c0b85b5d38", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-ce0cb011246c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1exec~1{id}~1start/post/responses/409/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1get/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-56d14a45c4f7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1get/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1images~1get/get/responses/500/content/application~1x-tar", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-040816f267f0", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1get/get/responses/500/content/application~1x-tar", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d099021bf7e3", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1images~1{name}~1get/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1images~1{name}~1get/get/responses/500/content/application~1x-tar", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-f3b2a1503dbb", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1get/get/responses/500/content/application~1x-tar", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-09693819e0df", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1push/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-5ceb0aab964b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1push/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-cf1dac93275b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-aee4d4ad0058", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/409/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-9270214a3275", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/409/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1images~1{name}~1tag/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-f80c9e412655", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1images~1{name}~1tag/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/403/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-6f64ef80b465", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/403/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-20303caae0c4", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-3122ff920d26", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-b81db107ee4d", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/403/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-1e198d0c3c18", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/403/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-0ab6324ec1dd", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1connect/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-1a522c339e6c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1connect/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-530206946672", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/403/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-44178c88d88a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-a17e4dbfbff8", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1networks~1{id}~1disconnect/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-a9da4d2b3f99", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-27ed757bc79c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-c3a04dc21234", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-058a4a78f3ce", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/delete/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-84148d443a16", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/delete/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-8aec76eee1a9", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-227bbbc7ebdd", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-deb27515c556", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-dacce7864533", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-e66cf9df3002", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-ba6e57c1e937", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1nodes~1{id}~1update/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-2f6487ab5d83", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1nodes~1{id}~1update/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1create/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-5276a889a58c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1create/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1privileges/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-1065c5f28c4e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1privileges/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-f781f6db8b88", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-5030eb807ddb", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-2f057c8b2eff", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1disable/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-1ef0f666bc8b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1disable/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-bc7d31900a74", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1enable/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-a1a25fab321c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1enable/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-f7dcc4d52f63", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1json/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-1ed1c955dc86", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1json/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d589b1810378", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1push/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1push/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-3a4886927bc7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1push/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-aaa01a7a1062", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1set/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-b52a6617d073", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1set/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-243c7a18a4f9", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-334f6ad46ba1", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1plugins~1{name}~1upgrade/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d827f1844718", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-fd909b048898", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d35ea6dcc977", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1secrets~1{id}~1update/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-b34337f8413f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1secrets~1{id}~1update/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-fc82bc21e03c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-060f0ff58d80", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-64cd9bec0e6f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-ade07e5e2a70", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/delete/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-b6bc8415325b", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/delete/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-bdd6a8e581c3", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-ddcc7d4daf06", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-9fcf975a1043", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-17dfa2028dae", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d0132ea45b8a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-dddba6ddfb42", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-bb59dc234188", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1json" + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-efd1ecf0f407", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-94b08b0740cf", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1services~1{id}~1logs/get/responses/503/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1session/post/responses/400/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-fb147e5b1334", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1session/post/responses/400/content/application~1json" + }, + { + "pointer": "/paths/~1session/post/responses/400/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-81ab5eac1bef", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1session/post/responses/400/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1session/post/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-77d0b94e29c0", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1session/post/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1session/post/responses/500/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-2699d8d3dd68", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1session/post/responses/500/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-fef9a9c89105", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-0efd0bfb0c79", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-e0b750aaacc2", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-09789d1125ec", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-3cc9c3ecb60a", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1init/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-2abd0c4386f6", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1init/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-a3cd3bb115ff", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-ac5c06e59002", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1join/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-19b7569c0449", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1join/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d6df4f352fa1", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1leave/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1leave/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-4525cf996e07", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1leave/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-f53dca0b13f1", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1unlockkey/get/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-ba802ac2d5ef", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1unlockkey/get/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/400/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-a2a735a84d94", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/400/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-5d6cc3fa3cf8", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1swarm~1update/post/responses/503/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-c5719da3a671", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1swarm~1update/post/responses/503/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1system~1df/get/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-84694ff6cdb7", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1system~1df/get/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-355adecb2984", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1json" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-7505c9aa7a76", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-5cf5f9bc4f2f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/500/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1json", + "beforePresent": false, + "afterPresent": true, + "after": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-d0cfa0725856", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1json" + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1vnd.docker.multiplexed-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-bf09c3995a3c", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1vnd.docker.multiplexed-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1vnd.docker.raw-stream", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-06b527719f4d", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1tasks~1{id}~1logs/get/responses/503/content/application~1vnd.docker.raw-stream", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/404/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-86db2aed42a4", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/404/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/409/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-4fb14b8dc84f", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/409/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1volumes~1{name}/delete/responses/500/content/text~1plain", + "beforePresent": true, + "afterPresent": false, + "before": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + }, + "id": "engine-1.56-80770e1c382e", + "stage": "engine-response-media", + "classification": "evidence-backed correction", + "rationale": "Use JSON for documented ErrorResponse bodies and restore the archive success media type lost by Swagger conversion.", + "evidence": "Engine API introductory error contract and GET /containers/{id}/archive description", + "owner": "moby/moby", + "sourcePointer": "/paths/~1volumes~1{name}/delete/responses/500/content/text~1plain", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/200/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "text/plain": { + "schema": { + "type": "string", + "example": "(empty)" + } + } + }, + "id": "engine-1.56-b62e54b25a5a", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/200/content", + "destinationPointer": null + }, + { + "pointer": "/paths/~1_ping/head/responses/500/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-7c02acf67260", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "moby/moby", + "sourcePointer": "/paths/~1_ping/head/responses/500/content", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-754743d2ee2e", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/400/content", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "response": { + "value": { + "message": "No such container: c2ada9df5af8" + } + } + } + } + }, + "id": "engine-1.56-c13a34e25df1", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/404/content", + "destinationPointer": null + }, + { + "pointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + }, + "id": "engine-1.56-a2a2fccece33", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "moby/moby", + "sourcePointer": "/paths/~1containers~1{id}~1archive/head/responses/500/content", + "destinationPointer": null + }, + { + "pointer": "/security", + "beforePresent": false, + "afterPresent": true, + "after": [], + "id": "engine-1.56-2b9d4937db9a", + "stage": "explicit-root-security", + "classification": "editorial completion", + "rationale": "Make the existing absence of inherited HTTP authentication explicit. Local socket permissions remain connection metadata.", + "evidence": "OpenAPI root security inheritance; existing source operation policies", + "owner": "moby/moby", + "sourcePointer": null, + "destinationPointer": "/security" + } + ] +} diff --git a/prototypes/api-docs/migrations/engine-1.56.patch b/prototypes/api-docs/migrations/engine-1.56.patch new file mode 100644 index 000000000000..c2ebd020b47b --- /dev/null +++ b/prototypes/api-docs/migrations/engine-1.56.patch @@ -0,0 +1,27688 @@ +--- original/engine-1.56.yaml ++++ converted/engine-1.56.yaml +@@ -1,30 +1,9 @@ +-# A Swagger 2.0 (a.k.a. OpenAPI) definition of the Engine API. +-# +-# This is used for generating API documentation and the types used by the +-# client/server. See api/README.md for more information. +-# +-# Some style notes: +-# - This file is used by ReDoc, which allows GitHub Flavored Markdown in +-# descriptions. +-# - There is no maximum line length, for ease of editing and pretty diffs. +-# - operationIds are in the format "NounVerb", with a singular noun. +- +-swagger: "2.0" +-schemes: +- - "http" +- - "https" +-produces: +- - "application/json" +- - "text/plain" +-consumes: +- - "application/json" +- - "text/plain" +-basePath: "/v1.56" ++openapi: 3.2.0 + info: +- title: "Docker Engine API" ++ title: Docker Engine API + version: "1.56" + x-logo: +- url: "https://docs.docker.com/assets/images/logo-docker-main.png" ++ url: https://docs.docker.com/assets/images/logo-docker-main.png + description: | + The Engine API is an HTTP API served by Docker Engine. It is the API the + Docker client uses to communicate with the Engine, so everything the Docker +@@ -96,34 +75,29 @@ + "identitytoken": "9cbaf023786cd7..." + } + ``` +- +-# The tags on paths define the menu sections in the ReDoc documentation, so +-# the usage of tags must make sense for that: +-# - They should be singular, not plural. +-# - There should not be too many tags, or the menu becomes unwieldy. For +-# example, it is preferable to add a path to the "System" tag instead of +-# creating a tag with a single path in it. +-# - The order of tags in this list defines the order in the menu. + tags: +- # Primary objects +- - name: "Container" +- x-displayName: "Containers" ++ - name: Container + description: | + Create and manage containers. +- - name: "Image" +- x-displayName: "Images" +- - name: "Network" +- x-displayName: "Networks" ++ summary: Containers ++ kind: nav ++ - name: Image ++ summary: Images ++ kind: nav ++ description: Images reference. ++ - name: Network + description: | + Networks are user-defined networks that containers can be attached to. + See the [networking documentation](https://docs.docker.com/network/) + for more information. +- - name: "Volume" +- x-displayName: "Volumes" ++ summary: Networks ++ kind: nav ++ - name: Volume + description: | + Create and manage persistent storage that can be attached to containers. +- - name: "Exec" +- x-displayName: "Exec" ++ summary: Volumes ++ kind: nav ++ - name: Exec + description: | + Run new commands inside running containers. Refer to the + [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) +@@ -132,8212 +106,65 @@ + To exec a command in a container, you first need to create an exec instance, + then start it. These two API endpoints are wrapped up in a single command-line + command, `docker exec`. +- +- # Swarm things +- - name: "Swarm" +- x-displayName: "Swarm" ++ summary: Exec ++ kind: nav ++ - name: Swarm + description: | + Engines can be clustered together in a swarm. Refer to the + [swarm mode documentation](https://docs.docker.com/engine/swarm/) + for more information. +- - name: "Node" +- x-displayName: "Nodes" ++ summary: Swarm ++ kind: nav ++ - name: Node + description: | + Nodes are instances of the Engine participating in a swarm. Swarm mode + must be enabled for these endpoints to work. +- - name: "Service" +- x-displayName: "Services" ++ summary: Nodes ++ kind: nav ++ - name: Service + description: | + Services are the definitions of tasks to run on a swarm. Swarm mode must + be enabled for these endpoints to work. +- - name: "Task" +- x-displayName: "Tasks" ++ summary: Services ++ kind: nav ++ - name: Task + description: | + A task is a container running on a swarm. It is the atomic scheduling unit + of swarm. Swarm mode must be enabled for these endpoints to work. +- - name: "Secret" +- x-displayName: "Secrets" ++ summary: Tasks ++ kind: nav ++ - name: Secret + description: | + Secrets are sensitive data that can be used by services. Swarm mode must + be enabled for these endpoints to work. +- - name: "Config" +- x-displayName: "Configs" ++ summary: Secrets ++ kind: nav ++ - name: Config + description: | + Configs are application configurations that can be used by services. Swarm + mode must be enabled for these endpoints to work. +- # System things +- - name: "Plugin" +- x-displayName: "Plugins" +- - name: "System" +- x-displayName: "System" +- +-definitions: +- ImageHistoryResponseItem: +- type: "object" +- x-go-name: HistoryResponseItem +- title: "HistoryResponseItem" +- description: "individual image layer information in response to ImageHistory operation" +- required: [Id, Created, CreatedBy, Tags, Size, Comment] +- properties: +- Id: +- type: "string" +- x-nullable: false +- Created: +- type: "integer" +- format: "int64" +- x-nullable: false +- CreatedBy: +- type: "string" +- x-nullable: false +- Tags: +- type: "array" +- items: +- type: "string" +- Size: +- type: "integer" +- format: "int64" +- x-nullable: false +- Comment: +- type: "string" +- x-nullable: false +- PortSummary: +- type: "object" +- description: | +- Describes a port-mapping between the container and the host. +- required: [PrivatePort, Type] +- properties: +- IP: +- type: "string" +- format: "ip-address" +- description: "Host IP address that the container's port is mapped to" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- PrivatePort: +- type: "integer" +- format: "uint16" +- x-nullable: false +- description: "Port on the container" +- PublicPort: +- type: "integer" +- format: "uint16" +- description: "Port exposed on the host" +- Type: +- type: "string" +- x-nullable: false +- enum: ["tcp", "udp", "sctp"] +- example: +- PrivatePort: 8080 +- PublicPort: 80 +- Type: "tcp" +- +- MountType: +- description: |- +- The mount type. Available types: +- +- - `bind` a mount of a file or directory from the host into the container. +- - `cluster` a Swarm cluster volume. +- - `image` an OCI image. +- - `npipe` a named pipe from the host into the container. +- - `tmpfs` a `tmpfs`. +- - `volume` a docker volume with the given `Name`. +- type: "string" +- enum: +- - "bind" +- - "cluster" +- - "image" +- - "npipe" +- - "tmpfs" +- - "volume" +- example: "volume" +- +- MountPoint: +- type: "object" +- description: | +- MountPoint represents a mount point configuration inside the container. +- This is used for reporting the mountpoints in use by a container. +- properties: +- Type: +- description: | +- The mount type: +- +- - `bind` a mount of a file or directory from the host into the container. +- - `cluster` a Swarm cluster volume. +- - `image` an OCI image. +- - `npipe` a named pipe from the host into the container. +- - `tmpfs` a `tmpfs`. +- - `volume` a docker volume with the given `Name`. +- allOf: +- - $ref: "#/definitions/MountType" +- example: "volume" +- Name: +- description: | +- Name is the name reference to the underlying data defined by `Source` +- e.g., the volume name. +- type: "string" +- example: "myvolume" +- Source: +- description: | +- Source location of the mount. +- +- For volumes, this contains the storage location of the volume (within +- `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains +- the source (host) part of the bind-mount. For `tmpfs` mount points, this +- field is empty. +- type: "string" +- example: "/var/lib/docker/volumes/myvolume/_data" +- Destination: +- description: | +- Destination is the path relative to the container root (`/`) where +- the `Source` is mounted inside the container. +- type: "string" +- example: "/usr/share/nginx/html/" +- Driver: +- description: | +- Driver is the volume driver used to create the volume (if it is a volume). +- type: "string" +- example: "local" +- Mode: +- description: | +- Mode is a comma separated list of options supplied by the user when +- creating the bind/volume mount. +- +- The default is platform-specific (`"z"` on Linux, empty on Windows). +- type: "string" +- example: "z" +- RW: +- description: | +- Whether the mount is mounted writable (read-write). +- type: "boolean" +- example: true +- Propagation: +- description: | +- Propagation describes how mounts are propagated from the host into the +- mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) +- for details. This field is not used on Windows. +- type: "string" +- example: "" +- +- DeviceMapping: +- type: "object" +- description: "A device mapping between the host and container" +- properties: +- PathOnHost: +- type: "string" +- PathInContainer: +- type: "string" +- CgroupPermissions: +- type: "string" +- example: +- PathOnHost: "/dev/deviceName" +- PathInContainer: "/dev/deviceName" +- CgroupPermissions: "mrw" +- +- DeviceRequest: +- type: "object" +- description: "A request for devices to be sent to device drivers" +- properties: +- Driver: +- description: | +- The name of the device driver to use for this request. +- +- Note that if this is specified the capabilities are ignored when +- selecting a device driver. +- type: "string" +- example: "nvidia" +- Count: +- type: "integer" +- example: -1 +- DeviceIDs: +- type: "array" +- items: +- type: "string" +- example: +- - "0" +- - "1" +- - "GPU-fef8089b-4820-abfc-e83e-94318197576e" +- Capabilities: +- description: | +- A list of capabilities; an OR list of AND lists of capabilities. +- +- Note that if a driver is specified the capabilities have no effect on +- selecting a driver as the driver name is used directly. +- +- Note that if no driver is specified the capabilities are used to +- select a driver with the required capabilities. +- type: "array" +- items: +- type: "array" +- items: +- type: "string" +- example: +- # gpu AND nvidia AND compute +- - ["gpu", "nvidia", "compute"] +- Options: +- description: | +- Driver-specific options, specified as a key/value pairs. These options +- are passed directly to the driver. +- type: "object" +- additionalProperties: +- type: "string" +- +- ThrottleDevice: +- type: "object" +- properties: +- Path: +- description: "Device path" +- type: "string" +- Rate: +- description: "Rate" +- type: "integer" +- format: "int64" +- minimum: 0 +- +- Mount: +- type: "object" +- properties: +- Target: +- description: "Container path." +- type: "string" +- Source: +- description: |- +- Mount source (e.g. a volume name, a host path). The source cannot be +- specified when using `Type=tmpfs`. For `Type=bind`, the source path +- must either exist, or the `CreateMountpoint` must be set to `true` to +- create the source path on the host if missing. +- +- For `Type=npipe`, the pipe must exist prior to creating the container. +- type: "string" +- Type: +- description: | +- The mount type. Available types: +- +- - `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container. +- - `cluster` a Swarm cluster volume +- - `image` Mounts an image. +- - `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container. +- - `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs. +- - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. +- allOf: +- - $ref: "#/definitions/MountType" +- ReadOnly: +- description: "Whether the mount should be read-only." +- type: "boolean" +- Consistency: +- description: "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." +- type: "string" +- BindOptions: +- description: "Optional configuration for the `bind` type." +- type: "object" +- properties: +- Propagation: +- description: "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`." +- type: "string" +- enum: +- - "private" +- - "rprivate" +- - "shared" +- - "rshared" +- - "slave" +- - "rslave" +- NonRecursive: +- description: "Disable recursive bind mount." +- type: "boolean" +- default: false +- CreateMountpoint: +- description: "Create mount point on host if missing" +- type: "boolean" +- default: false +- ReadOnlyNonRecursive: +- description: | +- Make the mount non-recursively read-only, but still leave the mount recursive +- (unless NonRecursive is set to `true` in conjunction). +- +- Added in v1.44, before that version all read-only mounts were +- non-recursive by default. To match the previous behaviour this +- will default to `true` for clients on versions prior to v1.44. +- type: "boolean" +- default: false +- ReadOnlyForceRecursive: +- description: "Raise an error if the mount cannot be made recursively read-only." +- type: "boolean" +- default: false +- VolumeOptions: +- description: "Optional configuration for the `volume` type." +- type: "object" +- properties: +- NoCopy: +- description: "Populate volume with data from the target." +- type: "boolean" +- default: false +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- DriverConfig: +- description: "Map of driver specific options" +- type: "object" +- properties: +- Name: +- description: "Name of the driver to use to create the volume." +- type: "string" +- Options: +- description: "key/value map of driver specific options." +- type: "object" +- additionalProperties: +- type: "string" +- Subpath: +- description: "Source path inside the volume. Must be relative without any back traversals." +- type: "string" +- example: "dir-inside-volume/subdirectory" +- ImageOptions: +- description: "Optional configuration for the `image` type." +- type: "object" +- properties: +- Subpath: +- description: "Source path inside the image. Must be relative without any back traversals." +- type: "string" +- example: "dir-inside-image/subdirectory" +- TmpfsOptions: +- description: "Optional configuration for the `tmpfs` type." +- type: "object" +- properties: +- SizeBytes: +- description: "The size for the tmpfs mount in bytes." +- type: "integer" +- format: "int64" +- Mode: +- description: | +- The permission mode for the tmpfs mount in an integer. +- The value must not be in octal format (e.g. 755) but rather +- the decimal representation of the octal value (e.g. 493). +- type: "integer" +- Options: +- description: | +- The options to be passed to the tmpfs mount. An array of arrays. +- Flag options should be provided as 1-length arrays. Other types +- should be provided as as 2-length arrays, where the first item is +- the key and the second the value. +- type: "array" +- items: +- type: "array" +- minItems: 1 +- maxItems: 2 +- items: +- type: "string" +- example: +- [["noexec"]] +- +- RestartPolicy: +- description: | +- The behavior to apply when the container exits. The default is not to +- restart. +- +- An ever increasing delay (double the previous delay, starting at 100ms) is +- added before each restart to prevent flooding the server. +- type: "object" +- properties: +- Name: +- type: "string" +- description: | +- - Empty string means not to restart +- - `no` Do not automatically restart +- - `always` Always restart +- - `unless-stopped` Restart always except when the user has manually stopped the container +- - `on-failure` Restart only when the container exit code is non-zero +- enum: +- - "" +- - "no" +- - "always" +- - "unless-stopped" +- - "on-failure" +- MaximumRetryCount: +- type: "integer" +- description: | +- If `on-failure` is used, the number of times to retry before giving up. +- +- Resources: +- description: "A container's resources (cgroups config, ulimits, etc)" +- type: "object" +- properties: +- # Applicable to all platforms +- CpuShares: +- description: | +- An integer value representing this container's relative CPU weight +- versus other containers. +- type: "integer" +- Memory: +- description: "Memory limit in bytes." +- type: "integer" +- format: "int64" +- default: 0 +- # Applicable to UNIX platforms +- CgroupParent: +- description: | +- Path to `cgroups` under which the container's `cgroup` is created. If +- the path is not absolute, the path is considered to be relative to the +- `cgroups` path of the init process. Cgroups are created if they do not +- already exist. +- type: "string" +- BlkioWeight: +- description: "Block IO weight (relative weight)." +- type: "integer" +- minimum: 0 +- maximum: 1000 +- BlkioWeightDevice: +- description: | +- Block IO weight (relative device weight) in the form: +- +- ``` +- [{"Path": "device_path", "Weight": weight}] +- ``` +- type: "array" +- items: +- type: "object" +- properties: +- Path: +- type: "string" +- Weight: +- type: "integer" +- minimum: 0 +- BlkioDeviceReadBps: +- description: | +- Limit read rate (bytes per second) from a device, in the form: +- +- ``` +- [{"Path": "device_path", "Rate": rate}] +- ``` +- type: "array" +- items: +- $ref: "#/definitions/ThrottleDevice" +- BlkioDeviceWriteBps: +- description: | +- Limit write rate (bytes per second) to a device, in the form: +- +- ``` +- [{"Path": "device_path", "Rate": rate}] +- ``` +- type: "array" +- items: +- $ref: "#/definitions/ThrottleDevice" +- BlkioDeviceReadIOps: +- description: | +- Limit read rate (IO per second) from a device, in the form: +- +- ``` +- [{"Path": "device_path", "Rate": rate}] +- ``` +- type: "array" +- items: +- $ref: "#/definitions/ThrottleDevice" +- BlkioDeviceWriteIOps: +- description: | +- Limit write rate (IO per second) to a device, in the form: +- +- ``` +- [{"Path": "device_path", "Rate": rate}] +- ``` +- type: "array" +- items: +- $ref: "#/definitions/ThrottleDevice" +- CpuPeriod: +- description: "The length of a CPU period in microseconds." +- type: "integer" +- format: "int64" +- CpuQuota: +- description: | +- Microseconds of CPU time that the container can get in a CPU period. +- type: "integer" +- format: "int64" +- CpuRealtimePeriod: +- description: | +- The length of a CPU real-time period in microseconds. Set to 0 to +- allocate no time allocated to real-time tasks. +- type: "integer" +- format: "int64" +- CpuRealtimeRuntime: +- description: | +- The length of a CPU real-time runtime in microseconds. Set to 0 to +- allocate no time allocated to real-time tasks. +- type: "integer" +- format: "int64" +- CpusetCpus: +- description: | +- CPUs in which to allow execution (e.g., `0-3`, `0,1`). +- type: "string" +- example: "0-3" +- CpusetMems: +- description: | +- Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only +- effective on NUMA systems. +- type: "string" +- Devices: +- description: "A list of devices to add to the container." +- type: "array" +- items: +- $ref: "#/definitions/DeviceMapping" +- DeviceCgroupRules: +- description: "a list of cgroup rules to apply to the container" +- type: "array" +- items: +- type: "string" +- example: "c 13:* rwm" +- DeviceRequests: +- description: | +- A list of requests for devices to be sent to device drivers. +- type: "array" +- items: +- $ref: "#/definitions/DeviceRequest" +- MemoryReservation: +- description: "Memory soft limit in bytes." +- type: "integer" +- format: "int64" +- MemorySwap: +- description: | +- Total memory limit (memory + swap). Set as `-1` to enable unlimited +- swap. +- type: "integer" +- format: "int64" +- MemorySwappiness: +- description: | +- Tune a container's memory swappiness behavior. Accepts an integer +- between 0 and 100. +- type: "integer" +- format: "int64" +- minimum: 0 +- maximum: 100 +- NanoCpus: +- description: "CPU quota in units of 10-9 CPUs." +- type: "integer" +- format: "int64" +- OomKillDisable: +- description: "Disable OOM Killer for the container." +- type: "boolean" +- Init: +- description: | +- Run an init inside the container that forwards signals and reaps +- processes. This field is omitted if empty, and the default (as +- configured on the daemon) is used. +- type: "boolean" +- x-nullable: true +- PidsLimit: +- description: | +- Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` +- to not change. +- type: "integer" +- format: "int64" +- x-nullable: true +- Ulimits: +- description: | +- A list of resource limits to set in the container. For example: +- +- ``` +- {"Name": "nofile", "Soft": 1024, "Hard": 2048} +- ``` +- type: "array" +- items: +- type: "object" +- properties: +- Name: +- description: "Name of ulimit" +- type: "string" +- Soft: +- description: "Soft limit" +- type: "integer" +- Hard: +- description: "Hard limit" +- type: "integer" +- # Applicable to Windows +- CpuCount: +- description: | +- The number of usable CPUs (Windows only). +- +- On Windows Server containers, the processor resource controls are +- mutually exclusive. The order of precedence is `CPUCount` first, then +- `CPUShares`, and `CPUPercent` last. +- type: "integer" +- format: "int64" +- CpuPercent: +- description: | +- The usable percentage of the available CPUs (Windows only). +- +- On Windows Server containers, the processor resource controls are +- mutually exclusive. The order of precedence is `CPUCount` first, then +- `CPUShares`, and `CPUPercent` last. +- type: "integer" +- format: "int64" +- IOMaximumIOps: +- description: "Maximum IOps for the container system drive (Windows only)" +- type: "integer" +- format: "int64" +- IOMaximumBandwidth: +- description: | +- Maximum IO in bytes per second for the container system drive +- (Windows only). +- type: "integer" +- format: "int64" +- +- Limit: +- description: | +- An object describing a limit on resources which can be requested by a task. +- type: "object" +- properties: +- NanoCPUs: +- type: "integer" +- format: "int64" +- example: 4000000000 +- MemoryBytes: +- type: "integer" +- format: "int64" +- example: 8272408576 +- Pids: +- description: | +- Limits the maximum number of PIDs in the container. Set `0` for unlimited. +- type: "integer" +- format: "int64" +- default: 0 +- example: 100 +- +- ResourceObject: +- description: | +- An object describing the resources which can be advertised by a node and +- requested by a task. +- type: "object" +- properties: +- NanoCPUs: +- type: "integer" +- format: "int64" +- example: 4000000000 +- MemoryBytes: +- type: "integer" +- format: "int64" +- example: 8272408576 +- GenericResources: +- $ref: "#/definitions/GenericResources" +- +- GenericResources: +- description: | +- User-defined resources can be either Integer resources (e.g, `SSD=3`) or +- String resources (e.g, `GPU=UUID1`). +- type: "array" +- items: +- type: "object" +- properties: +- NamedResourceSpec: +- type: "object" +- properties: +- Kind: +- type: "string" +- Value: +- type: "string" +- DiscreteResourceSpec: +- type: "object" +- properties: +- Kind: +- type: "string" +- Value: +- type: "integer" +- format: "int64" +- example: +- - DiscreteResourceSpec: +- Kind: "SSD" +- Value: 3 +- - NamedResourceSpec: +- Kind: "GPU" +- Value: "UUID1" +- - NamedResourceSpec: +- Kind: "GPU" +- Value: "UUID2" +- +- HealthConfig: +- description: | +- A test to perform to check that the container is healthy. +- Healthcheck commands should be side-effect free. +- type: "object" +- properties: +- Test: +- description: | +- The test to perform. Possible values are: +- +- - `[]` inherit healthcheck from image or parent image +- - `["NONE"]` disable healthcheck +- - `["CMD", args...]` exec arguments directly +- - `["CMD-SHELL", command]` run command with system's default shell +- +- A non-zero exit code indicates a failed healthcheck: +- - `0` healthy +- - `1` unhealthy +- - `2` reserved (treated as unhealthy) +- - other values: error running probe +- type: "array" +- items: +- type: "string" +- Interval: +- description: | +- The time to wait between checks in nanoseconds. It should be 0 or at +- least 1000000 (1 ms). 0 means inherit. +- type: "integer" +- format: "int64" +- Timeout: +- description: | +- The time to wait before considering the check to have hung. It should +- be 0 or at least 1000000 (1 ms). 0 means inherit. +- +- If the health check command does not complete within this timeout, +- the check is considered failed and the health check process is +- forcibly terminated without a graceful shutdown. +- type: "integer" +- format: "int64" +- Retries: +- description: | +- The number of consecutive failures needed to consider a container as +- unhealthy. 0 means inherit. +- type: "integer" +- StartPeriod: +- description: | +- Start period for the container to initialize before starting +- health-retries countdown in nanoseconds. It should be 0 or at least +- 1000000 (1 ms). 0 means inherit. +- type: "integer" +- format: "int64" +- StartInterval: +- description: | +- The time to wait between checks in nanoseconds during the start period. +- It should be 0 or at least 1000000 (1 ms). 0 means inherit. +- type: "integer" +- format: "int64" +- +- Health: +- description: | +- Health stores information about the container's healthcheck results. +- type: "object" +- x-nullable: true +- properties: +- Status: +- description: | +- Status is one of `none`, `starting`, `healthy` or `unhealthy` +- +- - "none" Indicates there is no healthcheck +- - "starting" Starting indicates that the container is not yet ready +- - "healthy" Healthy indicates that the container is running correctly +- - "unhealthy" Unhealthy indicates that the container has a problem +- type: "string" +- enum: +- - "none" +- - "starting" +- - "healthy" +- - "unhealthy" +- example: "healthy" +- FailingStreak: +- description: "FailingStreak is the number of consecutive failures" +- type: "integer" +- example: 0 +- Log: +- type: "array" +- description: | +- Log contains the last few results (oldest first) +- items: +- $ref: "#/definitions/HealthcheckResult" +- +- HealthcheckResult: +- description: | +- HealthcheckResult stores information about a single run of a healthcheck probe +- type: "object" +- x-nullable: true +- properties: +- Start: +- description: | +- Date and time at which this check started in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "date-time" +- example: "2020-01-04T10:44:24.496525531Z" +- End: +- description: | +- Date and time at which this check ended in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2020-01-04T10:45:21.364524523Z" +- ExitCode: +- description: | +- ExitCode meanings: +- +- - `0` healthy +- - `1` unhealthy +- - `2` reserved (considered unhealthy) +- - other values: error running probe +- type: "integer" +- example: 0 +- Output: +- description: "Output from last check" +- type: "string" +- +- HostConfig: +- description: "Container configuration that depends on the host we are running on" +- allOf: +- - $ref: "#/definitions/Resources" +- - type: "object" +- properties: +- # Applicable to all platforms +- Binds: +- type: "array" +- description: | +- A list of volume bindings for this container. Each volume binding +- is a string in one of these forms: +- +- - `host-src:container-dest[:options]` to bind-mount a host path +- into the container. Both `host-src`, and `container-dest` must +- be an _absolute_ path. +- - `volume-name:container-dest[:options]` to bind-mount a volume +- managed by a volume driver into the container. `container-dest` +- must be an _absolute_ path. +- +- `options` is an optional, comma-delimited list of: +- +- - `nocopy` disables automatic copying of data from the container +- path to the volume. The `nocopy` flag only applies to named volumes. +- - `[ro|rw]` mounts a volume read-only or read-write, respectively. +- If omitted or set to `rw`, volumes are mounted read-write. +- - `[z|Z]` applies SELinux labels to allow or deny multiple containers +- to read and write to the same volume. +- - `z`: a _shared_ content label is applied to the content. This +- label indicates that multiple containers can share the volume +- content, for both reading and writing. +- - `Z`: a _private unshared_ label is applied to the content. +- This label indicates that only the current container can use +- a private volume. Labeling systems such as SELinux require +- proper labels to be placed on volume content that is mounted +- into a container. Without a label, the security system can +- prevent a container's processes from using the content. By +- default, the labels set by the host operating system are not +- modified. +- - `[[r]shared|[r]slave|[r]private]` specifies mount +- [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). +- This only applies to bind-mounted volumes, not internal volumes +- or named volumes. Mount propagation requires the source mount +- point (the location where the source directory is mounted in the +- host operating system) to have the correct propagation properties. +- For shared volumes, the source mount point must be set to `shared`. +- For slave volumes, the mount must be set to either `shared` or +- `slave`. +- items: +- type: "string" +- ContainerIDFile: +- type: "string" +- description: "Path to a file where the container ID is written" +- example: "" +- LogConfig: +- type: "object" +- description: "The logging configuration for this container" +- properties: +- Type: +- description: |- +- Name of the logging driver used for the container or "none" +- if logging is disabled. +- type: "string" +- enum: +- - "local" +- - "json-file" +- - "syslog" +- - "journald" +- - "gelf" +- - "fluentd" +- - "awslogs" +- - "splunk" +- - "etwlogs" +- - "none" +- Config: +- description: |- +- Driver-specific configuration options for the logging driver. +- type: "object" +- additionalProperties: +- type: "string" +- example: +- "max-file": "5" +- "max-size": "10m" +- NetworkMode: +- type: "string" +- description: | +- Network mode to use for this container. Supported standard values +- are: `bridge`, `host`, `none`, and `container:`. Any +- other value is taken as a custom network's name to which this +- container should connect to. +- PortBindings: +- $ref: "#/definitions/PortMap" +- RestartPolicy: +- $ref: "#/definitions/RestartPolicy" +- AutoRemove: +- type: "boolean" +- description: | +- Automatically remove the container when the container's process +- exits. This has no effect if `RestartPolicy` is set. +- VolumeDriver: +- type: "string" +- description: "Driver that this container uses to mount volumes." +- VolumesFrom: +- type: "array" +- description: | +- A list of volumes to inherit from another container, specified in +- the form `[:]`. +- items: +- type: "string" +- Mounts: +- description: | +- Specification for mounts to be added to the container. +- type: "array" +- items: +- $ref: "#/definitions/Mount" +- ConsoleSize: +- type: "array" +- description: | +- Initial console size, as an `[height, width]` array. +- x-nullable: true +- minItems: 2 +- maxItems: 2 +- items: +- type: "integer" +- minimum: 0 +- example: [80, 64] +- Annotations: +- type: "object" +- description: | +- Arbitrary non-identifying metadata attached to container and +- provided to the runtime when the container is started. +- additionalProperties: +- type: "string" +- +- # Applicable to UNIX platforms +- CapAdd: +- type: "array" +- description: | +- A list of kernel capabilities to add to the container. Conflicts +- with option 'Capabilities'. +- items: +- type: "string" +- CapDrop: +- type: "array" +- description: | +- A list of kernel capabilities to drop from the container. Conflicts +- with option 'Capabilities'. +- items: +- type: "string" +- CgroupnsMode: +- type: "string" +- enum: +- - "private" +- - "host" +- description: | +- cgroup namespace mode for the container. Possible values are: +- +- - `"private"`: the container runs in its own private cgroup namespace +- - `"host"`: use the host system's cgroup namespace +- +- If not specified, the daemon default is used, which can either be `"private"` +- or `"host"`, depending on daemon version, kernel support and configuration. +- Dns: +- type: "array" +- description: "A list of DNS servers for the container to use." +- items: +- type: "string" +- format: "ip-address" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- DnsOptions: +- type: "array" +- description: "A list of DNS options." +- items: +- type: "string" +- DnsSearch: +- type: "array" +- description: "A list of DNS search domains." +- items: +- type: "string" +- ExtraHosts: +- type: "array" +- description: | +- A list of hostnames/IP mappings to add to the container's `/etc/hosts` +- file. Specified in the form `["hostname:IP"]`. +- items: +- type: "string" +- GroupAdd: +- type: "array" +- description: | +- A list of additional groups that the container process will run as. +- items: +- type: "string" +- IpcMode: +- type: "string" +- description: | +- IPC sharing mode for the container. Possible values are: +- +- - `"none"`: own private IPC namespace, with /dev/shm not mounted +- - `"private"`: own private IPC namespace +- - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers +- - `"container:"`: join another (shareable) container's IPC namespace +- - `"host"`: use the host system's IPC namespace +- +- If not specified, daemon default is used, which can either be `"private"` +- or `"shareable"`, depending on daemon version and configuration. +- Cgroup: +- type: "string" +- description: "Cgroup to use for the container." +- Links: +- type: "array" +- description: | +- A list of links for the container in the form `container_name:alias`. +- items: +- type: "string" +- OomScoreAdj: +- type: "integer" +- description: | +- An integer value containing the score given to the container in +- order to tune OOM killer preferences. +- example: 500 +- PidMode: +- type: "string" +- description: | +- Set the PID (Process) Namespace mode for the container. It can be +- either: +- +- - `"container:"`: joins another container's PID namespace +- - `"host"`: use the host's PID namespace inside the container +- Privileged: +- type: "boolean" +- description: |- +- Gives the container full access to the host. +- PublishAllPorts: +- type: "boolean" +- description: | +- Allocates an ephemeral host port for all of a container's +- exposed ports. +- +- Ports are de-allocated when the container stops and allocated when +- the container starts. The allocated port might be changed when +- restarting the container. +- +- The port is selected from the ephemeral port range that depends on +- the kernel. For example, on Linux the range is defined by +- `/proc/sys/net/ipv4/ip_local_port_range`. +- ReadonlyRootfs: +- type: "boolean" +- description: "Mount the container's root filesystem as read only." +- SecurityOpt: +- type: "array" +- description: | +- A list of string values to customize labels for MLS systems, such +- as SELinux. +- items: +- type: "string" +- StorageOpt: +- type: "object" +- description: | +- Storage driver options for this container, in the form `{"size": "120G"}`. +- additionalProperties: +- type: "string" +- Tmpfs: +- type: "object" +- description: | +- A map of container directories which should be replaced by tmpfs +- mounts, and their corresponding mount options. For example: +- +- ``` +- { "/run": "rw,noexec,nosuid,size=65536k" } +- ``` +- additionalProperties: +- type: "string" +- UTSMode: +- type: "string" +- description: "UTS namespace to use for the container." +- UsernsMode: +- type: "string" +- description: | +- Sets the usernamespace mode for the container when usernamespace +- remapping option is enabled. +- ShmSize: +- type: "integer" +- format: "int64" +- description: | +- Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. +- minimum: 0 +- Sysctls: +- type: "object" +- x-nullable: true +- description: |- +- A list of kernel parameters (sysctls) to set in the container. +- +- This field is omitted if not set. +- additionalProperties: +- type: "string" +- example: +- "net.ipv4.ip_forward": "1" +- Runtime: +- type: "string" +- x-nullable: true +- description: |- +- Runtime to use with this container. +- Umask: +- type: "integer" +- format: "uint32" +- x-nullable: true +- description: |- +- Set the initial umask for a Unix container. +- +- If omitted, the daemon does not set a umask in the OCI process +- specification, and the runtime's default behavior applies. +- +- JSON integers are decimal. For example, use `18` for the octal +- umask `0022`, and `511` for the octal umask `0777`. +- # Applicable to Windows +- Isolation: +- type: "string" +- description: | +- Isolation technology of the container. (Windows only) +- enum: +- - "default" +- - "process" +- - "hyperv" +- - "" +- MaskedPaths: +- type: "array" +- description: | +- The list of paths to be masked inside the container (this overrides +- the default set of paths). +- items: +- type: "string" +- example: +- - "/proc/asound" +- - "/proc/acpi" +- - "/proc/kcore" +- - "/proc/keys" +- - "/proc/latency_stats" +- - "/proc/timer_list" +- - "/proc/timer_stats" +- - "/proc/sched_debug" +- - "/proc/scsi" +- - "/sys/firmware" +- - "/sys/devices/virtual/powercap" +- ReadonlyPaths: +- type: "array" +- description: | +- The list of paths to be set as read-only inside the container +- (this overrides the default set of paths). +- items: +- type: "string" +- example: +- - "/proc/bus" +- - "/proc/fs" +- - "/proc/irq" +- - "/proc/sys" +- - "/proc/sysrq-trigger" +- +- ContainerConfig: +- description: | +- Configuration for a container that is portable between hosts. +- type: "object" +- properties: +- Hostname: +- description: | +- The hostname to use for the container, as a valid RFC 1123 hostname. +- type: "string" +- example: "439f4e91bd1d" +- Domainname: +- description: | +- The domain name to use for the container. +- type: "string" +- User: +- description: |- +- Commands run as this user inside the container. If omitted, commands +- run as the user specified in the image the container was started from. +- +- Can be either user-name or UID, and optional group-name or GID, +- separated by a colon (`[<:group-name|GID>]`). +- type: "string" +- example: "123:456" +- AttachStdin: +- description: "Whether to attach to `stdin`." +- type: "boolean" +- default: false +- AttachStdout: +- description: "Whether to attach to `stdout`." +- type: "boolean" +- default: true +- AttachStderr: +- description: "Whether to attach to `stderr`." +- type: "boolean" +- default: true +- ExposedPorts: +- description: | +- An object mapping ports to an empty object in the form: +- +- `{"/": {}}` +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "object" +- enum: +- - {} +- default: {} +- example: { +- "80/tcp": {}, +- "443/tcp": {} +- } +- Tty: +- description: | +- Attach standard streams to a TTY, including `stdin` if it is not closed. +- type: "boolean" +- default: false +- OpenStdin: +- description: "Open `stdin`" +- type: "boolean" +- default: false +- StdinOnce: +- description: "Close `stdin` after one attached client disconnects" +- type: "boolean" +- default: false +- Env: +- description: | +- A list of environment variables to set inside the container in the +- form `["VAR=value", ...]`. A variable without `=` is removed from the +- environment, rather than to have an empty value. +- type: "array" +- items: +- type: "string" +- example: +- - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +- Cmd: +- description: | +- Command to run specified as a string or an array of strings. +- type: "array" +- items: +- type: "string" +- example: ["/bin/sh"] +- Healthcheck: +- $ref: "#/definitions/HealthConfig" +- ArgsEscaped: +- description: "Command is already escaped (Windows only)" +- type: "boolean" +- default: false +- example: false +- x-nullable: true +- Image: +- description: | +- The name (or reference) of the image to use when creating the container, +- or which was used when the container was created. +- type: "string" +- example: "example-image:1.0" +- Volumes: +- description: | +- An object mapping mount point paths inside the container to empty +- objects. +- type: "object" +- additionalProperties: +- type: "object" +- enum: +- - {} +- default: {} +- WorkingDir: +- description: "The working directory for commands to run in." +- type: "string" +- example: "/public/" +- Entrypoint: +- description: | +- The entry point for the container as a string or an array of strings. +- +- If the array consists of exactly one empty string (`[""]`) then the +- entry point is reset to system default (i.e., the entry point used by +- docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). +- type: "array" +- items: +- type: "string" +- example: [] +- NetworkDisabled: +- description: "Disable networking for the container." +- type: "boolean" +- x-nullable: true +- OnBuild: +- description: | +- `ONBUILD` metadata that were defined in the image's `Dockerfile`. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: [] +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- StopSignal: +- description: | +- Signal to stop a container as a string or unsigned integer. +- type: "string" +- example: "SIGTERM" +- x-nullable: true +- StopTimeout: +- description: | +- Timeout to stop a container in seconds. If omitted, the daemon-wide +- default (`default-stop-timeout`) is used. +- type: "integer" +- x-nullable: true +- Shell: +- description: | +- Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: ["/bin/sh", "-c"] +- +- ImageConfig: +- description: | +- Configuration of the image. These fields are used as defaults +- when starting a container from the image. +- type: "object" +- properties: +- User: +- description: "The user that commands are run as inside the container." +- type: "string" +- example: "web:web" +- ExposedPorts: +- description: | +- An object mapping ports to an empty object in the form: +- +- `{"/": {}}` +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "object" +- enum: +- - {} +- default: {} +- example: { +- "80/tcp": {}, +- "443/tcp": {} +- } +- Env: +- description: | +- A list of environment variables to set inside the container in the +- form `["VAR=value", ...]`. A variable without `=` is removed from the +- environment, rather than to have an empty value. +- type: "array" +- items: +- type: "string" +- example: +- - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +- Cmd: +- description: | +- Command to run specified as a string or an array of strings. +- type: "array" +- items: +- type: "string" +- example: ["/bin/sh"] +- Healthcheck: +- $ref: "#/definitions/HealthConfig" +- ArgsEscaped: +- description: "Command is already escaped (Windows only)" +- type: "boolean" +- default: false +- example: false +- x-nullable: true +- Volumes: +- description: | +- An object mapping mount point paths inside the container to empty +- objects. +- type: "object" +- additionalProperties: +- type: "object" +- enum: +- - {} +- default: {} +- example: +- "/app/data": {} +- "/app/config": {} +- WorkingDir: +- description: "The working directory for commands to run in." +- type: "string" +- example: "/public/" +- Entrypoint: +- description: | +- The entry point for the container as a string or an array of strings. +- +- If the array consists of exactly one empty string (`[""]`) then the +- entry point is reset to system default (i.e., the entry point used by +- docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). +- type: "array" +- items: +- type: "string" +- example: [] +- OnBuild: +- description: | +- `ONBUILD` metadata that were defined in the image's `Dockerfile`. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: [] +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- StopSignal: +- description: | +- Signal to stop a container as a string or unsigned integer. +- type: "string" +- example: "SIGTERM" +- x-nullable: true +- Shell: +- description: | +- Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: ["/bin/sh", "-c"] +- +- NetworkingConfig: +- description: | +- NetworkingConfig represents the container's networking configuration for +- each of its interfaces. +- It is used for the networking configs specified in the `docker create` +- and `docker network connect` commands. +- type: "object" +- properties: +- EndpointsConfig: +- description: | +- A mapping of network name to endpoint configuration for that network. +- The endpoint configuration can be left empty to connect to that +- network with no particular endpoint configuration. +- type: "object" +- additionalProperties: +- $ref: "#/definitions/EndpointSettings" +- example: +- # putting an example here, instead of using the example values from +- # /definitions/EndpointSettings, because EndpointSettings contains +- # operational data returned when inspecting a container that we don't +- # accept here. +- EndpointsConfig: +- isolated_nw: +- IPAMConfig: +- IPv4Address: "172.20.30.33" +- IPv6Address: "2001:db8:abcd::3033" +- LinkLocalIPs: +- - "169.254.34.68" +- - "fe80::3468" +- MacAddress: "02:42:ac:12:05:02" +- Links: +- - "container_1" +- - "container_2" +- Aliases: +- - "server_x" +- - "server_y" +- database_nw: {} +- +- NetworkSettings: +- description: "NetworkSettings exposes the network settings in the API" +- type: "object" +- properties: +- SandboxID: +- description: SandboxID uniquely represents a container's network stack. +- type: "string" +- example: "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" +- SandboxKey: +- description: SandboxKey is the full path of the netns handle +- type: "string" +- example: "/var/run/docker/netns/8ab54b426c38" +- Ports: +- $ref: "#/definitions/PortMap" +- Networks: +- description: | +- Information about all networks that the container is connected to. +- type: "object" +- additionalProperties: +- $ref: "#/definitions/EndpointSettings" +- +- Address: +- description: Address represents an IPv4 or IPv6 IP address. +- type: "object" +- properties: +- Addr: +- description: IP address. +- type: "string" +- PrefixLen: +- description: Mask length of the IP address. +- type: "integer" +- +- PortMap: +- description: | +- PortMap describes the mapping of container ports to host ports, using the +- container's port-number and protocol as key in the format `/`, +- for example, `80/udp`. +- +- If a container's port is mapped for multiple protocols, separate entries +- are added to the mapping table. +- type: "object" +- additionalProperties: +- type: "array" +- x-nullable: true +- items: +- $ref: "#/definitions/PortBinding" +- example: +- "443/tcp": +- - HostIp: "127.0.0.1" +- HostPort: "4443" +- "80/tcp": +- - HostIp: "0.0.0.0" +- HostPort: "80" +- - HostIp: "0.0.0.0" +- HostPort: "8080" +- "80/udp": +- - HostIp: "0.0.0.0" +- HostPort: "80" +- "53/udp": +- - HostIp: "0.0.0.0" +- HostPort: "53" +- "2377/tcp": null +- +- PortBinding: +- description: | +- PortBinding represents a binding between a host IP address and a host +- port. +- type: "object" +- properties: +- HostIp: +- description: "Host IP address that the container's port is mapped to." +- type: "string" +- example: "127.0.0.1" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- HostPort: +- description: "Host port number that the container's port is mapped to." +- type: "string" +- example: "4443" +- +- DriverData: +- description: | +- Information about the storage driver used to store the container's and +- image's filesystem. +- type: "object" +- required: [Name, Data] +- properties: +- Name: +- description: "Name of the storage driver." +- type: "string" +- x-nullable: false +- example: "overlay2" +- Data: +- description: | +- Low-level storage metadata, provided as key/value pairs. +- +- This information is driver-specific, and depends on the storage-driver +- in use, and should be used for informational purposes only. +- type: "object" +- x-nullable: false +- additionalProperties: +- type: "string" +- example: { +- "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", +- "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", +- "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" +- } +- +- Storage: +- description: | +- Information about the storage used by the container. +- type: "object" +- properties: +- RootFS: +- description: | +- Information about the storage used for the container's root filesystem. +- type: "object" +- x-nullable: true +- $ref: "#/definitions/RootFSStorage" +- +- RootFSStorage: +- description: | +- Information about the storage used for the container's root filesystem. +- type: "object" +- x-go-name: RootFSStorage +- properties: +- Snapshot: +- description: | +- Information about the snapshot used for the container's root filesystem. +- type: "object" +- x-nullable: true +- $ref: "#/definitions/RootFSStorageSnapshot" +- +- RootFSStorageSnapshot: +- description: | +- Information about a snapshot backend of the container's root filesystem. +- type: "object" +- x-go-name: RootFSStorageSnapshot +- properties: +- Name: +- description: "Name of the snapshotter." +- type: "string" +- x-nullable: false +- +- FilesystemChange: +- description: | +- Change in the container's filesystem. +- type: "object" +- required: [Path, Kind] +- properties: +- Path: +- description: | +- Path to file or directory that has changed. +- type: "string" +- x-nullable: false +- Kind: +- $ref: "#/definitions/ChangeType" +- +- ChangeType: +- description: | +- Kind of change +- +- Can be one of: +- +- - `0`: Modified ("C") +- - `1`: Added ("A") +- - `2`: Deleted ("D") +- type: "integer" +- format: "uint8" +- enum: [0, 1, 2] +- x-nullable: false +- +- ImageInspect: +- description: | +- Information about an image in the local image cache. +- type: "object" +- properties: +- Id: +- description: | +- ID is the content-addressable ID of an image. +- +- This identifier is a content-addressable digest calculated from the +- image's configuration (which includes the digests of layers used by +- the image). +- +- Note that this digest differs from the `RepoDigests` below, which +- holds digests of image manifests that reference the image. +- type: "string" +- x-nullable: false +- example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" +- Descriptor: +- description: | +- Descriptor is an OCI descriptor of the image target. +- In case of a multi-platform image, this descriptor points to the OCI index +- or a manifest list. +- +- This field is only present if the daemon provides a multi-platform image store. +- +- WARNING: This is experimental and may change at any time without any backward +- compatibility. +- x-nullable: true +- $ref: "#/definitions/OCIDescriptor" +- Manifests: +- description: | +- Manifests is a list of image manifests available in this image. It +- provides a more detailed view of the platform-specific image manifests or +- other image-attached data like build attestations. +- +- Only available if the daemon provides a multi-platform image store +- and the `manifests` option is set in the inspect request. +- +- WARNING: This is experimental and may change at any time without any backward +- compatibility. +- type: "array" +- x-nullable: true +- items: +- $ref: "#/definitions/ImageManifestSummary" +- Identity: +- description: |- +- Identity holds information about the identity and origin of the image. +- This is trusted information verified by the daemon and cannot be modified +- by tagging an image to a different name. +- x-nullable: true +- $ref: "#/definitions/Identity" +- RepoTags: +- description: | +- List of image names/tags in the local image cache that reference this +- image. +- +- Multiple image tags can refer to the same image, and this list may be +- empty if no tags reference the image, in which case the image is +- "untagged", in which case it can still be referenced by its ID. +- type: "array" +- items: +- type: "string" +- example: +- - "example:1.0" +- - "example:latest" +- - "example:stable" +- - "internal.registry.example.com:5000/example:1.0" +- RepoDigests: +- description: | +- List of content-addressable digests of locally available image manifests +- that the image is referenced from. Multiple manifests can refer to the +- same image. +- +- These digests are usually only available if the image was either pulled +- from a registry, or if the image was pushed to a registry, which is when +- the manifest is generated and its digest calculated. +- type: "array" +- items: +- type: "string" +- example: +- - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb" +- - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" +- Comment: +- description: | +- Optional message that was set when committing or importing the image. +- type: "string" +- x-nullable: true +- example: "" +- Created: +- description: | +- Date and time at which the image was created, formatted in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- +- This information is only available if present in the image, +- and omitted otherwise. +- type: "string" +- format: "dateTime" +- x-nullable: true +- example: "2022-02-04T21:20:12.497794809Z" +- Author: +- description: | +- Name of the author that was specified when committing the image, or as +- specified through MAINTAINER (deprecated) in the Dockerfile. +- type: "string" +- x-nullable: true +- example: "" +- Config: +- $ref: "#/definitions/ImageConfig" +- Architecture: +- description: | +- Hardware CPU architecture that the image runs on. +- type: "string" +- x-nullable: false +- example: "arm" +- Variant: +- description: | +- CPU architecture variant (presently ARM-only). +- type: "string" +- x-nullable: true +- example: "v7" +- Os: +- description: | +- Operating System the image is built to run on. +- type: "string" +- x-nullable: false +- example: "linux" +- OsVersion: +- description: | +- Operating System version the image is built to run on (especially +- for Windows). +- type: "string" +- example: "" +- x-nullable: true +- Size: +- description: | +- Total size of the image variant, including all layers it is composed of. +- +- For multi-platform images, this is the size of the platform variant +- selected by the `platform` query parameter. If no platform is specified, +- the daemon selects a platform as described in the `platform` parameter. +- +- When using the containerd image store, this includes both the image content +- that's present locally and the unpacked snapshot data for the selected +- variant. +- +- Image data may be shared between images, so this size does not indicate +- how much space would be reclaimed by deleting the image. +- type: "integer" +- format: "int64" +- x-nullable: false +- example: 1239828 +- GraphDriver: +- x-nullable: true +- $ref: "#/definitions/DriverData" +- RootFS: +- description: | +- Information about the image's RootFS, including the layer IDs. +- type: "object" +- required: [Type] +- properties: +- Type: +- type: "string" +- x-nullable: false +- example: "layers" +- Layers: +- type: "array" +- items: +- type: "string" +- example: +- - "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6" +- - "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" +- Metadata: +- description: | +- Additional metadata of the image in the local cache. This information +- is local to the daemon, and not part of the image itself. +- type: "object" +- properties: +- LastTagTime: +- description: | +- Date and time at which the image was last tagged in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- +- This information is only available if the image was tagged locally, +- and omitted otherwise. +- type: "string" +- format: "dateTime" +- example: "2022-02-28T14:40:02.623929178Z" +- x-nullable: true +- +- Identity: +- description: |- +- Identity holds information about the identity and origin of the image. +- This is trusted information verified by the daemon and cannot be modified +- by tagging an image to a different name. +- type: "object" +- properties: +- Signature: +- description: |- +- Signature contains the properties of verified signatures for the image. +- type: "array" +- items: +- $ref: "#/definitions/SignatureIdentity" +- Pull: +- description: |- +- Pull contains remote location information if image was created via pull. +- If image was pulled via mirror, this contains the original repository location. +- After successful push this images also contains the pushed repository location. +- type: "array" +- items: +- $ref: "#/definitions/PullIdentity" +- Build: +- description: |- +- Build contains build reference information if image was created via build. +- type: "array" +- items: +- $ref: "#/definitions/BuildIdentity" +- +- BuildIdentity: +- description: |- +- BuildIdentity contains build reference information if image was created via build. +- type: "object" +- properties: +- Ref: +- description: |- +- Ref is the identifier for the build request. This reference can be used to +- look up the build details in BuildKit history API. +- type: "string" +- CreatedAt: +- description: |- +- CreatedAt is the time when the build ran. +- type: "string" +- format: "date-time" +- +- PullIdentity: +- description: |- +- PullIdentity contains remote location information if image was created via pull. +- If image was pulled via mirror, this contains the original repository location. +- type: "object" +- properties: +- Repository: +- description: |- +- Repository is the remote repository location the image was pulled from. +- type: "string" +- +- SignatureIdentity: +- description: |- +- SignatureIdentity contains the properties of verified signatures for the image. +- type: "object" +- properties: +- Name: +- description: |- +- Name is a textual description summarizing the type of signature. +- type: "string" +- Timestamps: +- description: |- +- Timestamps contains a list of verified signed timestamps for the signature. +- type: "array" +- items: +- $ref: "#/definitions/SignatureTimestamp" +- KnownSigner: +- description: |- +- KnownSigner is an identifier for a special signer identity that is known to the implementation. +- $ref: "#/definitions/KnownSignerIdentity" +- DockerReference: +- description: |- +- DockerReference is the Docker image reference associated with the signature. +- This is an optional field only present in older hashedrecord signatures. +- type: "string" +- Signer: +- description: |- +- Signer contains information about the signer certificate used to sign the image. +- $ref: "#/definitions/SignerIdentity" +- SignatureType: +- description: |- +- SignatureType is the type of signature format. E.g. "bundle-v0.3" or "hashedrecord". +- $ref: "#/definitions/SignatureType" +- Error: +- description: |- +- Error contains error information if signature verification failed. +- Other fields will be empty in this case. +- type: "string" +- Warnings: +- description: |- +- Warnings contains any warnings that occurred during signature verification. +- For example, if there was no internet connectivity and cached trust roots were used. +- Warning does not indicate a failed verification but may point to configuration issues. +- type: "array" +- items: +- type: "string" +- +- SignatureTimestamp: +- description: |- +- SignatureTimestamp contains information about a verified signed timestamp for an image signature. +- type: "object" +- properties: +- Type: +- $ref: "#/definitions/SignatureTimestampType" +- URI: +- type: "string" +- Timestamp: +- type: "string" +- format: "date-time" +- +- SignatureTimestampType: +- description: |- +- SignatureTimestampType is the type of timestamp used in the signature. +- type: "string" +- enum: +- - "Tlog" +- - "TimestampAuthority" +- +- SignatureType: +- description: |- +- SignatureType is the type of signature format. +- type: "string" +- enum: +- - "bundle-v0.3" +- - "simplesigning-v1" +- +- KnownSignerIdentity: +- description: |- +- KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation. +- type: "string" +- enum: +- - "DHI" +- +- SignerIdentity: +- description: |- +- SignerIdentity contains information about the signer certificate used to sign the image. +- type: "object" +- properties: +- CertificateIssuer: +- type: "string" +- description: |- +- CertificateIssuer is the certificate issuer. +- SubjectAlternativeName: +- type: "string" +- description: |- +- SubjectAlternativeName is the certificate subject alternative name. +- Issuer: +- type: "string" +- description: |- +- The OIDC issuer. Should match `iss` claim of ID token or, in the case of +- a federated login like Dex it should match the issuer URL of the +- upstream issuer. The issuer is not set the extensions are invalid and +- will fail to render. +- BuildSignerURI: +- type: "string" +- description: |- +- Reference to specific build instructions that are responsible for signing. +- BuildSignerDigest: +- type: "string" +- description: |- +- Immutable reference to the specific version of the build instructions that is responsible for signing. +- RunnerEnvironment: +- type: "string" +- description: |- +- Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure. +- SourceRepositoryURI: +- type: "string" +- description: |- +- Source repository URL that the build was based on. +- SourceRepositoryDigest: +- type: "string" +- description: |- +- Immutable reference to a specific version of the source code that the build was based upon. +- SourceRepositoryRef: +- type: "string" +- description: |- +- Source Repository Ref that the build run was based upon. +- SourceRepositoryIdentifier: +- type: "string" +- description: |- +- Immutable identifier for the source repository the workflow was based upon. +- SourceRepositoryOwnerURI: +- type: "string" +- description: |- +- Source repository owner URL of the owner of the source repository that the build was based on. +- SourceRepositoryOwnerIdentifier: +- type: "string" +- description: |- +- Immutable identifier for the owner of the source repository that the workflow was based upon. +- BuildConfigURI: +- type: "string" +- description: |- +- Build Config URL to the top-level/initiating build instructions. +- BuildConfigDigest: +- type: "string" +- description: |- +- Immutable reference to the specific version of the top-level/initiating build instructions. +- BuildTrigger: +- type: "string" +- description: |- +- Event or action that initiated the build. +- RunInvocationURI: +- type: "string" +- description: |- +- Run Invocation URL to uniquely identify the build execution. +- SourceRepositoryVisibilityAtSigning: +- type: "string" +- description: |- +- Source repository visibility at the time of signing the certificate. +- +- ImageSummary: +- type: "object" +- x-go-name: "Summary" +- required: +- - Id +- - ParentId +- - RepoTags +- - RepoDigests +- - Created +- - Size +- - SharedSize +- - Labels +- - Containers +- properties: +- Id: +- description: | +- ID is the content-addressable ID of an image. +- +- This identifier is a content-addressable digest calculated from the +- image's configuration (which includes the digests of layers used by +- the image). +- +- Note that this digest differs from the `RepoDigests` below, which +- holds digests of image manifests that reference the image. +- type: "string" +- x-nullable: false +- example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" +- ParentId: +- description: | +- ID of the parent image. +- +- Depending on how the image was created, this field may be empty and +- is only set for images that were built/created locally. This field +- is empty if the image was pulled from an image registry. +- type: "string" +- x-nullable: false +- example: "" +- RepoTags: +- description: | +- List of image names/tags in the local image cache that reference this +- image. +- +- Multiple image tags can refer to the same image, and this list may be +- empty if no tags reference the image, in which case the image is +- "untagged", in which case it can still be referenced by its ID. +- type: "array" +- x-nullable: false +- items: +- type: "string" +- example: +- - "example:1.0" +- - "example:latest" +- - "example:stable" +- - "internal.registry.example.com:5000/example:1.0" +- RepoDigests: +- description: | +- List of content-addressable digests of locally available image manifests +- that the image is referenced from. Multiple manifests can refer to the +- same image. +- +- These digests are usually only available if the image was either pulled +- from a registry, or if the image was pushed to a registry, which is when +- the manifest is generated and its digest calculated. +- type: "array" +- x-nullable: false +- items: +- type: "string" +- example: +- - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb" +- - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" +- Created: +- description: | +- Date and time at which the image was created as a Unix timestamp +- (number of seconds since EPOCH). +- type: "integer" +- x-nullable: false +- example: "1644009612" +- Size: +- description: | +- Total size of the image including all layers it is composed of. +- type: "integer" +- format: "int64" +- x-nullable: false +- example: 172064416 +- SharedSize: +- description: | +- Total size of image layers that are shared between this image and other +- images. +- +- This size is not calculated by default. `-1` indicates that the value +- has not been set / calculated. +- type: "integer" +- format: "int64" +- x-nullable: false +- example: 1239828 +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- x-nullable: false +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- Containers: +- description: | +- Number of containers using this image. Includes both stopped and running +- containers. +- +- `-1` indicates that the value has not been set / calculated. +- x-nullable: false +- type: "integer" +- example: 2 +- Manifests: +- description: | +- Manifests is a list of manifests available in this image. +- It provides a more detailed view of the platform-specific image manifests +- or other image-attached data like build attestations. +- +- WARNING: This is experimental and may change at any time without any backward +- compatibility. +- type: "array" +- x-nullable: false +- x-omitempty: true +- items: +- $ref: "#/definitions/ImageManifestSummary" +- Descriptor: +- description: | +- Descriptor is an OCI descriptor of the image target. +- In case of a multi-platform image, this descriptor points to the OCI index +- or a manifest list. +- +- This field is only present if the daemon provides a multi-platform image store. +- +- WARNING: This is experimental and may change at any time without any backward +- compatibility. +- x-nullable: true +- $ref: "#/definitions/OCIDescriptor" +- +- ImagesDiskUsage: +- type: "object" +- x-go-name: "DiskUsage" +- x-go-package: "github.com/moby/moby/api/types/image" +- description: | +- represents system data usage for image resources. +- properties: +- ActiveCount: +- description: | +- Count of active images. +- type: "integer" +- format: "int64" +- example: 1 +- TotalCount: +- description: | +- Count of all images. +- type: "integer" +- format: "int64" +- example: 4 +- Reclaimable: +- description: | +- Disk space that can be reclaimed by removing unused images. +- type: "integer" +- format: "int64" +- example: 12345678 +- TotalSize: +- description: | +- Disk space in use by images. +- type: "integer" +- format: "int64" +- example: 98765432 +- Items: +- description: | +- List of image summaries. +- type: "array" +- x-omitempty: true +- items: +- x-go-type: +- type: Summary +- +- AuthConfig: +- type: "object" +- properties: +- username: +- type: "string" +- password: +- type: "string" +- serveraddress: +- type: "string" +- example: +- username: "hannibal" +- password: "xxxx" +- serveraddress: "https://index.docker.io/v1/" +- +- AuthResponse: +- description: | +- An identity token was generated successfully. +- type: "object" +- required: [Status] +- properties: +- Status: +- description: "The status of the authentication" +- type: "string" +- example: "Login Succeeded" +- x-nullable: false +- IdentityToken: +- description: "An opaque token used to authenticate a user after a successful login" +- type: "string" +- example: "9cbaf023786cd7..." +- x-nullable: false +- +- ProcessConfig: +- type: "object" +- properties: +- privileged: +- type: "boolean" +- user: +- type: "string" +- tty: +- type: "boolean" +- entrypoint: +- type: "string" +- arguments: +- type: "array" +- items: +- type: "string" +- +- Volume: +- type: "object" +- required: [Name, Driver, Mountpoint, Labels, Scope, Options] +- x-nullable: false +- properties: +- Name: +- type: "string" +- description: "Name of the volume." +- x-nullable: false +- example: "tardis" +- Driver: +- type: "string" +- description: "Name of the volume driver used by the volume." +- x-nullable: false +- example: "custom" +- Mountpoint: +- type: "string" +- description: "Mount path of the volume on the host." +- x-nullable: false +- example: "/var/lib/docker/volumes/tardis" +- CreatedAt: +- type: "string" +- format: "dateTime" +- description: "Date/Time the volume was created." +- example: "2016-06-07T20:31:11.853781916Z" +- Status: +- type: "object" +- description: | +- Low-level details about the volume, provided by the volume driver. +- Details are returned as a map with key/value pairs: +- `{"key":"value","key2":"value2"}`. +- +- The `Status` field is optional, and is omitted if the volume driver +- does not support this feature. +- additionalProperties: +- type: "object" +- example: +- hello: "world" +- Labels: +- type: "object" +- description: "User-defined key/value metadata." +- x-nullable: false +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- Scope: +- type: "string" +- description: | +- The level at which the volume exists. Either `global` for cluster-wide, +- or `local` for machine level. +- default: "local" +- x-nullable: false +- enum: ["local", "global"] +- example: "local" +- ClusterVolume: +- $ref: "#/definitions/ClusterVolume" +- Options: +- type: "object" +- description: | +- The driver specific options used when creating the volume. +- additionalProperties: +- type: "string" +- example: +- device: "tmpfs" +- o: "size=100m,uid=1000" +- type: "tmpfs" +- UsageData: +- type: "object" +- x-nullable: true +- x-go-name: "UsageData" +- required: [Size, RefCount] +- description: | +- Usage details about the volume. This information is used by the +- `GET /system/df` endpoint, and omitted in other endpoints. +- properties: +- Size: +- type: "integer" +- format: "int64" +- default: -1 +- description: | +- Amount of disk space used by the volume (in bytes). This information +- is only available for volumes created with the `"local"` volume +- driver. For volumes created with other volume drivers, this field +- is set to `-1` ("not available") +- x-nullable: false +- RefCount: +- type: "integer" +- format: "int64" +- default: -1 +- description: | +- The number of containers referencing this volume. This field +- is set to `-1` if the reference-count is not available. +- x-nullable: false +- +- VolumesDiskUsage: +- type: "object" +- x-go-name: "DiskUsage" +- x-go-package: "github.com/moby/moby/api/types/volume" +- description: | +- represents system data usage for volume resources. +- properties: +- ActiveCount: +- description: | +- Count of active volumes. +- type: "integer" +- format: "int64" +- example: 1 +- TotalCount: +- description: | +- Count of all volumes. +- type: "integer" +- format: "int64" +- example: 4 +- Reclaimable: +- description: | +- Disk space that can be reclaimed by removing inactive volumes. +- type: "integer" +- format: "int64" +- example: 12345678 +- TotalSize: +- description: | +- Disk space in use by volumes. +- type: "integer" +- format: "int64" +- example: 98765432 +- Items: +- description: | +- List of volumes. +- type: "array" +- x-omitempty: true +- items: +- x-go-type: +- type: Volume +- +- VolumeCreateRequest: +- description: "Volume configuration" +- type: "object" +- title: "VolumeConfig" +- x-go-name: "CreateRequest" +- properties: +- Name: +- description: | +- The new volume's name. If not specified, Docker generates a name. +- type: "string" +- x-nullable: false +- example: "tardis" +- Driver: +- description: "Name of the volume driver to use." +- type: "string" +- default: "local" +- x-nullable: false +- example: "custom" +- DriverOpts: +- description: | +- A mapping of driver options and values. These options are +- passed directly to the driver and are driver specific. +- type: "object" +- additionalProperties: +- type: "string" +- example: +- device: "tmpfs" +- o: "size=100m,uid=1000" +- type: "tmpfs" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- ClusterVolumeSpec: +- $ref: "#/definitions/ClusterVolumeSpec" +- +- VolumeListResponse: +- type: "object" +- title: "VolumeListResponse" +- x-go-name: "ListResponse" +- description: "Volume list response" +- properties: +- Volumes: +- type: "array" +- description: "List of volumes" +- items: +- $ref: "#/definitions/Volume" +- Warnings: +- type: "array" +- description: | +- Warnings that occurred when fetching the list of volumes. +- items: +- type: "string" +- example: [] +- +- Network: +- type: "object" +- properties: +- Name: +- description: | +- Name of the network. +- type: "string" +- example: "my_network" +- x-omitempty: false +- Id: +- description: | +- ID that uniquely identifies a network on a single machine. +- type: "string" +- x-go-name: "ID" +- x-omitempty: false +- example: "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99" +- Created: +- description: | +- Date and time at which the network was created in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- x-omitempty: false +- x-go-type: +- type: Time +- import: +- package: time +- hints: +- nullable: false +- example: "2016-10-19T04:33:30.360899459Z" +- Scope: +- description: | +- The level at which the network exists (e.g. `swarm` for cluster-wide +- or `local` for machine level) +- type: "string" +- x-omitempty: false +- example: "local" +- Driver: +- description: | +- The name of the driver used to create the network (e.g. `bridge`, +- `overlay`). +- type: "string" +- x-omitempty: false +- example: "overlay" +- EnableIPv4: +- description: | +- Whether the network was created with IPv4 enabled. +- type: "boolean" +- x-omitempty: false +- example: true +- EnableIPv6: +- description: | +- Whether the network was created with IPv6 enabled. +- type: "boolean" +- x-omitempty: false +- example: false +- IPAM: +- description: | +- The network's IP Address Management. +- $ref: "#/definitions/IPAM" +- x-nullable: false +- x-omitempty: false +- Internal: +- description: | +- Whether the network is created to only allow internal networking +- connectivity. +- type: "boolean" +- x-nullable: false +- x-omitempty: false +- default: false +- example: false +- Attachable: +- description: | +- Whether a global / swarm scope network is manually attachable by regular +- containers from workers in swarm mode. +- type: "boolean" +- x-nullable: false +- x-omitempty: false +- default: false +- example: false +- Ingress: +- description: | +- Whether the network is providing the routing-mesh for the swarm cluster. +- type: "boolean" +- x-nullable: false +- x-omitempty: false +- default: false +- example: false +- ConfigFrom: +- $ref: "#/definitions/ConfigReference" +- x-nullable: false +- x-omitempty: false +- ConfigOnly: +- description: | +- Whether the network is a config-only network. Config-only networks are +- placeholder networks for network configurations to be used by other +- networks. Config-only networks cannot be used directly to run containers +- or services. +- type: "boolean" +- x-omitempty: false +- x-nullable: false +- default: false +- Options: +- description: | +- Network-specific options uses when creating the network. +- type: "object" +- x-omitempty: false +- additionalProperties: +- type: "string" +- example: +- com.docker.network.bridge.default_bridge: "true" +- com.docker.network.bridge.enable_icc: "true" +- com.docker.network.bridge.enable_ip_masquerade: "true" +- com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" +- com.docker.network.bridge.name: "docker0" +- com.docker.network.driver.mtu: "1500" +- Labels: +- description: | +- Metadata specific to the network being created. +- type: "object" +- x-omitempty: false +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- Peers: +- description: | +- List of peer nodes for an overlay network. This field is only present +- for overlay networks, and omitted for other network types. +- type: "array" +- x-omitempty: true +- items: +- $ref: "#/definitions/PeerInfo" +- +- NetworkSummary: +- description: "Network list response item" +- x-go-name: Summary +- type: "object" +- allOf: +- - $ref: "#/definitions/Network" +- +- NetworkInspect: +- description: 'The body of the "get network" http response message.' +- x-go-name: Inspect +- type: "object" +- allOf: +- - $ref: "#/definitions/Network" +- properties: +- Containers: +- description: | +- Contains endpoints attached to the network. +- type: "object" +- x-omitempty: false +- additionalProperties: +- $ref: "#/definitions/EndpointResource" +- example: +- 19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c: +- Name: "test" +- EndpointID: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" +- MacAddress: "02:42:ac:13:00:02" +- IPv4Address: "172.19.0.2/16" +- IPv6Address: "" +- Services: +- description: | +- List of services using the network. This field is only present for +- swarm scope networks, and omitted for local scope networks. +- type: "object" +- x-omitempty: true +- additionalProperties: +- x-go-type: +- type: ServiceInfo +- hints: +- nullable: false +- Status: +- description: > +- provides runtime information about the network +- such as the number of allocated IPs. +- $ref: "#/definitions/NetworkStatus" +- +- NetworkStatus: +- description: > +- provides runtime information about the network +- such as the number of allocated IPs. +- type: "object" +- x-go-name: Status +- properties: +- IPAM: +- $ref: "#/definitions/IPAMStatus" +- +- ServiceInfo: +- x-nullable: false +- x-omitempty: false +- description: > +- represents service parameters with the list of service's tasks +- type: "object" +- properties: +- VIP: +- type: "string" +- x-omitempty: false +- x-go-type: +- type: Addr +- import: +- package: net/netip +- Ports: +- type: "array" +- x-omitempty: false +- items: +- type: "string" +- LocalLBIndex: +- type: "integer" +- format: "int" +- x-omitempty: false +- x-go-type: +- type: int +- Tasks: +- type: "array" +- x-omitempty: false +- items: +- $ref: "#/definitions/NetworkTaskInfo" +- +- NetworkTaskInfo: +- x-nullable: false +- x-omitempty: false +- x-go-name: Task +- description: > +- carries the information about one backend task +- type: "object" +- properties: +- Name: +- type: "string" +- x-omitempty: false +- EndpointID: +- type: "string" +- x-omitempty: false +- EndpointIP: +- type: "string" +- x-omitempty: false +- x-go-type: +- type: Addr +- import: +- package: net/netip +- Info: +- type: "object" +- x-omitempty: false +- additionalProperties: +- type: "string" +- +- ConfigReference: +- x-nullable: false +- x-omitempty: false +- description: | +- The config-only network source to provide the configuration for +- this network. +- type: "object" +- properties: +- Network: +- description: | +- The name of the config-only network that provides the network's +- configuration. The specified network must be an existing config-only +- network. Only network names are allowed, not network IDs. +- type: "string" +- x-omitempty: false +- example: "config_only_network_01" +- +- IPAM: +- type: "object" +- x-nullable: false +- x-omitempty: false +- properties: +- Driver: +- description: "Name of the IPAM driver to use." +- type: "string" +- default: "default" +- example: "default" +- Config: +- description: | +- List of IPAM configuration options, specified as a map: +- +- ``` +- {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } +- ``` +- type: "array" +- items: +- $ref: "#/definitions/IPAMConfig" +- Options: +- description: "Driver-specific options, specified as a map." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- foo: "bar" +- +- IPAMConfig: +- type: "object" +- properties: +- Subnet: +- type: "string" +- example: "172.20.0.0/16" +- IPRange: +- type: "string" +- example: "172.20.10.0/24" +- Gateway: +- type: "string" +- example: "172.20.10.11" +- AuxiliaryAddresses: +- type: "object" +- additionalProperties: +- type: "string" +- +- IPAMStatus: +- type: "object" +- x-nullable: false +- x-omitempty: false +- properties: +- Subnets: +- type: "object" +- additionalProperties: +- $ref: "#/definitions/SubnetStatus" +- example: +- "172.16.0.0/16": +- IPsInUse: 3 +- DynamicIPsAvailable: 65533 +- "2001:db8:abcd:0012::0/96": +- IPsInUse: 5 +- DynamicIPsAvailable: 4294967291 +- x-go-type: +- type: SubnetStatuses +- kind: map +- +- SubnetStatus: +- type: "object" +- x-nullable: false +- x-omitempty: false +- properties: +- IPsInUse: +- description: > +- Number of IP addresses in the subnet that are in use or reserved and +- are therefore unavailable for allocation, saturating at 264 - 1. +- type: integer +- format: uint64 +- x-omitempty: false +- DynamicIPsAvailable: +- description: > +- Number of IP addresses within the network's IPRange for the subnet +- that are available for allocation, saturating at 264 - 1. +- type: integer +- format: uint64 +- x-omitempty: false +- +- EndpointResource: +- type: "object" +- description: > +- contains network resources allocated and used for a +- container in a network. +- properties: +- Name: +- type: "string" +- x-omitempty: false +- example: "container_1" +- EndpointID: +- type: "string" +- x-omitempty: false +- example: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" +- MacAddress: +- type: "string" +- x-omitempty: false +- example: "02:42:ac:13:00:02" +- x-go-type: +- type: HardwareAddr +- IPv4Address: +- type: "string" +- x-omitempty: false +- example: "172.19.0.2/16" +- x-go-type: +- type: Prefix +- import: +- package: net/netip +- IPv6Address: +- type: "string" +- x-omitempty: false +- example: "" +- x-go-type: +- type: Prefix +- import: +- package: net/netip +- +- PeerInfo: +- description: > +- represents one peer of an overlay network. +- type: "object" +- x-nullable: false +- properties: +- Name: +- description: +- ID of the peer-node in the Swarm cluster. +- type: "string" +- x-omitempty: false +- example: "6869d7c1732b" +- IP: +- description: +- IP-address of the peer-node in the Swarm cluster. +- type: "string" +- x-omitempty: false +- example: "10.133.77.91" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- +- NetworkCreateResponse: +- description: "OK response to NetworkCreate operation" +- type: "object" +- title: "NetworkCreateResponse" +- x-go-name: "CreateResponse" +- required: [Id, Warning] +- properties: +- Id: +- description: "The ID of the created network." +- type: "string" +- x-nullable: false +- example: "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d" +- Warning: +- description: "Warnings encountered when creating the container" +- type: "string" +- x-nullable: false +- example: "" +- +- BuildInfo: +- type: "object" +- properties: +- id: +- type: "string" +- stream: +- type: "string" +- errorDetail: +- $ref: "#/definitions/ErrorDetail" +- status: +- type: "string" +- progressDetail: +- $ref: "#/definitions/ProgressDetail" +- aux: +- $ref: "#/definitions/ImageID" +- +- BuildCache: +- type: "object" +- description: | +- BuildCache contains information about a build cache record. +- properties: +- ID: +- type: "string" +- description: | +- Unique ID of the build cache record. +- example: "ndlpt0hhvkqcdfkputsk4cq9c" +- Parents: +- description: | +- List of parent build cache record IDs. +- type: "array" +- items: +- type: "string" +- x-nullable: true +- example: ["hw53o5aio51xtltp5xjp8v7fx"] +- Type: +- type: "string" +- description: | +- Cache record type. +- example: "regular" +- # see https://github.com/moby/buildkit/blob/fce4a32258dc9d9664f71a4831d5de10f0670677/client/diskusage.go#L75-L84 +- enum: +- - "internal" +- - "frontend" +- - "source.local" +- - "source.git.checkout" +- - "exec.cachemount" +- - "regular" +- Description: +- type: "string" +- description: | +- Description of the build-step that produced the build cache. +- example: "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" +- InUse: +- type: "boolean" +- description: | +- Indicates if the build cache is in use. +- example: false +- Shared: +- type: "boolean" +- description: | +- Indicates if the build cache is shared. +- example: true +- Size: +- description: | +- Amount of disk space used by the build cache (in bytes). +- type: "integer" +- example: 51 +- CreatedAt: +- description: | +- Date and time at which the build cache was created in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2016-08-18T10:44:24.496525531Z" +- LastUsedAt: +- description: | +- Date and time at which the build cache was last used in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- x-nullable: true +- example: "2017-08-09T07:09:37.632105588Z" +- UsageCount: +- type: "integer" +- example: 26 +- +- BuildCacheDiskUsage: +- type: "object" +- x-go-name: "DiskUsage" +- x-go-package: "github.com/moby/moby/api/types/build" +- description: | +- represents system data usage for build cache resources. +- properties: +- ActiveCount: +- description: | +- Count of active build cache records. +- type: "integer" +- format: "int64" +- example: 1 +- TotalCount: +- description: | +- Count of all build cache records. +- type: "integer" +- format: "int64" +- example: 4 +- Reclaimable: +- description: | +- Disk space that can be reclaimed by removing inactive build cache records. +- type: "integer" +- format: "int64" +- example: 12345678 +- TotalSize: +- description: | +- Disk space in use by build cache records. +- type: "integer" +- format: "int64" +- example: 98765432 +- Items: +- description: | +- List of build cache records. +- type: "array" +- x-omitempty: true +- items: +- x-go-type: +- type: CacheRecord +- +- ImageID: +- type: "object" +- description: "Image ID or Digest" +- properties: +- ID: +- type: "string" +- example: +- ID: "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" +- +- CreateImageInfo: +- type: "object" +- properties: +- id: +- type: "string" +- errorDetail: +- $ref: "#/definitions/ErrorDetail" +- status: +- type: "string" +- progressDetail: +- $ref: "#/definitions/ProgressDetail" +- +- PushImageInfo: +- type: "object" +- properties: +- errorDetail: +- $ref: "#/definitions/ErrorDetail" +- status: +- type: "string" +- progressDetail: +- $ref: "#/definitions/ProgressDetail" +- +- DeviceInfo: +- type: "object" +- description: | +- DeviceInfo represents a device that can be used by a container. +- properties: +- Source: +- type: "string" +- example: "cdi" +- description: | +- The origin device driver. +- ID: +- type: "string" +- example: "vendor.com/gpu=0" +- description: | +- The unique identifier for the device within its source driver. +- For CDI devices, this would be an FQDN like "vendor.com/gpu=0". +- +- NRIInfo: +- description: | +- Information about the Node Resource Interface (NRI). +- +- This field is only present if NRI is enabled. +- type: "object" +- x-nullable: true +- properties: +- Info: +- description: | +- Information about NRI, provided as "label" / "value" pairs. +- +-


+- +- > **Note**: The information returned in this field, including the +- > formatting of values and labels, should not be considered stable, +- > and may change without notice. +- type: "array" +- items: +- type: "array" +- items: +- type: "string" +- example: +- - ["plugin-path", "/opt/docker/nri/plugins"] +- +- ErrorDetail: +- type: "object" +- properties: +- code: +- type: "integer" +- message: +- type: "string" +- +- ProgressDetail: +- type: "object" +- properties: +- current: +- type: "integer" +- total: +- type: "integer" +- +- ErrorResponse: +- description: "Represents an error." +- type: "object" +- required: ["message"] +- properties: +- message: +- description: "The error message." +- type: "string" +- x-nullable: false +- example: +- message: "Something went wrong." +- +- IDResponse: +- description: "Response to an API call that returns just an Id" +- type: "object" +- x-go-name: "IDResponse" +- required: ["Id"] +- properties: +- Id: +- description: "The id of the newly created object." +- type: "string" +- x-nullable: false +- +- NetworkConnectRequest: +- description: | +- NetworkConnectRequest represents the data to be used to connect a container to a network. +- type: "object" +- x-go-name: "ConnectRequest" +- required: ["Container"] +- properties: +- Container: +- type: "string" +- description: "The ID or name of the container to connect to the network." +- x-nullable: false +- example: "3613f73ba0e4" +- EndpointConfig: +- $ref: "#/definitions/EndpointSettings" +- x-nullable: true +- +- NetworkDisconnectRequest: +- description: | +- NetworkDisconnectRequest represents the data to be used to disconnect a container from a network. +- type: "object" +- x-go-name: "DisconnectRequest" +- required: ["Container"] +- properties: +- Container: +- type: "string" +- description: "The ID or name of the container to disconnect from the network." +- x-nullable: false +- example: "3613f73ba0e4" +- Force: +- type: "boolean" +- description: "Force the container to disconnect from the network." +- default: false +- x-nullable: false +- x-omitempty: false +- example: false +- +- EndpointSettings: +- description: "Configuration for a network endpoint." +- type: "object" +- properties: +- # Configurations +- IPAMConfig: +- $ref: "#/definitions/EndpointIPAMConfig" +- Links: +- type: "array" +- items: +- type: "string" +- example: +- - "container_1" +- - "container_2" +- MacAddress: +- description: | +- MAC address for the endpoint on this network. The network driver might ignore this parameter. +- type: "string" +- example: "02:42:ac:11:00:04" +- x-go-type: +- type: HardwareAddr +- Aliases: +- type: "array" +- items: +- type: "string" +- example: +- - "server_x" +- - "server_y" +- DriverOpts: +- description: | +- DriverOpts is a mapping of driver options and values. These options +- are passed directly to the driver and are driver specific. +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- GwPriority: +- description: | +- This property determines which endpoint will provide the default +- gateway for a container. The endpoint with the highest priority will +- be used. If multiple endpoints have the same priority, endpoints are +- lexicographically sorted based on their network name, and the one +- that sorts first is picked. +- type: "integer" +- format: "int64" +- example: +- - 10 +- +- # Operational data +- NetworkID: +- description: | +- Unique ID of the network. +- type: "string" +- example: "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" +- EndpointID: +- description: | +- Unique ID for the service endpoint in a Sandbox. +- type: "string" +- example: "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" +- Gateway: +- description: | +- Gateway address for this network. +- type: "string" +- example: "172.17.0.1" +- IPAddress: +- description: | +- IPv4 address. +- type: "string" +- example: "172.17.0.4" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- IPPrefixLen: +- description: | +- Mask length of the IPv4 address. +- type: "integer" +- example: 16 +- IPv6Gateway: +- description: | +- IPv6 gateway address. +- type: "string" +- example: "2001:db8:2::100" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- GlobalIPv6Address: +- description: | +- Global IPv6 address. +- type: "string" +- example: "2001:db8::5689" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- GlobalIPv6PrefixLen: +- description: | +- Mask length of the global IPv6 address. +- type: "integer" +- format: "int64" +- example: 64 +- DNSNames: +- description: | +- List of all DNS names an endpoint has on a specific network. This +- list is based on the container name, network aliases, container short +- ID, and hostname. +- +- These DNS names are non-fully qualified but can contain several dots. +- You can get fully qualified DNS names by appending `.`. +- For instance, if container name is `my.ctr` and the network is named +- `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be +- `my.ctr.testnet`. +- type: array +- items: +- type: string +- example: ["foobar", "server_x", "server_y", "my.ctr"] +- +- EndpointIPAMConfig: +- description: | +- EndpointIPAMConfig represents an endpoint's IPAM configuration. +- type: "object" +- x-nullable: true +- properties: +- IPv4Address: +- type: "string" +- example: "172.20.30.33" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- IPv6Address: +- type: "string" +- example: "2001:db8:abcd::3033" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- LinkLocalIPs: +- type: "array" +- items: +- type: "string" +- x-go-type: +- type: Addr +- import: +- package: net/netip +- example: +- - "169.254.34.68" +- - "fe80::3468" +- +- PluginMount: +- type: "object" +- x-go-name: "Mount" +- x-nullable: false +- required: [Name, Description, Settable, Source, Destination, Type, Options] +- properties: +- Name: +- type: "string" +- x-nullable: false +- example: "some-mount" +- Description: +- type: "string" +- x-nullable: false +- example: "This is a mount that's used by the plugin." +- Settable: +- type: "array" +- items: +- type: "string" +- Source: +- type: "string" +- example: "/var/lib/docker/plugins/" +- Destination: +- type: "string" +- x-nullable: false +- example: "/mnt/state" +- Type: +- type: "string" +- x-nullable: false +- example: "bind" +- Options: +- type: "array" +- items: +- type: "string" +- example: +- - "rbind" +- - "rw" +- +- PluginDevice: +- type: "object" +- x-go-name: "Device" +- required: [Name, Description, Settable, Path] +- x-nullable: false +- properties: +- Name: +- type: "string" +- x-nullable: false +- Description: +- type: "string" +- x-nullable: false +- Settable: +- type: "array" +- items: +- type: "string" +- Path: +- type: "string" +- example: "/dev/fuse" +- +- PluginEnv: +- type: "object" +- x-go-name: "Env" +- x-nullable: false +- required: [Name, Description, Settable, Value] +- properties: +- Name: +- x-nullable: false +- type: "string" +- Description: +- x-nullable: false +- type: "string" +- Settable: +- type: "array" +- items: +- type: "string" +- Value: +- type: "string" +- +- PluginPrivilege: +- description: | +- Describes a permission the user has to accept upon installing +- the plugin. +- type: "object" +- x-go-name: "Privilege" +- properties: +- Name: +- type: "string" +- example: "network" +- Description: +- type: "string" +- Value: +- type: "array" +- items: +- type: "string" +- example: +- - "host" +- +- Plugin: +- description: "A plugin for the Engine API" +- type: "object" +- x-go-name: "Plugin" +- required: [Settings, Enabled, Config, Name] +- properties: +- Id: +- type: "string" +- example: "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" +- Name: +- type: "string" +- x-nullable: false +- example: "tiborvass/sample-volume-plugin" +- Enabled: +- description: +- True if the plugin is running. False if the plugin is not running, +- only installed. +- type: "boolean" +- x-nullable: false +- example: true +- Settings: +- description: "user-configurable settings for the plugin." +- type: "object" +- x-go-name: "Settings" +- x-nullable: false +- required: [Args, Devices, Env, Mounts] +- properties: +- Mounts: +- type: "array" +- items: +- $ref: "#/definitions/PluginMount" +- Env: +- type: "array" +- items: +- type: "string" +- example: +- - "DEBUG=0" +- Args: +- type: "array" +- items: +- type: "string" +- Devices: +- type: "array" +- items: +- $ref: "#/definitions/PluginDevice" +- PluginReference: +- description: "plugin remote reference used to push/pull the plugin" +- type: "string" +- x-go-name: "PluginReference" +- x-nullable: false +- example: "localhost:5000/tiborvass/sample-volume-plugin:latest" +- Config: +- description: "The config of a plugin." +- type: "object" +- x-go-name: "Config" +- x-nullable: false +- required: +- - Description +- - Documentation +- - Interface +- - Entrypoint +- - WorkDir +- - Network +- - Linux +- - PidHost +- - PropagatedMount +- - IpcHost +- - Mounts +- - Env +- - Args +- properties: +- Description: +- type: "string" +- x-nullable: false +- example: "A sample volume plugin for Docker" +- Documentation: +- type: "string" +- x-nullable: false +- example: "https://docs.docker.com/engine/extend/plugins/" +- Interface: +- description: "The interface between Docker and the plugin" +- x-nullable: false +- type: "object" +- x-go-name: "Interface" +- required: [Types, Socket] +- properties: +- Types: +- type: "array" +- items: +- type: "string" +- x-go-type: +- type: "CapabilityID" +- example: +- - "docker.volumedriver/1.0" +- Socket: +- type: "string" +- x-nullable: false +- example: "plugins.sock" +- ProtocolScheme: +- type: "string" +- example: "some.protocol/v1.0" +- description: "Protocol to use for clients connecting to the plugin." +- enum: +- - "" +- - "moby.plugins.http/v1" +- Entrypoint: +- type: "array" +- items: +- type: "string" +- example: +- - "/usr/bin/sample-volume-plugin" +- - "/data" +- WorkDir: +- type: "string" +- x-nullable: false +- example: "/bin/" +- User: +- type: "object" +- x-go-name: "User" +- x-nullable: false +- properties: +- UID: +- type: "integer" +- format: "uint32" +- example: 1000 +- GID: +- type: "integer" +- format: "uint32" +- example: 1000 +- Network: +- type: "object" +- x-go-name: "NetworkConfig" +- x-nullable: false +- required: [Type] +- properties: +- Type: +- x-nullable: false +- type: "string" +- example: "host" +- Linux: +- type: "object" +- x-go-name: "LinuxConfig" +- x-nullable: false +- required: [Capabilities, AllowAllDevices, Devices] +- properties: +- Capabilities: +- type: "array" +- items: +- type: "string" +- example: +- - "CAP_SYS_ADMIN" +- - "CAP_SYSLOG" +- AllowAllDevices: +- type: "boolean" +- x-nullable: false +- example: false +- Devices: +- type: "array" +- items: +- $ref: "#/definitions/PluginDevice" +- PropagatedMount: +- type: "string" +- x-nullable: false +- example: "/mnt/volumes" +- IpcHost: +- type: "boolean" +- x-nullable: false +- example: false +- PidHost: +- type: "boolean" +- x-nullable: false +- example: false +- Mounts: +- type: "array" +- items: +- $ref: "#/definitions/PluginMount" +- Env: +- type: "array" +- items: +- $ref: "#/definitions/PluginEnv" +- example: +- - Name: "DEBUG" +- Description: "If set, prints debug messages" +- Settable: null +- Value: "0" +- Args: +- type: "object" +- x-go-name: "Args" +- x-nullable: false +- required: [Name, Description, Settable, Value] +- properties: +- Name: +- x-nullable: false +- type: "string" +- example: "args" +- Description: +- x-nullable: false +- type: "string" +- example: "command line arguments" +- Settable: +- type: "array" +- items: +- type: "string" +- Value: +- type: "array" +- items: +- type: "string" +- rootfs: +- type: "object" +- x-go-name: "RootFS" +- properties: +- type: +- type: "string" +- example: "layers" +- diff_ids: +- type: "array" +- items: +- type: "string" +- example: +- - "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887" +- - "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" +- +- ObjectVersion: +- description: | +- The version number of the object such as node, service, etc. This is needed +- to avoid conflicting writes. The client must send the version number along +- with the modified specification when updating these objects. +- +- This approach ensures safe concurrency and determinism in that the change +- on the object may not be applied if the version number has changed from the +- last read. In other words, if two update requests specify the same base +- version, only one of the requests can succeed. As a result, two separate +- update requests that happen at the same time will not unintentionally +- overwrite each other. +- type: "object" +- properties: +- Index: +- type: "integer" +- format: "uint64" +- example: 373531 +- +- NodeSpec: +- type: "object" +- properties: +- Name: +- description: "Name for the node." +- type: "string" +- example: "my-node" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- Role: +- description: "Role of the node." +- type: "string" +- enum: +- - "worker" +- - "manager" +- example: "manager" +- Availability: +- description: "Availability of the node." +- type: "string" +- enum: +- - "active" +- - "pause" +- - "drain" +- example: "active" +- example: +- Availability: "active" +- Name: "node-name" +- Role: "manager" +- Labels: +- foo: "bar" +- +- Node: +- type: "object" +- properties: +- ID: +- type: "string" +- example: "24ifsmvkjbyhk" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- description: | +- Date and time at which the node was added to the swarm in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2016-08-18T10:44:24.496525531Z" +- UpdatedAt: +- description: | +- Date and time at which the node was last updated in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2017-08-09T07:09:37.632105588Z" +- Spec: +- $ref: "#/definitions/NodeSpec" +- Description: +- $ref: "#/definitions/NodeDescription" +- Status: +- $ref: "#/definitions/NodeStatus" +- ManagerStatus: +- $ref: "#/definitions/ManagerStatus" +- +- NodeDescription: +- description: | +- NodeDescription encapsulates the properties of the Node as reported by the +- agent. +- type: "object" +- properties: +- Hostname: +- type: "string" +- example: "bf3067039e47" +- Platform: +- $ref: "#/definitions/Platform" +- Resources: +- $ref: "#/definitions/ResourceObject" +- Engine: +- $ref: "#/definitions/EngineDescription" +- TLSInfo: +- $ref: "#/definitions/TLSInfo" +- +- Platform: +- description: | +- Platform represents the platform (Arch/OS). +- type: "object" +- properties: +- Architecture: +- description: | +- Architecture represents the hardware architecture (for example, +- `x86_64`). +- type: "string" +- example: "x86_64" +- OS: +- description: | +- OS represents the Operating System (for example, `linux` or `windows`). +- type: "string" +- example: "linux" +- +- EngineDescription: +- description: "EngineDescription provides information about an engine." +- type: "object" +- properties: +- EngineVersion: +- type: "string" +- example: "17.06.0" +- Labels: +- type: "object" +- additionalProperties: +- type: "string" +- example: +- foo: "bar" +- Plugins: +- type: "array" +- items: +- type: "object" +- properties: +- Type: +- type: "string" +- Name: +- type: "string" +- example: +- - Type: "Log" +- Name: "awslogs" +- - Type: "Log" +- Name: "fluentd" +- - Type: "Log" +- Name: "gcplogs" +- - Type: "Log" +- Name: "gelf" +- - Type: "Log" +- Name: "journald" +- - Type: "Log" +- Name: "json-file" +- - Type: "Log" +- Name: "splunk" +- - Type: "Log" +- Name: "syslog" +- - Type: "Network" +- Name: "bridge" +- - Type: "Network" +- Name: "host" +- - Type: "Network" +- Name: "ipvlan" +- - Type: "Network" +- Name: "macvlan" +- - Type: "Network" +- Name: "null" +- - Type: "Network" +- Name: "overlay" +- - Type: "Volume" +- Name: "local" +- - Type: "Volume" +- Name: "localhost:5000/vieux/sshfs:latest" +- - Type: "Volume" +- Name: "vieux/sshfs:latest" +- +- TLSInfo: +- description: | +- Information about the issuer of leaf TLS certificates and the trusted root +- CA certificate. +- type: "object" +- properties: +- TrustRoot: +- description: | +- The root CA certificate(s) that are used to validate leaf TLS +- certificates. +- type: "string" +- CertIssuerSubject: +- description: +- The base64-url-safe-encoded raw subject bytes of the issuer. +- type: "string" +- CertIssuerPublicKey: +- description: | +- The base64-url-safe-encoded raw public key bytes of the issuer. +- type: "string" +- example: +- TrustRoot: | +- -----BEGIN CERTIFICATE----- +- MIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw +- EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0 +- MzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH +- A0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf +- 3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +- Af8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO +- PQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz +- pxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H +- -----END CERTIFICATE----- +- CertIssuerSubject: "MBMxETAPBgNVBAMTCHN3YXJtLWNh" +- CertIssuerPublicKey: "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" +- +- NodeStatus: +- description: | +- NodeStatus represents the status of a node. +- +- It provides the current status of the node, as seen by the manager. +- type: "object" +- properties: +- State: +- $ref: "#/definitions/NodeState" +- Message: +- type: "string" +- example: "" +- Addr: +- description: "IP address of the node." +- type: "string" +- example: "172.17.0.2" +- +- NodeState: +- description: "NodeState represents the state of a node." +- type: "string" +- enum: +- - "unknown" +- - "down" +- - "ready" +- - "disconnected" +- example: "ready" +- +- ManagerStatus: +- description: | +- ManagerStatus represents the status of a manager. +- +- It provides the current status of a node's manager component, if the node +- is a manager. +- x-nullable: true +- type: "object" +- properties: +- Leader: +- type: "boolean" +- default: false +- example: true +- Reachability: +- $ref: "#/definitions/Reachability" +- Addr: +- description: | +- The IP address and port at which the manager is reachable. +- type: "string" +- example: "10.0.0.46:2377" +- +- Reachability: +- description: "Reachability represents the reachability of a node." +- type: "string" +- enum: +- - "unknown" +- - "unreachable" +- - "reachable" +- example: "reachable" +- +- SwarmSpec: +- description: "User modifiable swarm configuration." +- type: "object" +- properties: +- Name: +- description: "Name of the swarm." +- type: "string" +- example: "default" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.corp.type: "production" +- com.example.corp.department: "engineering" +- Orchestration: +- description: "Orchestration configuration." +- type: "object" +- x-nullable: true +- properties: +- TaskHistoryRetentionLimit: +- description: | +- The number of historic tasks to keep per instance or node. If +- negative, never remove completed or failed tasks. +- type: "integer" +- format: "int64" +- example: 10 +- Raft: +- description: "Raft configuration." +- type: "object" +- properties: +- SnapshotInterval: +- description: "The number of log entries between snapshots." +- type: "integer" +- format: "uint64" +- example: 10000 +- KeepOldSnapshots: +- description: | +- The number of snapshots to keep beyond the current snapshot. +- type: "integer" +- format: "uint64" +- LogEntriesForSlowFollowers: +- description: | +- The number of log entries to keep around to sync up slow followers +- after a snapshot is created. +- type: "integer" +- format: "uint64" +- example: 500 +- ElectionTick: +- description: | +- The number of ticks that a follower will wait for a message from +- the leader before becoming a candidate and starting an election. +- `ElectionTick` must be greater than `HeartbeatTick`. +- +- A tick currently defaults to one second, so these translate +- directly to seconds currently, but this is NOT guaranteed. +- type: "integer" +- example: 3 +- HeartbeatTick: +- description: | +- The number of ticks between heartbeats. Every HeartbeatTick ticks, +- the leader will send a heartbeat to the followers. +- +- A tick currently defaults to one second, so these translate +- directly to seconds currently, but this is NOT guaranteed. +- type: "integer" +- example: 1 +- Dispatcher: +- description: "Dispatcher configuration." +- type: "object" +- x-nullable: true +- properties: +- HeartbeatPeriod: +- description: | +- The delay for an agent to send a heartbeat to the dispatcher. +- type: "integer" +- format: "int64" +- example: 5000000000 +- CAConfig: +- description: "CA configuration." +- type: "object" +- x-nullable: true +- properties: +- NodeCertExpiry: +- description: "The duration node certificates are issued for." +- type: "integer" +- format: "int64" +- example: 7776000000000000 +- ExternalCAs: +- description: | +- Configuration for forwarding signing requests to an external +- certificate authority. +- type: "array" +- items: +- type: "object" +- properties: +- Protocol: +- description: | +- Protocol for communication with the external CA (currently +- only `cfssl` is supported). +- type: "string" +- enum: +- - "cfssl" +- default: "cfssl" +- URL: +- description: | +- URL where certificate signing requests should be sent. +- type: "string" +- Options: +- description: | +- An object with key/value pairs that are interpreted as +- protocol-specific options for the external CA driver. +- type: "object" +- additionalProperties: +- type: "string" +- CACert: +- description: | +- The root CA certificate (in PEM format) this external CA uses +- to issue TLS certificates (assumed to be to the current swarm +- root CA certificate if not provided). +- type: "string" +- SigningCACert: +- description: | +- The desired signing CA certificate for all swarm node TLS leaf +- certificates, in PEM format. +- type: "string" +- SigningCAKey: +- description: | +- The desired signing CA key for all swarm node TLS leaf certificates, +- in PEM format. +- type: "string" +- ForceRotate: +- description: | +- An integer whose purpose is to force swarm to generate a new +- signing CA certificate and key, if none have been specified in +- `SigningCACert` and `SigningCAKey` +- format: "uint64" +- type: "integer" +- EncryptionConfig: +- description: "Parameters related to encryption-at-rest." +- type: "object" +- properties: +- AutoLockManagers: +- description: | +- If set, generate a key and use it to lock data stored on the +- managers. +- type: "boolean" +- example: false +- TaskDefaults: +- description: "Defaults for creating tasks in this cluster." +- type: "object" +- properties: +- LogDriver: +- description: | +- The log driver to use for tasks created in the orchestrator if +- unspecified by a service. +- +- Updating this value only affects new tasks. Existing tasks continue +- to use their previously configured log driver until recreated. +- type: "object" +- properties: +- Name: +- description: | +- The log driver to use as a default for new tasks. +- type: "string" +- example: "json-file" +- Options: +- description: | +- Driver-specific options for the selected log driver, specified +- as key/value pairs. +- type: "object" +- additionalProperties: +- type: "string" +- example: +- "max-file": "10" +- "max-size": "100m" +- +- # The Swarm information for `GET /info`. It is the same as `GET /swarm`, but +- # without `JoinTokens`. +- ClusterInfo: +- description: | +- ClusterInfo represents information about the swarm as is returned by the +- "/info" endpoint. Join-tokens are not included. +- x-nullable: true +- type: "object" +- properties: +- ID: +- description: "The ID of the swarm." +- type: "string" +- example: "abajmipo7b4xz5ip2nrla6b11" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- description: | +- Date and time at which the swarm was initialised in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2016-08-18T10:44:24.496525531Z" +- UpdatedAt: +- description: | +- Date and time at which the swarm was last updated in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- example: "2017-08-09T07:09:37.632105588Z" +- Spec: +- $ref: "#/definitions/SwarmSpec" +- TLSInfo: +- $ref: "#/definitions/TLSInfo" +- RootRotationInProgress: +- description: | +- Whether there is currently a root CA rotation in progress for the swarm +- type: "boolean" +- example: false +- DataPathPort: +- description: | +- DataPathPort specifies the data path port number for data traffic. +- Acceptable port range is 1024 to 49151. +- If no port is set or is set to 0, the default port (4789) is used. +- type: "integer" +- format: "uint32" +- default: 4789 +- example: 4789 +- DefaultAddrPool: +- description: | +- Default Address Pool specifies default subnet pools for global scope +- networks. +- type: "array" +- items: +- type: "string" +- format: "CIDR" +- example: ["10.10.0.0/16", "20.20.0.0/16"] +- SubnetSize: +- description: | +- SubnetSize specifies the subnet size of the networks created from the +- default subnet pool. +- type: "integer" +- format: "uint32" +- maximum: 29 +- default: 24 +- example: 24 +- +- JoinTokens: +- description: | +- JoinTokens contains the tokens workers and managers need to join the swarm. +- type: "object" +- properties: +- Worker: +- description: | +- The token workers can use to join the swarm. +- type: "string" +- example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" +- Manager: +- description: | +- The token managers can use to join the swarm. +- type: "string" +- example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" +- +- Swarm: +- type: "object" +- allOf: +- - $ref: "#/definitions/ClusterInfo" +- - type: "object" +- properties: +- JoinTokens: +- $ref: "#/definitions/JoinTokens" +- +- TaskSpec: +- description: "User modifiable task configuration." +- type: "object" +- properties: +- PluginSpec: +- type: "object" +- description: | +- Plugin spec for the service. *(Experimental release only.)* +- +-


+- +- > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are +- > mutually exclusive. PluginSpec is only used when the Runtime field +- > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime +- > field is set to `attachment`. +- properties: +- Name: +- description: "The name or 'alias' to use for the plugin." +- type: "string" +- Remote: +- description: "The plugin image reference to use." +- type: "string" +- Disabled: +- description: "Disable the plugin once scheduled." +- type: "boolean" +- PluginPrivilege: +- type: "array" +- items: +- $ref: "#/definitions/PluginPrivilege" +- ContainerSpec: +- type: "object" +- description: | +- Container spec for the service. +- +-


+- +- > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are +- > mutually exclusive. PluginSpec is only used when the Runtime field +- > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime +- > field is set to `attachment`. +- properties: +- Image: +- description: "The image name to use for the container" +- type: "string" +- Labels: +- description: "User-defined key/value data." +- type: "object" +- additionalProperties: +- type: "string" +- Command: +- description: "The command to be run in the image." +- type: "array" +- items: +- type: "string" +- Args: +- description: "Arguments to the command." +- type: "array" +- items: +- type: "string" +- Hostname: +- description: | +- The hostname to use for the container, as a valid +- [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. +- type: "string" +- Env: +- description: | +- A list of environment variables in the form `VAR=value`. +- type: "array" +- items: +- type: "string" +- Dir: +- description: "The working directory for commands to run in." +- type: "string" +- User: +- description: "The user inside the container." +- type: "string" +- Groups: +- type: "array" +- description: | +- A list of additional groups that the container process will run as. +- items: +- type: "string" +- Privileges: +- type: "object" +- description: "Security options for the container" +- properties: +- CredentialSpec: +- type: "object" +- description: "CredentialSpec for managed service account (Windows only)" +- properties: +- Config: +- type: "string" +- example: "0bt9dmxjvjiqermk6xrop3ekq" +- description: | +- Load credential spec from a Swarm Config with the given ID. +- The specified config must also be present in the Configs +- field with the Runtime property set. +- +-


+- +- +- > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, +- > and `CredentialSpec.Config` are mutually exclusive. +- File: +- type: "string" +- example: "spec.json" +- description: | +- Load credential spec from this file. The file is read by +- the daemon, and must be present in the `CredentialSpecs` +- subdirectory in the docker data directory, which defaults +- to `C:\ProgramData\Docker\` on Windows. +- +- For example, specifying `spec.json` loads +- `C:\ProgramData\Docker\CredentialSpecs\spec.json`. +- +-


+- +- > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, +- > and `CredentialSpec.Config` are mutually exclusive. +- Registry: +- type: "string" +- description: | +- Load credential spec from this value in the Windows +- registry. The specified registry value must be located in: +- +- `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` +- +-


+- +- +- > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, +- > and `CredentialSpec.Config` are mutually exclusive. +- SELinuxContext: +- type: "object" +- description: "SELinux labels of the container" +- properties: +- Disable: +- type: "boolean" +- description: "Disable SELinux" +- User: +- type: "string" +- description: "SELinux user label" +- Role: +- type: "string" +- description: "SELinux role label" +- Type: +- type: "string" +- description: "SELinux type label" +- Level: +- type: "string" +- description: "SELinux level label" +- Seccomp: +- type: "object" +- description: "Options for configuring seccomp on the container" +- properties: +- Mode: +- type: "string" +- enum: +- - "default" +- - "unconfined" +- - "custom" +- Profile: +- description: "The custom seccomp profile as a json object" +- type: "string" +- AppArmor: +- type: "object" +- description: "Options for configuring AppArmor on the container" +- properties: +- Mode: +- type: "string" +- enum: +- - "default" +- - "disabled" +- NoNewPrivileges: +- type: "boolean" +- description: "Configuration of the no_new_privs bit in the container" +- +- TTY: +- description: "Whether a pseudo-TTY should be allocated." +- type: "boolean" +- OpenStdin: +- description: "Open `stdin`" +- type: "boolean" +- ReadOnly: +- description: "Mount the container's root filesystem as read only." +- type: "boolean" +- Mounts: +- description: | +- Specification for mounts to be added to containers created as part +- of the service. +- type: "array" +- items: +- $ref: "#/definitions/Mount" +- StopSignal: +- description: "Signal to stop the container." +- type: "string" +- StopGracePeriod: +- description: | +- Amount of time to wait for the container to terminate before +- forcefully killing it. +- type: "integer" +- format: "int64" +- Healthcheck: +- $ref: "#/definitions/HealthConfig" +- Hosts: +- type: "array" +- description: | +- A list of hostname/IP mappings to add to the container's `hosts` +- file. The format of extra hosts is specified in the +- [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) +- man page: +- +- IP_address canonical_hostname [aliases...] +- items: +- type: "string" +- DNSConfig: +- description: | +- Specification for DNS related configurations in resolver configuration +- file (`resolv.conf`). +- type: "object" +- properties: +- Nameservers: +- description: "The IP addresses of the name servers." +- type: "array" +- items: +- type: "string" +- Search: +- description: "A search list for host-name lookup." +- type: "array" +- items: +- type: "string" +- Options: +- description: | +- A list of internal resolver variables to be modified (e.g., +- `debug`, `ndots:3`, etc.). +- type: "array" +- items: +- type: "string" +- Secrets: +- description: | +- Secrets contains references to zero or more secrets that will be +- exposed to the service. +- type: "array" +- items: +- type: "object" +- properties: +- File: +- description: | +- File represents a specific target that is backed by a file. +- type: "object" +- properties: +- Name: +- description: | +- Name represents the final filename in the filesystem. +- type: "string" +- UID: +- description: "UID represents the file UID." +- type: "string" +- GID: +- description: "GID represents the file GID." +- type: "string" +- Mode: +- description: "Mode represents the FileMode of the file." +- type: "integer" +- format: "uint32" +- SecretID: +- description: | +- SecretID represents the ID of the specific secret that we're +- referencing. +- type: "string" +- SecretName: +- description: | +- SecretName is the name of the secret that this references, +- but this is just provided for lookup/display purposes. The +- secret in the reference will be identified by its ID. +- type: "string" +- OomScoreAdj: +- type: "integer" +- format: "int64" +- description: | +- An integer value containing the score given to the container in +- order to tune OOM killer preferences. +- example: 0 +- Configs: +- description: | +- Configs contains references to zero or more configs that will be +- exposed to the service. +- type: "array" +- items: +- type: "object" +- properties: +- File: +- description: | +- File represents a specific target that is backed by a file. +- +-


+- +- > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive +- type: "object" +- properties: +- Name: +- description: | +- Name represents the final filename in the filesystem. +- type: "string" +- UID: +- description: "UID represents the file UID." +- type: "string" +- GID: +- description: "GID represents the file GID." +- type: "string" +- Mode: +- description: "Mode represents the FileMode of the file." +- type: "integer" +- format: "uint32" +- Runtime: +- description: | +- Runtime represents a target that is not mounted into the +- container but is used by the task +- +-


+- +- > **Note**: `Configs.File` and `Configs.Runtime` are mutually +- > exclusive +- type: "object" +- ConfigID: +- description: | +- ConfigID represents the ID of the specific config that we're +- referencing. +- type: "string" +- ConfigName: +- description: | +- ConfigName is the name of the config that this references, +- but this is just provided for lookup/display purposes. The +- config in the reference will be identified by its ID. +- type: "string" +- Isolation: +- type: "string" +- description: | +- Isolation technology of the containers running the service. +- (Windows only) +- enum: +- - "default" +- - "process" +- - "hyperv" +- - "" +- Init: +- description: | +- Run an init inside the container that forwards signals and reaps +- processes. This field is omitted if empty, and the default (as +- configured on the daemon) is used. +- type: "boolean" +- x-nullable: true +- Sysctls: +- description: | +- Set kernel namedspaced parameters (sysctls) in the container. +- The Sysctls option on services accepts the same sysctls as the +- are supported on containers. Note that while the same sysctls are +- supported, no guarantees or checks are made about their +- suitability for a clustered environment, and it's up to the user +- to determine whether a given sysctl will work properly in a +- Service. +- type: "object" +- additionalProperties: +- type: "string" +- # This option is not used by Windows containers +- CapabilityAdd: +- type: "array" +- description: | +- A list of kernel capabilities to add to the default set +- for the container. +- items: +- type: "string" +- example: +- - "CAP_NET_RAW" +- - "CAP_SYS_ADMIN" +- - "CAP_SYS_CHROOT" +- - "CAP_SYSLOG" +- CapabilityDrop: +- type: "array" +- description: | +- A list of kernel capabilities to drop from the default set +- for the container. +- items: +- type: "string" +- example: +- - "CAP_NET_RAW" +- Ulimits: +- description: | +- A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`" +- type: "array" +- items: +- type: "object" +- properties: +- Name: +- description: "Name of ulimit" +- type: "string" +- Soft: +- description: "Soft limit" +- type: "integer" +- Hard: +- description: "Hard limit" +- type: "integer" +- NetworkAttachmentSpec: +- description: | +- Read-only spec type for non-swarm containers attached to swarm overlay +- networks. +- +-


+- +- > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are +- > mutually exclusive. PluginSpec is only used when the Runtime field +- > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime +- > field is set to `attachment`. +- type: "object" +- properties: +- ContainerID: +- description: "ID of the container represented by this task" +- type: "string" +- Resources: +- description: | +- Resource requirements which apply to each individual container created +- as part of the service. +- type: "object" +- properties: +- Limits: +- description: "Define resources limits." +- $ref: "#/definitions/Limit" +- Reservations: +- description: "Define resources reservation." +- $ref: "#/definitions/ResourceObject" +- SwapBytes: +- description: | +- Amount of swap in bytes - can only be used together with a memory limit. +- If not specified, the default behaviour is to grant a swap space twice +- as big as the memory limit. +- Set to -1 to enable unlimited swap. +- type: "integer" +- format: "int64" +- minimum: -1 +- x-nullable: true +- x-omitempty: true +- MemorySwappiness: +- description: | +- Tune the service's containers' memory swappiness (0 to 100). +- If not specified, defaults to the containers' OS' default, generally 60, +- or whatever value was predefined in the image. +- Set to -1 to unset a previously set value. +- type: "integer" +- format: "int64" +- minimum: -1 +- maximum: 100 +- x-nullable: true +- x-omitempty: true +- RestartPolicy: +- description: | +- Specification for the restart policy which applies to containers +- created as part of this service. +- type: "object" +- properties: +- Condition: +- description: "Condition for restart." +- type: "string" +- enum: +- - "none" +- - "on-failure" +- - "any" +- Delay: +- description: "Delay between restart attempts." +- type: "integer" +- format: "int64" +- MaxAttempts: +- description: | +- Maximum attempts to restart a given container before giving up +- (default value is 0, which is ignored). +- type: "integer" +- format: "int64" +- default: 0 +- Window: +- description: | +- Windows is the time window used to evaluate the restart policy +- (default value is 0, which is unbounded). +- type: "integer" +- format: "int64" +- default: 0 +- Placement: +- type: "object" +- properties: +- Constraints: +- description: | +- An array of constraint expressions to limit the set of nodes where +- a task can be scheduled. Constraint expressions can either use a +- _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find +- nodes that satisfy every expression (AND match). Constraints can +- match node or Docker Engine labels as follows: +- +- node attribute | matches | example +- ---------------------|--------------------------------|----------------------------------------------- +- `node.id` | Node ID | `node.id==2ivku8v2gvtg4` +- `node.hostname` | Node hostname | `node.hostname!=node-2` +- `node.role` | Node role (`manager`/`worker`) | `node.role==manager` +- `node.platform.os` | Node operating system | `node.platform.os==windows` +- `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` +- `node.labels` | User-defined node labels | `node.labels.security==high` +- `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04` +- +- `engine.labels` apply to Docker Engine labels like operating system, +- drivers, etc. Swarm administrators add `node.labels` for operational +- purposes by using the [`node update endpoint`](#operation/NodeUpdate). +- +- type: "array" +- items: +- type: "string" +- example: +- - "node.hostname!=node3.corp.example.com" +- - "node.role!=manager" +- - "node.labels.type==production" +- - "node.platform.os==linux" +- - "node.platform.arch==x86_64" +- Preferences: +- description: | +- Preferences provide a way to make the scheduler aware of factors +- such as topology. They are provided in order from highest to +- lowest precedence. +- type: "array" +- items: +- type: "object" +- properties: +- Spread: +- type: "object" +- properties: +- SpreadDescriptor: +- description: | +- label descriptor, such as `engine.labels.az`. +- type: "string" +- example: +- - Spread: +- SpreadDescriptor: "node.labels.datacenter" +- - Spread: +- SpreadDescriptor: "node.labels.rack" +- MaxReplicas: +- description: | +- Maximum number of replicas for per node (default value is 0, which +- is unlimited) +- type: "integer" +- format: "int64" +- default: 0 +- Platforms: +- description: | +- Platforms stores all the platforms that the service's image can +- run on. This field is used in the platform filter for scheduling. +- If empty, then the platform filter is off, meaning there are no +- scheduling restrictions. +- type: "array" +- items: +- $ref: "#/definitions/Platform" +- ForceUpdate: +- description: | +- A counter that triggers an update even if no relevant parameters have +- been changed. +- type: "integer" +- format: "uint64" +- Runtime: +- description: | +- Runtime is the type of runtime specified for the task executor. +- type: "string" +- Networks: +- description: "Specifies which networks the service should attach to." +- type: "array" +- items: +- $ref: "#/definitions/NetworkAttachmentConfig" +- LogDriver: +- description: | +- Specifies the log driver to use for tasks created from this spec. If +- not present, the default one for the swarm will be used, finally +- falling back to the engine default if not specified. +- type: "object" +- properties: +- Name: +- type: "string" +- Options: +- type: "object" +- additionalProperties: +- type: "string" +- +- TaskState: +- type: "string" +- enum: +- - "new" +- - "allocated" +- - "pending" +- - "assigned" +- - "accepted" +- - "preparing" +- - "ready" +- - "starting" +- - "running" +- - "complete" +- - "shutdown" +- - "failed" +- - "rejected" +- - "remove" +- - "orphaned" +- +- ContainerStatus: +- type: "object" +- description: "represents the status of a container." +- properties: +- ContainerID: +- type: "string" +- PID: +- type: "integer" +- ExitCode: +- type: "integer" +- +- PortStatus: +- type: "object" +- description: "represents the port status of a task's host ports whose service has published host ports" +- properties: +- Ports: +- type: "array" +- items: +- $ref: "#/definitions/EndpointPortConfig" +- +- TaskStatus: +- type: "object" +- description: "represents the status of a task." +- properties: +- Timestamp: +- type: "string" +- format: "dateTime" +- State: +- $ref: "#/definitions/TaskState" +- Message: +- type: "string" +- Err: +- type: "string" +- ContainerStatus: +- $ref: "#/definitions/ContainerStatus" +- PortStatus: +- $ref: "#/definitions/PortStatus" +- +- NetworkAttachment: +- description: | +- Specifies how a task is attached to a network, and the addresses the +- task was assigned on that network. +- type: "object" +- properties: +- Network: +- $ref: "#/definitions/Network" +- Addresses: +- description: | +- The IP addresses (in CIDR notation) assigned to the task on this +- network. To maintain backward compatibility this field accepts CIDR +- notation, but only the IP address is used. +- type: "array" +- items: +- type: "string" +- format: "cidr" +- example: +- Network: +- ID: "4qvuz4ko70xaltuqbt8956gd1" +- Addresses: +- - "10.255.0.10/16" +- +- Task: +- type: "object" +- properties: +- ID: +- description: "The ID of the task." +- type: "string" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- type: "string" +- format: "dateTime" +- UpdatedAt: +- type: "string" +- format: "dateTime" +- Name: +- description: "Name of the task." +- type: "string" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- Spec: +- $ref: "#/definitions/TaskSpec" +- ServiceID: +- description: "The ID of the service this task is part of." +- type: "string" +- Slot: +- type: "integer" +- NodeID: +- description: "The ID of the node that this task is on." +- type: "string" +- AssignedGenericResources: +- $ref: "#/definitions/GenericResources" +- Status: +- $ref: "#/definitions/TaskStatus" +- DesiredState: +- $ref: "#/definitions/TaskState" +- JobIteration: +- description: | +- If the Service this Task belongs to is a job-mode service, contains +- the JobIteration of the Service this Task was created for. Absent if +- the Task was created for a Replicated or Global Service. +- $ref: "#/definitions/ObjectVersion" +- NetworksAttachments: +- description: | +- The networks that this task is attached to, and the addresses the +- task was assigned on each of them. +- type: "array" +- items: +- $ref: "#/definitions/NetworkAttachment" +- example: +- ID: "0kzzo1i0y4jz6027t0k7aezc7" +- Version: +- Index: 71 +- CreatedAt: "2016-06-07T21:07:31.171892745Z" +- UpdatedAt: "2016-06-07T21:07:31.376370513Z" +- Spec: +- ContainerSpec: +- Image: "redis" +- Resources: +- Limits: {} +- Reservations: {} +- RestartPolicy: +- Condition: "any" +- MaxAttempts: 0 +- Placement: {} +- ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" +- Slot: 1 +- NodeID: "60gvrl6tm78dmak4yl7srz94v" +- Status: +- Timestamp: "2016-06-07T21:07:31.290032978Z" +- State: "running" +- Message: "started" +- ContainerStatus: +- ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035" +- PID: 677 +- DesiredState: "running" +- NetworksAttachments: +- - Network: +- ID: "4qvuz4ko70xaltuqbt8956gd1" +- Version: +- Index: 18 +- CreatedAt: "2016-06-07T20:31:11.912919752Z" +- UpdatedAt: "2016-06-07T21:07:29.955277358Z" +- Spec: +- Name: "ingress" +- Labels: +- com.docker.swarm.internal: "true" +- DriverConfiguration: {} +- IPAMOptions: +- Driver: {} +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- DriverState: +- Name: "overlay" +- Options: +- com.docker.network.driver.overlay.vxlanid_list: "256" +- IPAMOptions: +- Driver: +- Name: "default" +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- Addresses: +- - "10.255.0.10/16" +- AssignedGenericResources: +- - DiscreteResourceSpec: +- Kind: "SSD" +- Value: 3 +- - NamedResourceSpec: +- Kind: "GPU" +- Value: "UUID1" +- - NamedResourceSpec: +- Kind: "GPU" +- Value: "UUID2" +- +- ServiceSpec: +- description: "User modifiable configuration for a service." +- type: object +- properties: +- Name: +- description: "Name of the service." +- type: "string" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- TaskTemplate: +- $ref: "#/definitions/TaskSpec" +- Mode: +- description: "Scheduling mode for the service." +- type: "object" +- properties: +- Replicated: +- type: "object" +- properties: +- Replicas: +- type: "integer" +- format: "int64" +- Global: +- type: "object" +- ReplicatedJob: +- description: | +- The mode used for services with a finite number of tasks that run +- to a completed state. +- type: "object" +- properties: +- MaxConcurrent: +- description: | +- The maximum number of replicas to run simultaneously. +- type: "integer" +- format: "int64" +- default: 1 +- TotalCompletions: +- description: | +- The total number of replicas desired to reach the Completed +- state. If unset, will default to the value of `MaxConcurrent` +- type: "integer" +- format: "int64" +- GlobalJob: +- description: | +- The mode used for services which run a task to the completed state +- on each valid node. +- type: "object" +- UpdateConfig: +- description: "Specification for the update strategy of the service." +- type: "object" +- properties: +- Parallelism: +- description: | +- Maximum number of tasks to be updated in one iteration (0 means +- unlimited parallelism). +- type: "integer" +- format: "int64" +- Delay: +- description: "Amount of time between updates, in nanoseconds." +- type: "integer" +- format: "int64" +- FailureAction: +- description: | +- Action to take if an updated task fails to run, or stops running +- during the update. +- type: "string" +- enum: +- - "continue" +- - "pause" +- - "rollback" +- Monitor: +- description: | +- Amount of time to monitor each updated task for failures, in +- nanoseconds. +- type: "integer" +- format: "int64" +- MaxFailureRatio: +- description: | +- The fraction of tasks that may fail during an update before the +- failure action is invoked, specified as a floating point number +- between 0 and 1. +- type: "number" +- default: 0 +- Order: +- description: | +- The order of operations when rolling out an updated task. Either +- the old task is shut down before the new task is started, or the +- new task is started before the old task is shut down. +- type: "string" +- enum: +- - "stop-first" +- - "start-first" +- RollbackConfig: +- description: "Specification for the rollback strategy of the service." +- type: "object" +- properties: +- Parallelism: +- description: | +- Maximum number of tasks to be rolled back in one iteration (0 means +- unlimited parallelism). +- type: "integer" +- format: "int64" +- Delay: +- description: | +- Amount of time between rollback iterations, in nanoseconds. +- type: "integer" +- format: "int64" +- FailureAction: +- description: | +- Action to take if an rolled back task fails to run, or stops +- running during the rollback. +- type: "string" +- enum: +- - "continue" +- - "pause" +- Monitor: +- description: | +- Amount of time to monitor each rolled back task for failures, in +- nanoseconds. +- type: "integer" +- format: "int64" +- MaxFailureRatio: +- description: | +- The fraction of tasks that may fail during a rollback before the +- failure action is invoked, specified as a floating point number +- between 0 and 1. +- type: "number" +- default: 0 +- Order: +- description: | +- The order of operations when rolling back a task. Either the old +- task is shut down before the new task is started, or the new task +- is started before the old task is shut down. +- type: "string" +- enum: +- - "stop-first" +- - "start-first" +- Networks: +- description: | +- Specifies which networks the service should attach to. +- +- Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. +- type: "array" +- items: +- $ref: "#/definitions/NetworkAttachmentConfig" +- +- EndpointSpec: +- $ref: "#/definitions/EndpointSpec" +- +- EndpointPortConfig: +- type: "object" +- properties: +- Name: +- type: "string" +- Protocol: +- type: "string" +- enum: +- - "tcp" +- - "udp" +- - "sctp" +- TargetPort: +- description: "The port inside the container." +- type: "integer" +- PublishedPort: +- description: "The port on the swarm hosts." +- type: "integer" +- PublishMode: +- description: | +- The mode in which port is published. +- +-


+- +- - "ingress" makes the target port accessible on every node, +- regardless of whether there is a task for the service running on +- that node or not. +- - "host" bypasses the routing mesh and publish the port directly on +- the swarm node where that service is running. +- +- type: "string" +- enum: +- - "ingress" +- - "host" +- default: "ingress" +- example: "ingress" +- +- EndpointSpec: +- description: "Properties that can be configured to access and load balance a service." +- type: "object" +- properties: +- Mode: +- description: | +- The mode of resolution to use for internal load balancing between tasks. +- type: "string" +- enum: +- - "vip" +- - "dnsrr" +- default: "vip" +- Ports: +- description: | +- List of exposed ports that this service is accessible on from the +- outside. Ports can only be provided if `vip` resolution mode is used. +- type: "array" +- items: +- $ref: "#/definitions/EndpointPortConfig" +- +- Service: +- type: "object" +- properties: +- ID: +- type: "string" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- type: "string" +- format: "dateTime" +- UpdatedAt: +- type: "string" +- format: "dateTime" +- Spec: +- $ref: "#/definitions/ServiceSpec" +- Endpoint: +- type: "object" +- properties: +- Spec: +- $ref: "#/definitions/EndpointSpec" +- Ports: +- type: "array" +- items: +- $ref: "#/definitions/EndpointPortConfig" +- VirtualIPs: +- type: "array" +- items: +- type: "object" +- properties: +- NetworkID: +- type: "string" +- Addr: +- type: "string" +- UpdateStatus: +- description: "The status of a service update." +- type: "object" +- properties: +- State: +- type: "string" +- enum: +- - "updating" +- - "paused" +- - "completed" +- StartedAt: +- type: "string" +- format: "dateTime" +- CompletedAt: +- type: "string" +- format: "dateTime" +- Message: +- type: "string" +- ServiceStatus: +- description: | +- The status of the service's tasks. Provided only when requested as +- part of a ServiceList operation. +- type: "object" +- properties: +- RunningTasks: +- description: | +- The number of tasks for the service currently in the Running state. +- type: "integer" +- format: "uint64" +- example: 7 +- DesiredTasks: +- description: | +- The number of tasks for the service desired to be running. +- For replicated services, this is the replica count from the +- service spec. For global services, this is computed by taking +- count of all tasks for the service with a Desired State other +- than Shutdown. +- type: "integer" +- format: "uint64" +- example: 10 +- CompletedTasks: +- description: | +- The number of tasks for a job that are in the Completed state. +- This field must be cross-referenced with the service type, as the +- value of 0 may mean the service is not in a job mode, or it may +- mean the job-mode service has no tasks yet Completed. +- type: "integer" +- format: "uint64" +- JobStatus: +- description: | +- The status of the service when it is in one of ReplicatedJob or +- GlobalJob modes. Absent on Replicated and Global mode services. The +- JobIteration is an ObjectVersion, but unlike the Service's version, +- does not need to be sent with an update request. +- type: "object" +- properties: +- JobIteration: +- description: | +- JobIteration is a value increased each time a Job is executed, +- successfully or otherwise. "Executed", in this case, means the +- job as a whole has been started, not that an individual Task has +- been launched. A job is "Executed" when its ServiceSpec is +- updated. JobIteration can be used to disambiguate Tasks belonging +- to different executions of a job. Though JobIteration will +- increase with each subsequent execution, it may not necessarily +- increase by 1, and so JobIteration should not be used to +- $ref: "#/definitions/ObjectVersion" +- LastExecution: +- description: | +- The last time, as observed by the server, that this job was +- started. +- type: "string" +- format: "dateTime" +- example: +- ID: "9mnpnzenvg8p8tdbtq4wvbkcz" +- Version: +- Index: 19 +- CreatedAt: "2016-06-07T21:05:51.880065305Z" +- UpdatedAt: "2016-06-07T21:07:29.962229872Z" +- Spec: +- Name: "hopeful_cori" +- TaskTemplate: +- ContainerSpec: +- Image: "redis" +- Resources: +- Limits: {} +- Reservations: {} +- RestartPolicy: +- Condition: "any" +- MaxAttempts: 0 +- Placement: {} +- ForceUpdate: 0 +- Mode: +- Replicated: +- Replicas: 1 +- UpdateConfig: +- Parallelism: 1 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- RollbackConfig: +- Parallelism: 1 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- EndpointSpec: +- Mode: "vip" +- Ports: +- - +- Protocol: "tcp" +- TargetPort: 6379 +- PublishedPort: 30001 +- Endpoint: +- Spec: +- Mode: "vip" +- Ports: +- - +- Protocol: "tcp" +- TargetPort: 6379 +- PublishedPort: 30001 +- Ports: +- - +- Protocol: "tcp" +- TargetPort: 6379 +- PublishedPort: 30001 +- VirtualIPs: +- - +- NetworkID: "4qvuz4ko70xaltuqbt8956gd1" +- Addr: "10.255.0.2/16" +- - +- NetworkID: "4qvuz4ko70xaltuqbt8956gd1" +- Addr: "10.255.0.3/16" +- +- ImageDeleteResponseItem: +- type: "object" +- x-go-name: "DeleteResponse" +- properties: +- Untagged: +- description: "The image ID of an image that was untagged" +- type: "string" +- Deleted: +- description: "The image ID of an image that was deleted" +- type: "string" +- +- ServiceCreateResponse: +- type: "object" +- description: | +- contains the information returned to a client on the +- creation of a new service. +- properties: +- ID: +- description: "The ID of the created service." +- type: "string" +- x-nullable: false +- example: "ak7w3gjqoa3kuz8xcpnyy0pvl" +- Warnings: +- description: | +- Optional warning message. +- +- FIXME(thaJeztah): this should have "omitempty" in the generated type. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: +- - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" +- +- ServiceUpdateResponse: +- type: "object" +- properties: +- Warnings: +- description: "Optional warning messages" +- type: "array" +- items: +- type: "string" +- example: +- Warnings: +- - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" +- +- ContainerInspectResponse: +- type: "object" +- title: "ContainerInspectResponse" +- x-go-name: "InspectResponse" +- properties: +- Id: +- description: |- +- The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). +- type: "string" +- x-go-name: "ID" +- minLength: 64 +- maxLength: 64 +- pattern: "^[0-9a-fA-F]{64}$" +- example: "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" +- Created: +- description: |- +- Date and time at which the container was created, formatted in +- [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. +- type: "string" +- format: "dateTime" +- x-nullable: true +- example: "2025-02-17T17:43:39.64001363Z" +- Path: +- description: |- +- The path to the command being run +- type: "string" +- example: "/bin/sh" +- Args: +- description: "The arguments to the command being run" +- type: "array" +- items: +- type: "string" +- example: +- - "-c" +- - "exit 9" +- State: +- $ref: "#/definitions/ContainerState" +- Image: +- description: |- +- The ID (digest) of the image that this container was created from. +- type: "string" +- example: "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" +- ResolvConfPath: +- description: |- +- Location of the `/etc/resolv.conf` generated for the container on the +- host. +- +- This file is managed through the docker daemon, and should not be +- accessed or modified by other tools. +- type: "string" +- example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf" +- HostnamePath: +- description: |- +- Location of the `/etc/hostname` generated for the container on the +- host. +- +- This file is managed through the docker daemon, and should not be +- accessed or modified by other tools. +- type: "string" +- example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname" +- HostsPath: +- description: |- +- Location of the `/etc/hosts` generated for the container on the +- host. +- +- This file is managed through the docker daemon, and should not be +- accessed or modified by other tools. +- type: "string" +- example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts" +- LogPath: +- description: |- +- Location of the file used to buffer the container's logs. Depending on +- the logging-driver used for the container, this field may be omitted. +- +- This file is managed through the docker daemon, and should not be +- accessed or modified by other tools. +- type: "string" +- x-nullable: true +- example: "/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log" +- Name: +- description: |- +- The name associated with this container. +- +- For historic reasons, the name may be prefixed with a forward-slash (`/`). +- type: "string" +- example: "/funny_chatelet" +- RestartCount: +- description: |- +- Number of times the container was restarted since it was created, +- or since daemon was started. +- type: "integer" +- example: 0 +- Driver: +- description: |- +- The storage-driver used for the container's filesystem (graph-driver +- or snapshotter). +- type: "string" +- example: "overlayfs" +- Platform: +- description: |- +- The platform (operating system) for which the container was created. +- +- This field was introduced for the experimental "LCOW" (Linux Containers +- On Windows) features, which has been removed. In most cases, this field +- is equal to the host's operating system (`linux` or `windows`). +- type: "string" +- example: "linux" +- ImageManifestDescriptor: +- $ref: "#/definitions/OCIDescriptor" +- description: |- +- OCI descriptor of the platform-specific manifest of the image +- the container was created from. +- +- Note: Only available if the daemon provides a multi-platform +- image store. +- MountLabel: +- description: |- +- SELinux mount label set for the container. +- type: "string" +- example: "" +- ProcessLabel: +- description: |- +- SELinux process label set for the container. +- type: "string" +- example: "" +- AppArmorProfile: +- description: |- +- The AppArmor profile set for the container. +- type: "string" +- example: "" +- ExecIDs: +- description: |- +- IDs of exec instances that are running in the container. +- type: "array" +- items: +- type: "string" +- x-nullable: true +- example: +- - "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca" +- - "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" +- HostConfig: +- $ref: "#/definitions/HostConfig" +- GraphDriver: +- $ref: "#/definitions/DriverData" +- x-nullable: true +- Storage: +- $ref: "#/definitions/Storage" +- x-nullable: true +- SizeRw: +- description: |- +- The size of files that have been created or changed by this container. +- +- This field is omitted by default, and only set when size is requested +- in the API request. +- type: "integer" +- format: "int64" +- x-nullable: true +- example: "122880" +- SizeRootFs: +- description: |- +- The total size of all files in the read-only layers from the image +- that the container uses. These layers can be shared between containers. +- +- This field is omitted by default, and only set when size is requested +- in the API request. +- type: "integer" +- format: "int64" +- x-nullable: true +- example: "1653948416" +- Mounts: +- description: |- +- List of mounts used by the container. +- type: "array" +- items: +- $ref: "#/definitions/MountPoint" +- Config: +- $ref: "#/definitions/ContainerConfig" +- NetworkSettings: +- $ref: "#/definitions/NetworkSettings" +- +- ContainerSummary: +- type: "object" +- properties: +- Id: +- description: |- +- The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). +- type: "string" +- x-go-name: "ID" +- minLength: 64 +- maxLength: 64 +- pattern: "^[0-9a-fA-F]{64}$" +- example: "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" +- Names: +- description: |- +- The names associated with this container. Most containers have a single +- name, but when using legacy "links", the container can have multiple +- names. +- +- For historic reasons, names are prefixed with a forward-slash (`/`). +- type: "array" +- items: +- type: "string" +- example: +- - "/funny_chatelet" +- Image: +- description: |- +- The name or ID of the image used to create the container. +- +- This field shows the image reference as was specified when creating the container, +- which can be in its canonical form (e.g., `docker.io/library/ubuntu:latest` +- or `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`), +- short form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`). +- +- The content of this field can be updated at runtime if the image used to +- create the container is untagged, in which case the field is updated to +- contain the the image ID (digest) it was resolved to in its canonical, +- non-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`). +- type: "string" +- example: "docker.io/library/ubuntu:latest" +- ImageID: +- description: |- +- The ID (digest) of the image that this container was created from. +- type: "string" +- example: "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" +- ImageManifestDescriptor: +- $ref: "#/definitions/OCIDescriptor" +- x-nullable: true +- description: | +- OCI descriptor of the platform-specific manifest of the image +- the container was created from. +- +- Note: Only available if the daemon provides a multi-platform +- image store. +- +- This field is not populated in the `GET /system/df` endpoint. +- Command: +- description: "Command to run when starting the container" +- type: "string" +- example: "/bin/bash" +- Created: +- description: |- +- Date and time at which the container was created as a Unix timestamp +- (number of seconds since EPOCH). +- type: "integer" +- format: "int64" +- example: "1739811096" +- Ports: +- description: |- +- Port-mappings for the container. +- type: "array" +- items: +- $ref: "#/definitions/PortSummary" +- SizeRw: +- description: |- +- The size of files that have been created or changed by this container. +- +- This field is omitted by default, and only set when size is requested +- in the API request. +- type: "integer" +- format: "int64" +- x-nullable: true +- example: "122880" +- SizeRootFs: +- description: |- +- The total size of all files in the read-only layers from the image +- that the container uses. These layers can be shared between containers. +- +- This field is omitted by default, and only set when size is requested +- in the API request. +- type: "integer" +- format: "int64" +- x-nullable: true +- example: "1653948416" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.vendor: "Acme" +- com.example.license: "GPL" +- com.example.version: "1.0" +- State: +- description: | +- The state of this container. +- type: "string" +- enum: +- - "created" +- - "running" +- - "paused" +- - "restarting" +- - "exited" +- - "removing" +- - "dead" +- example: "running" +- Status: +- description: |- +- Additional human-readable status of this container (e.g. `Exit 0`) +- type: "string" +- example: "Up 4 days" +- HostConfig: +- type: "object" +- description: |- +- Summary of host-specific runtime information of the container. This +- is a reduced set of information in the container's "HostConfig" as +- available in the container "inspect" response. +- properties: +- NetworkMode: +- description: |- +- Networking mode (`host`, `none`, `container:`) or name of the +- primary network the container is using. +- +- This field is primarily for backward compatibility. The container +- can be connected to multiple networks for which information can be +- found in the `NetworkSettings.Networks` field, which enumerates +- settings per network. +- type: "string" +- example: "mynetwork" +- Annotations: +- description: |- +- Arbitrary key-value metadata attached to the container. +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "string" +- example: +- io.kubernetes.docker.type: "container" +- io.kubernetes.sandbox.id: "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" +- NetworkSettings: +- description: |- +- Summary of the container's network settings +- type: "object" +- properties: +- Networks: +- type: "object" +- description: |- +- Summary of network-settings for each network the container is +- attached to. +- additionalProperties: +- $ref: "#/definitions/EndpointSettings" +- Mounts: +- type: "array" +- description: |- +- List of mounts used by the container. +- items: +- $ref: "#/definitions/MountPoint" +- Health: +- type: "object" +- description: |- +- Summary of health status +- +- Added in v1.52, before that version all container summary not include Health. +- After this attribute introduced, it includes containers with no health checks configured, +- or containers that are not running with none +- properties: +- Status: +- type: "string" +- description: |- +- the health status of the container +- enum: +- - "none" +- - "starting" +- - "healthy" +- - "unhealthy" +- example: "healthy" +- FailingStreak: +- description: "FailingStreak is the number of consecutive failures" +- type: "integer" +- example: 0 +- +- ContainersDiskUsage: +- type: "object" +- x-go-name: "DiskUsage" +- x-go-package: "github.com/moby/moby/api/types/container" +- description: | +- represents system data usage information for container resources. +- properties: +- ActiveCount: +- description: | +- Count of active containers. +- type: "integer" +- format: "int64" +- example: 1 +- TotalCount: +- description: | +- Count of all containers. +- type: "integer" +- format: "int64" +- example: 4 +- Reclaimable: +- description: | +- Disk space that can be reclaimed by removing inactive containers. +- type: "integer" +- format: "int64" +- example: 12345678 +- TotalSize: +- description: | +- Disk space in use by containers. +- type: "integer" +- format: "int64" +- example: 98765432 +- Items: +- description: | +- List of container summaries. +- type: "array" +- x-omitempty: true +- items: +- x-go-type: +- type: Summary +- +- Driver: +- description: "Driver represents a driver (network, logging, secrets)." +- type: "object" +- required: [Name] +- properties: +- Name: +- description: "Name of the driver." +- type: "string" +- x-nullable: false +- example: "some-driver" +- Options: +- description: "Key/value map of driver-specific options." +- type: "object" +- x-nullable: false +- additionalProperties: +- type: "string" +- example: +- OptionA: "value for driver-specific option A" +- OptionB: "value for driver-specific option B" +- +- SecretSpec: +- type: "object" +- properties: +- Name: +- description: "User-defined name of the secret." +- type: "string" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- Data: +- description: | +- Data is the data to store as a secret, formatted as a standard base64-encoded +- ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. +- It must be empty if the Driver field is set, in which case the data is +- loaded from an external secret store. The maximum allowed size is 500KB, +- as defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize). +- +- This field is only used to _create_ a secret, and is not returned by +- other endpoints. +- type: "string" +- example: "" +- Driver: +- description: | +- Name of the secrets driver used to fetch the secret's value from an +- external secret store. +- $ref: "#/definitions/Driver" +- Templating: +- description: | +- Templating driver, if applicable +- +- Templating controls whether and how to evaluate the config payload as +- a template. If no driver is set, no templating is used. +- $ref: "#/definitions/Driver" +- +- Secret: +- type: "object" +- properties: +- ID: +- type: "string" +- example: "blt1owaxmitz71s9v5zh81zun" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- type: "string" +- format: "dateTime" +- example: "2017-07-20T13:55:28.678958722Z" +- UpdatedAt: +- type: "string" +- format: "dateTime" +- example: "2017-07-20T13:55:28.678958722Z" +- Spec: +- $ref: "#/definitions/SecretSpec" +- +- ConfigSpec: +- type: "object" +- properties: +- Name: +- description: "User-defined name of the config." +- type: "string" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- Data: +- description: | +- Data is the data to store as a config, formatted as a standard base64-encoded +- ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. +- The maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize). +- type: "string" +- Templating: +- description: | +- Templating driver, if applicable +- +- Templating controls whether and how to evaluate the config payload as +- a template. If no driver is set, no templating is used. +- $ref: "#/definitions/Driver" +- +- Config: +- type: "object" +- properties: +- ID: +- type: "string" +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- type: "string" +- format: "dateTime" +- UpdatedAt: +- type: "string" +- format: "dateTime" +- Spec: +- $ref: "#/definitions/ConfigSpec" +- +- ContainerState: +- description: | +- ContainerState stores container's running state. It's part of ContainerJSONBase +- and will be returned by the "inspect" command. +- type: "object" +- x-nullable: true +- properties: +- Status: +- description: | +- String representation of the container state. Can be one of "created", +- "running", "paused", "restarting", "removing", "exited", or "dead". +- type: "string" +- enum: ["created", "running", "paused", "restarting", "removing", "exited", "dead"] +- example: "running" +- Running: +- description: | +- Whether this container is running. +- +- Note that a running container can be _paused_. The `Running` and `Paused` +- booleans are not mutually exclusive: +- +- When pausing a container (on Linux), the freezer cgroup is used to suspend +- all processes in the container. Freezing the process requires the process to +- be running. As a result, paused containers are both `Running` _and_ `Paused`. +- +- Use the `Status` field instead to determine if a container's state is "running". +- type: "boolean" +- example: true +- Paused: +- description: "Whether this container is paused." +- type: "boolean" +- example: false +- Restarting: +- description: "Whether this container is restarting." +- type: "boolean" +- example: false +- OOMKilled: +- description: | +- Whether a process within this container has been killed because it ran +- out of memory since the container was last started. +- type: "boolean" +- example: false +- Dead: +- type: "boolean" +- example: false +- Pid: +- description: "The process ID of this container" +- type: "integer" +- example: 1234 +- ExitCode: +- description: "The last exit code of this container" +- type: "integer" +- example: 0 +- Error: +- type: "string" +- StartedAt: +- description: "The time when this container was last started." +- type: "string" +- example: "2020-01-06T09:06:59.461876391Z" +- FinishedAt: +- description: "The time when this container last exited." +- type: "string" +- example: "2020-01-06T09:07:59.461876391Z" +- Health: +- $ref: "#/definitions/Health" +- +- ContainerCreateResponse: +- description: "OK response to ContainerCreate operation" +- type: "object" +- title: "ContainerCreateResponse" +- x-go-name: "CreateResponse" +- required: [Id, Warnings] +- properties: +- Id: +- description: "The ID of the created container" +- type: "string" +- x-nullable: false +- example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" +- Warnings: +- description: "Warnings encountered when creating the container" +- type: "array" +- x-nullable: false +- items: +- type: "string" +- example: [] +- +- ContainerUpdateResponse: +- type: "object" +- title: "ContainerUpdateResponse" +- x-go-name: "UpdateResponse" +- description: |- +- Response for a successful container-update. +- properties: +- Warnings: +- type: "array" +- description: |- +- Warnings encountered when updating the container. +- items: +- type: "string" +- example: ["Published ports are discarded when using host network mode"] +- +- ContainerStatsResponse: +- description: | +- Statistics sample for a container. +- type: "object" +- x-go-name: "StatsResponse" +- title: "ContainerStatsResponse" +- properties: +- id: +- description: | +- ID of the container for which the stats were collected. +- type: "string" +- x-nullable: true +- example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" +- name: +- description: | +- Name of the container for which the stats were collected. +- type: "string" +- x-nullable: true +- example: "boring_wozniak" +- os_type: +- description: | +- OSType is the OS of the container ("linux" or "windows") to allow +- platform-specific handling of stats. +- type: "string" +- x-nullable: true +- example: "linux" +- read: +- description: | +- Date and time at which this sample was collected. +- The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) +- with nano-seconds. +- type: "string" +- format: "date-time" +- example: "2025-01-16T13:55:22.165243637Z" +- cpu_stats: +- $ref: "#/definitions/ContainerCPUStats" +- memory_stats: +- $ref: "#/definitions/ContainerMemoryStats" +- networks: +- description: | +- Network statistics for the container per interface. +- +- This field is omitted if the container has no networking enabled. +- x-nullable: true +- additionalProperties: +- $ref: "#/definitions/ContainerNetworkStats" +- example: +- eth0: +- rx_bytes: 5338 +- rx_dropped: 0 +- rx_errors: 0 +- rx_packets: 36 +- tx_bytes: 648 +- tx_dropped: 0 +- tx_errors: 0 +- tx_packets: 8 +- eth5: +- rx_bytes: 4641 +- rx_dropped: 0 +- rx_errors: 0 +- rx_packets: 26 +- tx_bytes: 690 +- tx_dropped: 0 +- tx_errors: 0 +- tx_packets: 9 +- pids_stats: +- $ref: "#/definitions/ContainerPidsStats" +- blkio_stats: +- $ref: "#/definitions/ContainerBlkioStats" +- num_procs: +- description: | +- The number of processors on the system. +- +- This field is Windows-specific and always zero for Linux containers. +- type: "integer" +- format: "uint32" +- example: 16 +- storage_stats: +- $ref: "#/definitions/ContainerStorageStats" +- preread: +- description: | +- Date and time at which this first sample was collected. This field +- is not propagated if the "one-shot" option is set. If the "one-shot" +- option is set, this field may be omitted, empty, or set to a default +- date (`0001-01-01T00:00:00Z`). +- +- The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) +- with nano-seconds. +- type: "string" +- format: "date-time" +- example: "2025-01-16T13:55:21.160452595Z" +- precpu_stats: +- $ref: "#/definitions/ContainerCPUStats" +- +- ContainerBlkioStats: +- description: | +- BlkioStats stores all IO service stats for data read and write. +- +- This type is Linux-specific and holds many fields that are specific to cgroups v1. +- On a cgroup v2 host, all fields other than `io_service_bytes_recursive` +- are omitted or `null`. +- +- This type is only populated on Linux and omitted for Windows containers. +- type: "object" +- x-go-name: "BlkioStats" +- x-nullable: true +- properties: +- io_service_bytes_recursive: +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_serviced_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_queue_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_service_time_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_wait_time_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_merged_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- io_time_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- sectors_recursive: +- description: | +- This field is only available when using Linux containers with +- cgroups v1. It is omitted or `null` when using cgroups v2. +- x-nullable: true +- type: "array" +- items: +- $ref: "#/definitions/ContainerBlkioStatEntry" +- example: +- io_service_bytes_recursive: [ +- {"major": 254, "minor": 0, "op": "read", "value": 7593984}, +- {"major": 254, "minor": 0, "op": "write", "value": 100} +- ] +- io_serviced_recursive: null +- io_queue_recursive: null +- io_service_time_recursive: null +- io_wait_time_recursive: null +- io_merged_recursive: null +- io_time_recursive: null +- sectors_recursive: null +- +- ContainerBlkioStatEntry: +- description: | +- Blkio stats entry. +- +- This type is Linux-specific and omitted for Windows containers. +- type: "object" +- x-go-name: "BlkioStatEntry" +- x-nullable: true +- properties: +- major: +- type: "integer" +- format: "uint64" +- example: 254 +- minor: +- type: "integer" +- format: "uint64" +- example: 0 +- op: +- type: "string" +- example: "read" +- value: +- type: "integer" +- format: "uint64" +- example: 7593984 +- +- ContainerCPUStats: +- description: | +- CPU related info of the container +- type: "object" +- x-go-name: "CPUStats" +- x-nullable: true +- properties: +- cpu_usage: +- $ref: "#/definitions/ContainerCPUUsage" +- system_cpu_usage: +- description: | +- System Usage. +- +- This field is Linux-specific and omitted for Windows containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 5 +- online_cpus: +- description: | +- Number of online CPUs. +- +- This field is Linux-specific and omitted for Windows containers. +- type: "integer" +- format: "uint32" +- x-nullable: true +- example: 5 +- throttling_data: +- $ref: "#/definitions/ContainerThrottlingData" +- +- ContainerCPUUsage: +- description: | +- All CPU stats aggregated since container inception. +- type: "object" +- x-go-name: "CPUUsage" +- x-nullable: true +- properties: +- total_usage: +- description: | +- Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows). +- type: "integer" +- format: "uint64" +- example: 29912000 +- percpu_usage: +- description: | +- Total CPU time (in nanoseconds) consumed per core (Linux). +- +- This field is Linux-specific when using cgroups v1. It is omitted +- when using cgroups v2 and Windows containers. +- type: "array" +- x-nullable: true +- items: +- type: "integer" +- format: "uint64" +- example: 29912000 +- +- usage_in_kernelmode: +- description: | +- Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux), +- or time spent (in 100's of nanoseconds) by all container processes in +- kernel mode (Windows). +- +- Not populated for Windows containers using Hyper-V isolation. +- type: "integer" +- format: "uint64" +- example: 21994000 +- usage_in_usermode: +- description: | +- Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux), +- or time spent (in 100's of nanoseconds) by all container processes in +- kernel mode (Windows). +- +- Not populated for Windows containers using Hyper-V isolation. +- type: "integer" +- format: "uint64" +- example: 7918000 +- +- ContainerPidsStats: +- description: | +- PidsStats contains Linux-specific stats of a container's process-IDs (PIDs). +- +- This type is Linux-specific and omitted for Windows containers. +- type: "object" +- x-go-name: "PidsStats" +- x-nullable: true +- properties: +- current: +- description: | +- Current is the number of PIDs in the cgroup. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 5 +- limit: +- description: | +- Limit is the hard limit on the number of pids in the cgroup. +- A "Limit" of 0 means that there is no limit. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: "18446744073709551615" +- +- ContainerThrottlingData: +- description: | +- CPU throttling stats of the container. +- +- This type is Linux-specific and omitted for Windows containers. +- type: "object" +- x-go-name: "ThrottlingData" +- x-nullable: true +- properties: +- periods: +- description: | +- Number of periods with throttling active. +- type: "integer" +- format: "uint64" +- example: 0 +- throttled_periods: +- description: | +- Number of periods when the container hit its throttling limit. +- type: "integer" +- format: "uint64" +- example: 0 +- throttled_time: +- description: | +- Aggregated time (in nanoseconds) the container was throttled for. +- type: "integer" +- format: "uint64" +- example: 0 +- +- ContainerMemoryStats: +- description: | +- Aggregates all memory stats since container inception on Linux. +- Windows returns stats for commit and private working set only. +- type: "object" +- x-go-name: "MemoryStats" +- properties: +- usage: +- description: | +- Current `res_counter` usage for memory. +- +- This field is Linux-specific and omitted for Windows containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- max_usage: +- description: | +- Maximum usage ever recorded. +- +- This field is Linux-specific and only supported on cgroups v1. +- It is omitted when using cgroups v2 and for Windows containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- stats: +- description: | +- All the stats exported via memory.stat. +- +- The fields in this object differ between cgroups v1 and v2. +- On cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available. +- On cgroups v2, fields such as `file`, `anon`, `inactive_file` are available. +- +- This field is Linux-specific and omitted for Windows containers. +- type: "object" +- additionalProperties: +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: +- { +- "active_anon": 1572864, +- "active_file": 5115904, +- "anon": 1572864, +- "anon_thp": 0, +- "file": 7626752, +- "file_dirty": 0, +- "file_mapped": 2723840, +- "file_writeback": 0, +- "inactive_anon": 0, +- "inactive_file": 2510848, +- "kernel_stack": 16384, +- "pgactivate": 0, +- "pgdeactivate": 0, +- "pgfault": 2042, +- "pglazyfree": 0, +- "pglazyfreed": 0, +- "pgmajfault": 45, +- "pgrefill": 0, +- "pgscan": 0, +- "pgsteal": 0, +- "shmem": 0, +- "slab": 1180928, +- "slab_reclaimable": 725576, +- "slab_unreclaimable": 455352, +- "sock": 0, +- "thp_collapse_alloc": 0, +- "thp_fault_alloc": 1, +- "unevictable": 0, +- "workingset_activate": 0, +- "workingset_nodereclaim": 0, +- "workingset_refault": 0 +- } +- failcnt: +- description: | +- Number of times memory usage hits limits. +- +- This field is Linux-specific and only supported on cgroups v1. +- It is omitted when using cgroups v2 and for Windows containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- limit: +- description: | +- This field is Linux-specific and omitted for Windows containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 8217579520 +- commitbytes: +- description: | +- Committed bytes. +- +- This field is Windows-specific and omitted for Linux containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- commitpeakbytes: +- description: | +- Peak committed bytes. +- +- This field is Windows-specific and omitted for Linux containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- privateworkingset: +- description: | +- Private working set. +- +- This field is Windows-specific and omitted for Linux containers. +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 0 +- +- ContainerNetworkStats: +- description: | +- Aggregates the network stats of one container +- type: "object" +- x-go-name: "NetworkStats" +- x-nullable: true +- properties: +- rx_bytes: +- description: | +- Bytes received. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 5338 +- rx_packets: +- description: | +- Packets received. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 36 +- rx_errors: +- description: | +- Received errors. Not used on Windows. +- +- This field is Linux-specific and always zero for Windows containers. +- type: "integer" +- format: "uint64" +- example: 0 +- rx_dropped: +- description: | +- Incoming packets dropped. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 0 +- tx_bytes: +- description: | +- Bytes sent. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 1200 +- tx_packets: +- description: | +- Packets sent. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 12 +- tx_errors: +- description: | +- Sent errors. Not used on Windows. +- +- This field is Linux-specific and always zero for Windows containers. +- type: "integer" +- format: "uint64" +- example: 0 +- tx_dropped: +- description: | +- Outgoing packets dropped. Windows and Linux. +- type: "integer" +- format: "uint64" +- example: 0 +- endpoint_id: +- description: | +- Endpoint ID. Not used on Linux. +- +- This field is Windows-specific and omitted for Linux containers. +- type: "string" +- x-nullable: true +- instance_id: +- description: | +- Instance ID. Not used on Linux. +- +- This field is Windows-specific and omitted for Linux containers. +- type: "string" +- x-nullable: true +- +- ContainerStorageStats: +- description: | +- StorageStats is the disk I/O stats for read/write on Windows. +- +- This type is Windows-specific and omitted for Linux containers. +- type: "object" +- x-go-name: "StorageStats" +- x-nullable: true +- properties: +- read_count_normalized: +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 7593984 +- read_size_bytes: +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 7593984 +- write_count_normalized: +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 7593984 +- write_size_bytes: +- type: "integer" +- format: "uint64" +- x-nullable: true +- example: 7593984 +- +- ContainerTopResponse: +- type: "object" +- x-go-name: "TopResponse" +- title: "ContainerTopResponse" +- description: |- +- Container "top" response. +- properties: +- Titles: +- description: "The ps column titles" +- type: "array" +- items: +- type: "string" +- example: +- Titles: +- - "UID" +- - "PID" +- - "PPID" +- - "C" +- - "STIME" +- - "TTY" +- - "TIME" +- - "CMD" +- Processes: +- description: |- +- Each process running in the container, where each process +- is an array of values corresponding to the titles. +- type: "array" +- items: +- type: "array" +- items: +- type: "string" +- example: +- Processes: +- - +- - "root" +- - "13642" +- - "882" +- - "0" +- - "17:03" +- - "pts/0" +- - "00:00:00" +- - "/bin/bash" +- - +- - "root" +- - "13735" +- - "13642" +- - "0" +- - "17:06" +- - "pts/0" +- - "00:00:00" +- - "sleep 10" +- +- ContainerWaitResponse: +- description: "OK response to ContainerWait operation" +- type: "object" +- x-go-name: "WaitResponse" +- title: "ContainerWaitResponse" +- required: [StatusCode] +- properties: +- StatusCode: +- description: "Exit code of the container" +- type: "integer" +- format: "int64" +- x-nullable: false +- Error: +- $ref: "#/definitions/ContainerWaitExitError" +- +- ContainerWaitExitError: +- description: "container waiting error, if any" +- type: "object" +- x-go-name: "WaitExitError" +- properties: +- Message: +- description: "Details of an error" +- type: "string" +- +- SystemVersion: +- type: "object" +- description: | +- Response of Engine API: GET "/version" +- properties: +- Platform: +- type: "object" +- required: [Name] +- properties: +- Name: +- type: "string" +- Components: +- type: "array" +- description: | +- Information about system components +- items: +- type: "object" +- x-go-name: ComponentVersion +- required: [Name, Version] +- properties: +- Name: +- description: | +- Name of the component +- type: "string" +- example: "Engine" +- Version: +- description: | +- Version of the component +- type: "string" +- x-nullable: false +- example: "27.0.1" +- Details: +- description: | +- Key/value pairs of strings with additional information about the +- component. These values are intended for informational purposes +- only, and their content is not defined, and not part of the API +- specification. +- +- These messages can be printed by the client as information to the user. +- type: "object" +- x-nullable: true +- Version: +- description: "The version of the daemon" +- type: "string" +- example: "27.0.1" +- ApiVersion: +- description: | +- The default (and highest) API version that is supported by the daemon +- type: "string" +- example: "1.47" +- MinAPIVersion: +- description: | +- The minimum API version that is supported by the daemon +- type: "string" +- example: "1.24" +- GitCommit: +- description: | +- The Git commit of the source code that was used to build the daemon +- type: "string" +- example: "48a66213fe" +- GoVersion: +- description: | +- The version Go used to compile the daemon, and the version of the Go +- runtime in use. +- type: "string" +- example: "go1.22.7" +- Os: +- description: | +- The operating system that the daemon is running on ("linux" or "windows") +- type: "string" +- example: "linux" +- Arch: +- description: | +- Architecture of the daemon, as returned by the Go runtime (`GOARCH`). +- +- A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). +- type: "string" +- example: "amd64" +- KernelVersion: +- description: | +- The kernel version (`uname -r`) that the daemon is running on. +- +- This field is omitted when empty. +- type: "string" +- example: "6.8.0-31-generic" +- Experimental: +- description: | +- Indicates if the daemon is started with experimental features enabled. +- +- This field is omitted when empty / false. +- type: "boolean" +- example: true +- BuildTime: +- description: | +- The date and time that the daemon was compiled. +- type: "string" +- example: "2020-06-22T15:49:27.000000000+00:00" +- +- SystemInfo: +- type: "object" +- properties: +- ID: +- description: | +- Unique identifier of the daemon. +- +-


+- +- > **Note**: The format of the ID itself is not part of the API, and +- > should not be considered stable. +- type: "string" +- example: "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" +- Containers: +- description: "Total number of containers on the host." +- type: "integer" +- example: 14 +- ContainersRunning: +- description: | +- Number of containers with status `"running"`. +- type: "integer" +- example: 3 +- ContainersPaused: +- description: | +- Number of containers with status `"paused"`. +- type: "integer" +- example: 1 +- ContainersStopped: +- description: | +- Number of containers with status `"stopped"`. +- type: "integer" +- example: 10 +- Images: +- description: | +- Total number of images on the host. +- +- Both _tagged_ and _untagged_ (dangling) images are counted. +- type: "integer" +- example: 508 +- Driver: +- description: "Name of the storage driver in use." +- type: "string" +- example: "overlay2" +- DriverStatus: +- description: | +- Information specific to the storage driver, provided as +- "label" / "value" pairs. +- +- This information is provided by the storage driver, and formatted +- in a way consistent with the output of `docker info` on the command +- line. +- +-


+- +- > **Note**: The information returned in this field, including the +- > formatting of values and labels, should not be considered stable, +- > and may change without notice. +- type: "array" +- items: +- type: "array" +- items: +- type: "string" +- example: +- - ["Backing Filesystem", "extfs"] +- - ["Supports d_type", "true"] +- - ["Native Overlay Diff", "true"] +- DockerRootDir: +- description: | +- Root directory of persistent Docker state. +- +- Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` +- on Windows. +- type: "string" +- example: "/var/lib/docker" +- Plugins: +- $ref: "#/definitions/PluginsInfo" +- MemoryLimit: +- description: "Indicates if the host has memory limit support enabled." +- type: "boolean" +- example: true +- SwapLimit: +- description: "Indicates if the host has memory swap limit support enabled." +- type: "boolean" +- example: true +- CpuCfsPeriod: +- description: | +- Indicates if CPU CFS(Completely Fair Scheduler) period is supported by +- the host. +- type: "boolean" +- example: true +- CpuCfsQuota: +- description: | +- Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by +- the host. +- type: "boolean" +- example: true +- CPUShares: +- description: | +- Indicates if CPU Shares limiting is supported by the host. +- type: "boolean" +- example: true +- CPUSet: +- description: | +- Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. +- +- See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) +- type: "boolean" +- example: true +- PidsLimit: +- description: "Indicates if the host kernel has PID limit support enabled." +- type: "boolean" +- example: true +- OomKillDisable: +- description: "Indicates if OOM killer disable is supported on the host." +- type: "boolean" +- IPv4Forwarding: +- description: "Indicates IPv4 forwarding is enabled." +- type: "boolean" +- example: true +- Debug: +- description: | +- Indicates if the daemon is running in debug-mode / with debug-level +- logging enabled. +- type: "boolean" +- example: true +- NFd: +- description: | +- The total number of file Descriptors in use by the daemon process. +- +- This information is only returned if debug-mode is enabled. +- type: "integer" +- example: 64 +- NGoroutines: +- description: | +- The number of goroutines that currently exist. +- +- This information is only returned if debug-mode is enabled. +- type: "integer" +- example: 174 +- SystemTime: +- description: | +- Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) +- format with nano-seconds. +- type: "string" +- example: "2017-08-08T20:28:29.06202363Z" +- LoggingDriver: +- description: | +- The logging driver to use as a default for new containers. +- type: "string" +- CgroupDriver: +- description: | +- The driver to use for managing cgroups. +- type: "string" +- enum: ["cgroupfs", "systemd", "none"] +- default: "cgroupfs" +- example: "cgroupfs" +- CgroupVersion: +- description: | +- The version of the cgroup. +- type: "string" +- enum: ["1", "2"] +- default: "1" +- example: "1" +- NEventsListener: +- description: "Number of event listeners subscribed." +- type: "integer" +- example: 30 +- KernelVersion: +- description: | +- Kernel version of the host. +- +- On Linux, this information obtained from `uname`. On Windows this +- information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ +- registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. +- type: "string" +- example: "6.8.0-31-generic" +- OperatingSystem: +- description: | +- Name of the host's operating system, for example: "Ubuntu 24.04 LTS" +- or "Windows Server 2016 Datacenter" +- type: "string" +- example: "Ubuntu 24.04 LTS" +- OSVersion: +- description: | +- Version of the host's operating system +- +-


+- +- > **Note**: The information returned in this field, including its +- > very existence, and the formatting of values, should not be considered +- > stable, and may change without notice. +- type: "string" +- example: "24.04" +- OSType: +- description: | +- Generic type of the operating system of the host, as returned by the +- Go runtime (`GOOS`). +- +- Currently returned values are "linux" and "windows". A full list of +- possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). +- type: "string" +- example: "linux" +- Architecture: +- description: | +- Hardware architecture of the host, as returned by the operating system. +- This is equivalent to the output of `uname -m` on Linux. +- +- Unlike `Arch` (from `/version`), this reports the machine's native +- architecture, which can differ from the Go runtime architecture when +- running a binary compiled for a different architecture (for example, +- a 32-bit binary running on 64-bit hardware). +- type: "string" +- example: "x86_64" +- NCPU: +- description: | +- The number of logical CPUs usable by the daemon. +- +- The number of available CPUs is checked by querying the operating +- system when the daemon starts. Changes to operating system CPU +- allocation after the daemon is started are not reflected. +- type: "integer" +- example: 4 +- MemTotal: +- description: | +- Total amount of physical memory available on the host, in bytes. +- type: "integer" +- format: "int64" +- example: 2095882240 +- +- IndexServerAddress: +- description: | +- Address / URL of the index server that is used for image search, +- and as a default for user authentication for Docker Hub and Docker Cloud. +- default: "https://index.docker.io/v1/" +- type: "string" +- example: "https://index.docker.io/v1/" +- RegistryConfig: +- $ref: "#/definitions/RegistryServiceConfig" +- GenericResources: +- $ref: "#/definitions/GenericResources" +- HttpProxy: +- description: | +- HTTP-proxy configured for the daemon. This value is obtained from the +- [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. +- Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL +- are masked in the API response. +- +- Containers do not automatically inherit this configuration. +- type: "string" +- example: "http://xxxxx:xxxxx@proxy.corp.example.com:8080" +- HttpsProxy: +- description: | +- HTTPS-proxy configured for the daemon. This value is obtained from the +- [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. +- Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL +- are masked in the API response. +- +- Containers do not automatically inherit this configuration. +- type: "string" +- example: "https://xxxxx:xxxxx@proxy.corp.example.com:4443" +- NoProxy: +- description: | +- Comma-separated list of domain extensions for which no proxy should be +- used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) +- environment variable. +- +- Containers do not automatically inherit this configuration. +- type: "string" +- example: "*.local, 169.254/16" +- Name: +- description: "Hostname of the host." +- type: "string" +- example: "node5.corp.example.com" +- Labels: +- description: | +- User-defined labels (key/value metadata) as set on the daemon. +- +-


+- +- > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, +- > set through the daemon configuration, and _node_ labels, set from a +- > manager node in the Swarm. Node labels are not included in this +- > field. Node labels can be retrieved using the `/nodes/(id)` endpoint +- > on a manager node in the Swarm. +- type: "array" +- items: +- type: "string" +- example: ["storage=ssd", "production"] +- ExperimentalBuild: +- description: | +- Indicates if experimental features are enabled on the daemon. +- type: "boolean" +- example: true +- ServerVersion: +- description: | +- Version string of the daemon. +- type: "string" +- example: "27.0.1" +- Runtimes: +- description: | +- List of [OCI compliant](https://github.com/opencontainers/runtime-spec) +- runtimes configured on the daemon. Keys hold the "name" used to +- reference the runtime. +- +- The Docker daemon relies on an OCI compliant runtime (invoked via the +- `containerd` daemon) as its interface to the Linux kernel namespaces, +- cgroups, and SELinux. +- +- The default runtime is `runc`, and automatically configured. Additional +- runtimes can be configured by the user and will be listed here. +- type: "object" +- additionalProperties: +- $ref: "#/definitions/Runtime" +- default: +- runc: +- path: "runc" +- example: +- runc: +- path: "runc" +- runc-master: +- path: "/go/bin/runc" +- custom: +- path: "/usr/local/bin/my-oci-runtime" +- runtimeArgs: ["--debug", "--systemd-cgroup=false"] +- DefaultRuntime: +- description: | +- Name of the default OCI runtime that is used when starting containers. +- +- The default can be overridden per-container at create time. +- type: "string" +- default: "runc" +- example: "runc" +- Swarm: +- $ref: "#/definitions/SwarmInfo" +- LiveRestoreEnabled: +- description: | +- Indicates if live restore is enabled. +- +- If enabled, containers are kept running when the daemon is shutdown +- or upon daemon start if running containers are detected. +- type: "boolean" +- default: false +- example: false +- Isolation: +- description: | +- Represents the isolation technology to use as a default for containers. +- The supported values are platform-specific. +- +- If no isolation value is specified on daemon start, on Windows client, +- the default is `hyperv`, and on Windows server, the default is `process`. +- +- This option is currently not used on other platforms. +- default: "default" +- type: "string" +- enum: +- - "default" +- - "hyperv" +- - "process" +- - "" +- InitBinary: +- description: | +- Name and, optional, path of the `docker-init` binary. +- +- If the path is omitted, the daemon searches the host's `$PATH` for the +- binary and uses the first result. +- type: "string" +- example: "docker-init" +- ContainerdCommit: +- $ref: "#/definitions/Commit" +- RuncCommit: +- $ref: "#/definitions/Commit" +- InitCommit: +- $ref: "#/definitions/Commit" +- SecurityOptions: +- description: | +- List of security features that are enabled on the daemon, such as +- apparmor, seccomp, SELinux, user-namespaces (userns), rootless and +- no-new-privileges. +- +- Additional configuration options for each security feature may +- be present, and are included as a comma-separated list of key/value +- pairs. +- type: "array" +- items: +- type: "string" +- example: +- - "name=apparmor" +- - "name=seccomp,profile=default" +- - "name=selinux" +- - "name=userns" +- - "name=rootless" +- ProductLicense: +- description: | +- Reports a summary of the product license on the daemon. +- +- If a commercial license has been applied to the daemon, information +- such as number of nodes, and expiration are included. +- type: "string" +- example: "Community Engine" +- DefaultAddressPools: +- description: | +- List of custom default address pools for local networks, which can be +- specified in the daemon.json file or dockerd option. +- +- Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 +- 10.10.[0-255].0/24 address pools. +- type: "array" +- items: +- type: "object" +- properties: +- Base: +- description: "The network address in CIDR format" +- type: "string" +- example: "10.10.0.0/16" +- Size: +- description: "The network pool size" +- type: "integer" +- example: "24" +- FirewallBackend: +- $ref: "#/definitions/FirewallInfo" +- DiscoveredDevices: +- description: | +- List of devices discovered by device drivers. +- +- Each device includes information about its source driver, kind, name, +- and additional driver-specific attributes. +- type: "array" +- items: +- $ref: "#/definitions/DeviceInfo" +- NRI: +- $ref: "#/definitions/NRIInfo" +- Warnings: +- description: | +- List of warnings / informational messages about missing features, or +- issues related to the daemon configuration. +- +- These messages can be printed by the client as information to the user. +- type: "array" +- items: +- type: "string" +- example: +- - "WARNING: No memory limit support" +- CDISpecDirs: +- description: | +- List of directories where (Container Device Interface) CDI +- specifications are located. +- +- These specifications define vendor-specific modifications to an OCI +- runtime specification for a container being created. +- +- An empty list indicates that CDI device injection is disabled. +- +- Note that since using CDI device injection requires the daemon to have +- experimental enabled. For non-experimental daemons an empty list will +- always be returned. +- type: "array" +- items: +- type: "string" +- example: +- - "/etc/cdi" +- - "/var/run/cdi" +- Containerd: +- $ref: "#/definitions/ContainerdInfo" +- +- ContainerdInfo: +- description: | +- Information for connecting to the containerd instance that is used by the daemon. +- This is included for debugging purposes only. +- type: "object" +- x-nullable: true +- properties: +- Address: +- description: "The address of the containerd socket." +- type: "string" +- example: "/run/containerd/containerd.sock" +- Namespaces: +- description: | +- The namespaces that the daemon uses for running containers and +- plugins in containerd. These namespaces can be configured in the +- daemon configuration, and are considered to be used exclusively +- by the daemon, Tampering with the containerd instance may cause +- unexpected behavior. +- +- As these namespaces are considered to be exclusively accessed +- by the daemon, it is not recommended to change these values, +- or to change them to a value that is used by other systems, +- such as cri-containerd. +- type: "object" +- properties: +- Containers: +- description: | +- The default containerd namespace used for containers managed +- by the daemon. +- +- The default namespace for containers is "moby", but will be +- suffixed with the `.` of the remapped `root` if +- user-namespaces are enabled and the containerd image-store +- is used. +- type: "string" +- default: "moby" +- example: "moby" +- Plugins: +- description: | +- The default containerd namespace used for plugins managed by +- the daemon. +- +- The default namespace for plugins is "plugins.moby", but will be +- suffixed with the `.` of the remapped `root` if +- user-namespaces are enabled and the containerd image-store +- is used. +- type: "string" +- default: "plugins.moby" +- example: "plugins.moby" +- +- FirewallInfo: +- description: | +- Information about the daemon's firewalling configuration. +- +- This field is currently only used on Linux, and omitted on other platforms. +- type: "object" +- x-nullable: true +- properties: +- Driver: +- description: | +- The name of the firewall backend driver. +- type: "string" +- example: "nftables" +- Info: +- description: | +- Information about the firewall backend, provided as +- "label" / "value" pairs. +- +-


+- +- > **Note**: The information returned in this field, including the +- > formatting of values and labels, should not be considered stable, +- > and may change without notice. +- type: "array" +- items: +- type: "array" +- items: +- type: "string" +- example: +- - ["ReloadedAt", "2025-01-01T00:00:00Z"] +- +- # PluginsInfo is a temp struct holding Plugins name +- # registered with docker daemon. It is used by Info struct +- PluginsInfo: +- description: | +- Available plugins per type. +- +-


+- +- > **Note**: Only unmanaged (V1) plugins are included in this list. +- > V1 plugins are "lazily" loaded, and are not returned in this list +- > if there is no resource using the plugin. +- type: "object" +- properties: +- Volume: +- description: "Names of available volume-drivers, and network-driver plugins." +- type: "array" +- items: +- type: "string" +- example: ["local"] +- Network: +- description: "Names of available network-drivers, and network-driver plugins." +- type: "array" +- items: +- type: "string" +- example: ["bridge", "host", "ipvlan", "macvlan", "null", "overlay"] +- Authorization: +- description: "Names of available authorization plugins." +- type: "array" +- items: +- type: "string" +- example: ["img-authz-plugin", "hbm"] +- Log: +- description: "Names of available logging-drivers, and logging-driver plugins." +- type: "array" +- items: +- type: "string" +- example: ["awslogs", "fluentd", "gcplogs", "gelf", "journald", "json-file", "splunk", "syslog"] +- +- +- RegistryServiceConfig: +- description: | +- RegistryServiceConfig stores daemon registry services configuration. +- type: "object" +- x-nullable: true +- properties: +- InsecureRegistryCIDRs: +- description: | +- List of IP ranges of insecure registries, using the CIDR syntax +- ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries +- accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates +- from unknown CAs) communication. +- +- By default, local registries (`::1/128` and `127.0.0.0/8`) are configured as +- insecure. All other registries are secure. Communicating with an +- insecure registry is not possible if the daemon assumes that registry +- is secure. +- +- This configuration override this behavior, insecure communication with +- registries whose resolved IP address is within the subnet described by +- the CIDR syntax. +- +- Registries can also be marked insecure by hostname. Those registries +- are listed under `IndexConfigs` and have their `Secure` field set to +- `false`. +- +- > **Warning**: Using this option can be useful when running a local +- > registry, but introduces security vulnerabilities. This option +- > should therefore ONLY be used for testing purposes. For increased +- > security, users should add their CA to their system's list of trusted +- > CAs instead of enabling this option. +- type: "array" +- items: +- type: "string" +- example: ["::1/128", "127.0.0.0/8"] +- IndexConfigs: +- type: "object" +- additionalProperties: +- $ref: "#/definitions/IndexInfo" +- example: +- "127.0.0.1:5000": +- "Name": "127.0.0.1:5000" +- "Mirrors": [] +- "Secure": false +- "Official": false +- "[2001:db8:a0b:12f0::1]:80": +- "Name": "[2001:db8:a0b:12f0::1]:80" +- "Mirrors": [] +- "Secure": false +- "Official": false +- "docker.io": +- Name: "docker.io" +- Mirrors: ["https://hub-mirror.corp.example.com:5000/"] +- Secure: true +- Official: true +- "registry.internal.corp.example.com:3000": +- Name: "registry.internal.corp.example.com:3000" +- Mirrors: [] +- Secure: false +- Official: false +- Mirrors: +- description: | +- List of registry URLs that act as a mirror for the official +- (`docker.io`) registry. +- +- type: "array" +- items: +- type: "string" +- example: +- - "https://hub-mirror.corp.example.com:5000/" +- - "https://[2001:db8:a0b:12f0::1]/" +- +- IndexInfo: +- description: +- IndexInfo contains information about a registry. +- type: "object" +- x-nullable: true +- properties: +- Name: +- description: | +- Name of the registry, such as "docker.io". +- type: "string" +- example: "docker.io" +- Mirrors: +- description: | +- List of mirrors, expressed as URIs. +- type: "array" +- items: +- type: "string" +- example: +- - "https://hub-mirror.corp.example.com:5000/" +- - "https://registry-2.docker.io/" +- - "https://registry-3.docker.io/" +- Secure: +- description: | +- Indicates if the registry is part of the list of insecure +- registries. +- +- If `false`, the registry is insecure. Insecure registries accept +- un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from +- unknown CAs) communication. +- +- > **Warning**: Insecure registries can be useful when running a local +- > registry. However, because its use creates security vulnerabilities +- > it should ONLY be enabled for testing purposes. For increased +- > security, users should add their CA to their system's list of +- > trusted CAs instead of enabling this option. +- type: "boolean" +- example: true +- Official: +- description: | +- Indicates whether this is an official registry (i.e., Docker Hub / docker.io) +- type: "boolean" +- example: true +- +- Runtime: +- description: | +- Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec) +- runtime. +- +- The runtime is invoked by the daemon via the `containerd` daemon. OCI +- runtimes act as an interface to the Linux kernel namespaces, cgroups, +- and SELinux. +- type: "object" +- properties: +- path: +- description: | +- Name and, optional, path, of the OCI executable binary. +- +- If the path is omitted, the daemon searches the host's `$PATH` for the +- binary and uses the first result. +- type: "string" +- example: "/usr/local/bin/my-oci-runtime" +- runtimeArgs: +- description: | +- List of command-line arguments to pass to the runtime when invoked. +- type: "array" +- x-nullable: true +- items: +- type: "string" +- example: ["--debug", "--systemd-cgroup=false"] +- status: +- description: | +- Information specific to the runtime. +- +- While this API specification does not define data provided by runtimes, +- the following well-known properties may be provided by runtimes: +- +- `org.opencontainers.runtime-spec.features`: features structure as defined +- in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), +- in a JSON string representation. +- +-


+- +- > **Note**: The information returned in this field, including the +- > formatting of values and labels, should not be considered stable, +- > and may change without notice. +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "string" +- example: +- "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" +- +- Commit: +- description: | +- Commit holds the Git-commit (SHA1) that a binary was built from, as +- reported in the version-string of external tools, such as `containerd`, +- or `runC`. +- type: "object" +- properties: +- ID: +- description: "Actual commit ID of external tool." +- type: "string" +- example: "cfb82a876ecc11b5ca0977d1733adbe58599088a" +- +- SwarmInfo: +- description: | +- Represents generic information about swarm. +- type: "object" +- properties: +- NodeID: +- description: "Unique identifier of for this node in the swarm." +- type: "string" +- default: "" +- example: "k67qz4598weg5unwwffg6z1m1" +- NodeAddr: +- description: | +- IP address at which this node can be reached by other nodes in the +- swarm. +- type: "string" +- default: "" +- example: "10.0.0.46" +- LocalNodeState: +- $ref: "#/definitions/LocalNodeState" +- ControlAvailable: +- type: "boolean" +- default: false +- example: true +- Error: +- type: "string" +- default: "" +- RemoteManagers: +- description: | +- List of ID's and addresses of other managers in the swarm. +- type: "array" +- default: null +- x-nullable: true +- items: +- $ref: "#/definitions/PeerNode" +- example: +- - NodeID: "71izy0goik036k48jg985xnds" +- Addr: "10.0.0.158:2377" +- - NodeID: "79y6h1o4gv8n120drcprv5nmc" +- Addr: "10.0.0.159:2377" +- - NodeID: "k67qz4598weg5unwwffg6z1m1" +- Addr: "10.0.0.46:2377" +- Nodes: +- description: "Total number of nodes in the swarm." +- type: "integer" +- x-nullable: true +- example: 4 +- Managers: +- description: "Total number of managers in the swarm." +- type: "integer" +- x-nullable: true +- example: 3 +- Cluster: +- $ref: "#/definitions/ClusterInfo" +- +- LocalNodeState: +- description: "Current local status of this node." +- type: "string" +- default: "" +- enum: +- - "" +- - "inactive" +- - "pending" +- - "active" +- - "error" +- - "locked" +- example: "active" +- +- PeerNode: +- description: "Represents a peer-node in the swarm" +- type: "object" +- properties: +- NodeID: +- description: "Unique identifier of for this node in the swarm." +- type: "string" +- Addr: +- description: | +- IP address and ports at which this node can be reached. +- type: "string" +- +- NetworkAttachmentConfig: +- description: | +- Specifies how a service should be attached to a particular network. +- type: "object" +- properties: +- Target: +- description: | +- The target network for attachment. Must be a network name or ID. +- type: "string" +- Aliases: +- description: | +- Discoverable alternate names for the service on this network. +- type: "array" +- items: +- type: "string" +- DriverOpts: +- description: | +- Driver attachment options for the network target. +- type: "object" +- additionalProperties: +- type: "string" +- +- EventActor: +- description: | +- Actor describes something that generates events, like a container, network, +- or a volume. +- type: "object" +- properties: +- ID: +- description: "The ID of the object emitting the event" +- type: "string" +- example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" +- Attributes: +- description: | +- Various key/value attributes of the object, depending on its type. +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-label-value" +- image: "alpine:latest" +- name: "my-container" +- +- EventMessage: +- description: | +- EventMessage represents the information an event contains. +- type: "object" +- title: "SystemEventsResponse" +- properties: +- Type: +- description: "The type of object emitting the event" +- type: "string" +- enum: ["builder", "config", "container", "daemon", "image", "network", "node", "plugin", "secret", "service", "volume"] +- example: "container" +- Action: +- description: "The type of event" +- type: "string" +- example: "create" +- Actor: +- $ref: "#/definitions/EventActor" +- scope: +- description: | +- Scope of the event. Engine events are `local` scope. Cluster (Swarm) +- events are `swarm` scope. +- type: "string" +- enum: ["local", "swarm"] +- time: +- description: "Timestamp of event" +- type: "integer" +- format: "int64" +- example: 1629574695 +- timeNano: +- description: "Timestamp of event, with nanosecond accuracy" +- type: "integer" +- format: "int64" +- example: 1629574695515050031 +- +- OCIDescriptor: +- type: "object" +- x-go-name: Descriptor +- description: | +- A descriptor struct containing digest, media type, and size, as defined in +- the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). +- properties: +- mediaType: +- description: | +- The media type of the object this schema refers to. +- type: "string" +- example: "application/vnd.oci.image.manifest.v1+json" +- digest: +- description: | +- The digest of the targeted content. +- type: "string" +- example: "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" +- size: +- description: | +- The size in bytes of the blob. +- type: "integer" +- format: "int64" +- example: 424 +- urls: +- description: |- +- List of URLs from which this object MAY be downloaded. +- type: "array" +- items: +- type: "string" +- format: "uri" +- x-nullable: true +- annotations: +- description: |- +- Arbitrary metadata relating to the targeted content. +- type: "object" +- x-nullable: true +- additionalProperties: +- type: "string" +- example: +- "com.docker.official-images.bashbrew.arch": "amd64" +- "org.opencontainers.image.base.digest": "sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8" +- "org.opencontainers.image.base.name": "scratch" +- "org.opencontainers.image.created": "2025-01-27T00:00:00Z" +- "org.opencontainers.image.revision": "9fabb4bad5138435b01857e2fe9363e2dc5f6a79" +- "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base" +- "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu" +- "org.opencontainers.image.version": "24.04" +- data: +- type: string +- x-nullable: true +- description: |- +- Data is an embedding of the targeted content. This is encoded as a base64 +- string when marshalled to JSON (automatically, by encoding/json). If +- present, Data can be used directly to avoid fetching the targeted content. +- example: null +- platform: +- $ref: "#/definitions/OCIPlatform" +- artifactType: +- description: |- +- ArtifactType is the IANA media type of this artifact. +- type: "string" +- x-nullable: true +- example: null +- +- OCIPlatform: +- type: "object" +- x-go-name: Platform +- x-nullable: true +- description: | +- Describes the platform which the image in the manifest runs on, as defined +- in the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md). +- properties: +- architecture: +- description: | +- The CPU architecture, for example `amd64` or `ppc64`. +- type: "string" +- example: "arm" +- os: +- description: | +- The operating system, for example `linux` or `windows`. +- type: "string" +- example: "windows" +- os.version: +- description: | +- Optional field specifying the operating system version, for example on +- Windows `10.0.19041.1165`. +- type: "string" +- example: "10.0.19041.1165" +- os.features: +- description: | +- Optional field specifying an array of strings, each listing a required +- OS feature (for example on Windows `win32k`). +- type: "array" +- items: +- type: "string" +- example: +- - "win32k" +- variant: +- description: | +- Optional field specifying a variant of the CPU, for example `v7` to +- specify ARMv7 when architecture is `arm`. +- type: "string" +- example: "v7" +- +- DistributionInspect: +- type: "object" +- x-go-name: DistributionInspect +- title: "DistributionInspectResponse" +- required: [Descriptor, Platforms] +- description: | +- Describes the result obtained from contacting the registry to retrieve +- image metadata. +- properties: +- Descriptor: +- $ref: "#/definitions/OCIDescriptor" +- Platforms: +- type: "array" +- description: | +- An array containing all platforms supported by the image. +- items: +- $ref: "#/definitions/OCIPlatform" +- +- ClusterVolume: +- type: "object" +- description: | +- Options and information specific to, and only present on, Swarm CSI +- cluster volumes. +- properties: +- ID: +- type: "string" +- description: | +- The Swarm ID of this volume. Because cluster volumes are Swarm +- objects, they have an ID, unlike non-cluster volumes. This ID can +- be used to refer to the Volume instead of the name. +- Version: +- $ref: "#/definitions/ObjectVersion" +- CreatedAt: +- type: "string" +- format: "dateTime" +- UpdatedAt: +- type: "string" +- format: "dateTime" +- Spec: +- $ref: "#/definitions/ClusterVolumeSpec" +- Info: +- type: "object" +- description: | +- Information about the global status of the volume. +- properties: +- CapacityBytes: +- type: "integer" +- format: "int64" +- description: | +- The capacity of the volume in bytes. A value of 0 indicates that +- the capacity is unknown. +- VolumeContext: +- type: "object" +- description: | +- A map of strings to strings returned from the storage plugin when +- the volume is created. +- additionalProperties: +- type: "string" +- VolumeID: +- type: "string" +- description: | +- The ID of the volume as returned by the CSI storage plugin. This +- is distinct from the volume's ID as provided by Docker. This ID +- is never used by the user when communicating with Docker to refer +- to this volume. If the ID is blank, then the Volume has not been +- successfully created in the plugin yet. +- AccessibleTopology: +- type: "array" +- description: | +- The topology this volume is actually accessible from. +- items: +- $ref: "#/definitions/Topology" +- PublishStatus: +- type: "array" +- description: | +- The status of the volume as it pertains to its publishing and use on +- specific nodes +- items: +- type: "object" +- properties: +- NodeID: +- type: "string" +- description: | +- The ID of the Swarm node the volume is published on. +- State: +- type: "string" +- description: | +- The published state of the volume. +- * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. +- * `published` The volume is published successfully to the node. +- * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. +- * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. +- enum: +- - "pending-publish" +- - "published" +- - "pending-node-unpublish" +- - "pending-controller-unpublish" +- PublishContext: +- type: "object" +- description: | +- A map of strings to strings returned by the CSI controller +- plugin when a volume is published. +- additionalProperties: +- type: "string" +- +- ClusterVolumeSpec: +- type: "object" +- description: | +- Cluster-specific options used to create the volume. +- properties: +- Group: +- type: "string" +- description: | +- Group defines the volume group of this volume. Volumes belonging to +- the same group can be referred to by group name when creating +- Services. Referring to a volume by group instructs Swarm to treat +- volumes in that group interchangeably for the purpose of scheduling. +- Volumes with an empty string for a group technically all belong to +- the same, emptystring group. +- AccessMode: +- type: "object" +- description: | +- Defines how the volume is used by tasks. +- properties: +- Scope: +- type: "string" +- description: | +- The set of nodes this volume can be used on at one time. +- - `single` The volume may only be scheduled to one node at a time. +- - `multi` the volume may be scheduled to any supported number of nodes at a time. +- default: "single" +- enum: ["single", "multi"] +- x-nullable: false +- Sharing: +- type: "string" +- description: | +- The number and way that different tasks can use this volume +- at one time. +- - `none` The volume may only be used by one task at a time. +- - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly +- - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. +- - `all` The volume may have any number of readers and writers. +- default: "none" +- enum: ["none", "readonly", "onewriter", "all"] +- x-nullable: false +- MountVolume: +- type: "object" +- description: | +- Options for using this volume as a Mount-type volume. +- +- Either MountVolume or BlockVolume, but not both, must be +- present. +- properties: +- FsType: +- type: "string" +- description: | +- Specifies the filesystem type for the mount volume. +- Optional. +- MountFlags: +- type: "array" +- description: | +- Flags to pass when mounting the volume. Optional. +- items: +- type: "string" +- BlockVolume: +- type: "object" +- description: | +- Options for using this volume as a Block-type volume. +- Intentionally empty. +- Secrets: +- type: "array" +- description: | +- Swarm Secrets that are passed to the CSI storage plugin when +- operating on this volume. +- items: +- type: "object" +- description: | +- One cluster volume secret entry. Defines a key-value pair that +- is passed to the plugin. +- properties: +- Key: +- type: "string" +- description: | +- Key is the name of the key of the key-value pair passed to +- the plugin. +- Secret: +- type: "string" +- description: | +- Secret is the swarm Secret object from which to read data. +- This can be a Secret name or ID. The Secret data is +- retrieved by swarm and used as the value of the key-value +- pair passed to the plugin. +- AccessibilityRequirements: +- type: "object" +- description: | +- Requirements for the accessible topology of the volume. These +- fields are optional. For an in-depth description of what these +- fields mean, see the CSI specification. +- properties: +- Requisite: +- type: "array" +- description: | +- A list of required topologies, at least one of which the +- volume must be accessible from. +- items: +- $ref: "#/definitions/Topology" +- Preferred: +- type: "array" +- description: | +- A list of topologies that the volume should attempt to be +- provisioned in. +- items: +- $ref: "#/definitions/Topology" +- CapacityRange: +- type: "object" +- description: | +- The desired capacity that the volume should be created with. If +- empty, the plugin will decide the capacity. +- properties: +- RequiredBytes: +- type: "integer" +- format: "int64" +- description: | +- The volume must be at least this big. The value of 0 +- indicates an unspecified minimum +- LimitBytes: +- type: "integer" +- format: "int64" +- description: | +- The volume must not be bigger than this. The value of 0 +- indicates an unspecified maximum. +- Availability: +- type: "string" +- description: | +- The availability of the volume for use in tasks. +- - `active` The volume is fully available for scheduling on the cluster +- - `pause` No new workloads should use the volume, but existing workloads are not stopped. +- - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. +- default: "active" +- x-nullable: false +- enum: +- - "active" +- - "pause" +- - "drain" +- +- Topology: +- description: | +- A map of topological domains to topological segments. For in depth +- details, see documentation for the Topology object in the CSI +- specification. +- type: "object" +- properties: +- Segments: +- type: "object" +- additionalProperties: +- type: "string" +- +- AttestationStatement: +- x-go-name: "AttestationStatement" +- description: | +- AttestationStatement is a single in-toto statement attached to an image. +- type: "object" +- required: ["Descriptor", "PredicateType"] +- properties: +- Descriptor: +- $ref: "#/definitions/OCIDescriptor" +- PredicateType: +- description: The in-toto predicate type URI of this statement. +- type: "string" +- example: "https://slsa.dev/provenance/v0.2" +- Statement: +- description: | +- The verbatim in-toto statement JSON. Only included when the caller +- opts in via the `statement=true` query parameter; otherwise absent. +- type: "object" +- x-nullable: true +- ImageManifestSummary: +- x-go-name: "ManifestSummary" +- description: | +- ImageManifestSummary represents a summary of an image manifest. +- type: "object" +- required: ["ID", "Descriptor", "Available", "Size", "Kind"] +- properties: +- ID: +- description: | +- ID is the content-addressable ID of an image and is the same as the +- digest of the image manifest. +- type: "string" +- example: "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" +- Descriptor: +- $ref: "#/definitions/OCIDescriptor" +- Available: +- description: Indicates whether all the child content (image config, layers) is fully available locally. +- type: "boolean" +- example: true +- Size: +- type: "object" +- x-nullable: false +- required: ["Content", "Total"] +- properties: +- Total: +- type: "integer" +- format: "int64" +- example: 8213251 +- description: | +- Total is the total size (in bytes) of all the locally present +- data (both distributable and non-distributable) that's related to +- this manifest and its children. +- This equal to the sum of [Content] size AND all the sizes in the +- [Size] struct present in the Kind-specific data struct. +- For example, for an image kind (Kind == "image") +- this would include the size of the image content and unpacked +- image snapshots ([Size.Content] + [ImageData.Size.Unpacked]). +- Content: +- description: | +- Content is the size (in bytes) of all the locally present +- content in the content store (e.g. image config, layers) +- referenced by this manifest and its children. +- This only includes blobs in the content store. +- type: "integer" +- format: "int64" +- example: 3987495 +- Kind: +- type: "string" +- example: "image" +- enum: +- - "image" +- - "attestation" +- - "unknown" +- description: | +- The kind of the manifest. +- +- kind | description +- -------------|----------------------------------------------------------- +- image | Image manifest that can be used to start a container. +- attestation | Attestation manifest produced by the Buildkit builder for a specific image manifest. +- ImageData: +- description: | +- The image data for the image manifest. +- This field is only populated when Kind is "image". +- type: "object" +- x-nullable: true +- x-omitempty: true +- required: ["Platform", "Containers", "Size", "UnpackedSize"] +- properties: +- Platform: +- $ref: "#/definitions/OCIPlatform" +- description: | +- OCI platform of the image. This will be the platform specified in the +- manifest descriptor from the index/manifest list. +- If it's not available, it will be obtained from the image config. +- Identity: +- description: | +- Identity holds information about the identity and origin of this image. +- For image list responses, this can duplicate Build/Pull fields across +- image manifests, because those parts are image-level metadata. +- x-nullable: true +- $ref: "#/definitions/Identity" +- Containers: +- description: | +- The IDs of the containers that are using this image. +- type: "array" +- items: +- type: "string" +- example: ["ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430", "abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e"] +- Size: +- type: "object" +- x-nullable: false +- required: ["Unpacked"] +- properties: +- Unpacked: +- type: "integer" +- format: "int64" +- example: 3987495 +- description: | +- Unpacked is the size (in bytes) of the locally unpacked +- (uncompressed) image content that's directly usable by the containers +- running this image. +- It's independent of the distributable content - e.g. +- the image might still have an unpacked data that's still used by +- some container even when the distributable/compressed content is +- already gone. +- AttestationData: +- description: | +- The image data for the attestation manifest. +- This field is only populated when Kind is "attestation". +- type: "object" +- x-nullable: true +- x-omitempty: true +- required: ["For"] +- properties: +- For: +- description: | +- The digest of the image manifest that this attestation is for. +- type: "string" +- example: "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" +- ++ summary: Configs ++ kind: nav ++ - name: Plugin ++ summary: Plugins ++ kind: nav ++ description: Plugins reference. ++ - name: System ++ summary: System ++ kind: nav ++ description: System reference. ++ - name: Distribution ++ description: Distribution operations. ++ summary: Distribution ++ kind: nav ++ - name: Session ++ description: Session operations. ++ summary: Session ++ kind: nav + paths: + /containers/json: + get: +- summary: "List containers" ++ summary: List containers + description: | + Returns a list of containers. For details on the format, see the + [inspect endpoint](#operation/ContainerInspect). +@@ -8345,30 +172,31 @@ + Note that it uses a different, smaller representation of a container + than inspecting a single container. For example, the list of linked + containers is not propagated . +- operationId: "ContainerList" +- produces: +- - "application/json" ++ operationId: ContainerList + parameters: +- - name: "all" +- in: "query" ++ - name: all ++ in: query + description: | + Return all containers. By default, only running containers are shown. +- type: "boolean" +- default: false +- - name: "limit" +- in: "query" ++ schema: ++ type: boolean ++ default: false ++ - name: limit ++ in: query + description: | + Return this number of most recently created containers, including + non-running ones. +- type: "integer" +- - name: "size" +- in: "query" ++ schema: ++ type: integer ++ - name: size ++ in: query + description: | + Return the size of container as fields `SizeRw` and `SizeRootFs`. +- type: "boolean" +- default: false +- - name: "filters" +- in: "query" ++ schema: ++ type: boolean ++ default: false ++ - name: filters ++ in: query + description: | + Filters to process on the container list, encoded as JSON (a + `map[string][]string`). For example, `{"status": ["paused"]}` will +@@ -8392,42 +220,46 @@ + - `since`=(`` or ``) + - `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`) + - `volume`=(`` or ``) +- type: "string" +- responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/ContainerSummary" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Container"] ++ type: string ++ responses: ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/ContainerSummary" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Container + /containers/create: + post: +- summary: "Create a container" +- operationId: "ContainerCreate" +- consumes: +- - "application/json" +- - "application/octet-stream" +- produces: +- - "application/json" ++ summary: Create a container ++ operationId: ContainerCreate + parameters: +- - name: "name" +- in: "query" ++ - name: name ++ in: query + description: | + Assign the specified name to the container. Must match + `/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`. +- type: "string" +- pattern: "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$" +- - name: "platform" +- in: "query" ++ schema: ++ type: string ++ pattern: ^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$ ++ - name: platform ++ in: query + description: | + Platform in the format `os[/arch[/variant]]` used for image lookup. + +@@ -8445,323 +277,525 @@ + WARNING: The requested image's platform (linux/arm64/v8) does not + match the detected host platform (linux/amd64) and no + specific platform was requested +- +- type: "string" +- default: "" +- - name: "body" +- in: "body" +- description: "Container to create" +- schema: +- allOf: +- - $ref: "#/definitions/ContainerConfig" +- - type: "object" +- properties: +- HostConfig: +- $ref: "#/definitions/HostConfig" +- NetworkingConfig: +- $ref: "#/definitions/NetworkingConfig" +- example: +- Hostname: "" +- Domainname: "" +- User: "" +- AttachStdin: false +- AttachStdout: true +- AttachStderr: true +- Tty: false +- OpenStdin: false +- StdinOnce: false +- Env: +- - "FOO=bar" +- - "BAZ=quux" +- Cmd: +- - "date" +- Entrypoint: "" +- Image: "ubuntu" +- Labels: +- com.example.vendor: "Acme" +- com.example.license: "GPL" +- com.example.version: "1.0" +- Volumes: +- /volumes/data: {} +- WorkingDir: "" +- NetworkDisabled: false +- ExposedPorts: +- 22/tcp: {} +- StopSignal: "SIGTERM" +- StopTimeout: 10 +- HostConfig: +- Binds: +- - "/tmp:/tmp" +- Links: +- - "redis3:redis" +- Memory: 0 +- MemorySwap: 0 +- MemoryReservation: 0 +- NanoCpus: 500000 +- CpuPercent: 80 +- CpuShares: 512 +- CpuPeriod: 100000 +- CpuRealtimePeriod: 1000000 +- CpuRealtimeRuntime: 10000 +- CpuQuota: 50000 +- CpusetCpus: "0,1" +- CpusetMems: "0,1" +- MaximumIOps: 0 +- MaximumIOBps: 0 +- BlkioWeight: 300 +- BlkioWeightDevice: +- - {} +- BlkioDeviceReadBps: +- - {} +- BlkioDeviceReadIOps: +- - {} +- BlkioDeviceWriteBps: +- - {} +- BlkioDeviceWriteIOps: +- - {} +- DeviceRequests: +- - Driver: "nvidia" +- Count: -1 +- DeviceIDs": ["0", "1", "GPU-fef8089b-4820-abfc-e83e-94318197576e"] +- Capabilities: [["gpu", "nvidia", "compute"]] +- Options: +- property1: "string" +- property2: "string" +- MemorySwappiness: 60 +- OomKillDisable: false +- OomScoreAdj: 500 +- PidMode: "" +- PidsLimit: 0 +- PortBindings: +- 22/tcp: +- - HostPort: "11022" +- PublishAllPorts: false +- Privileged: false +- ReadonlyRootfs: false +- Dns: +- - "8.8.8.8" +- DnsOptions: +- - "" +- DnsSearch: +- - "" +- VolumesFrom: +- - "parent" +- - "other:ro" +- CapAdd: +- - "NET_ADMIN" +- CapDrop: +- - "MKNOD" +- GroupAdd: +- - "newgroup" +- RestartPolicy: +- Name: "" +- MaximumRetryCount: 0 +- AutoRemove: true +- NetworkMode: "bridge" +- Devices: [] +- Ulimits: +- - {} +- LogConfig: +- Type: "json-file" +- Config: {} +- SecurityOpt: [] +- StorageOpt: {} +- CgroupParent: "" +- VolumeDriver: "" +- ShmSize: 67108864 +- NetworkingConfig: +- EndpointsConfig: +- isolated_nw: +- IPAMConfig: +- IPv4Address: "172.20.30.33" +- IPv6Address: "2001:db8:abcd::3033" +- LinkLocalIPs: +- - "169.254.34.68" +- - "fe80::3468" +- Links: +- - "container_1" +- - "container_2" +- Aliases: +- - "server_x" +- - "server_y" +- database_nw: {} +- +- required: true +- responses: +- 201: +- description: "Container created successfully" +- schema: +- $ref: "#/definitions/ContainerCreateResponse" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such image: c2ada9df5af8" +- 409: +- description: "conflict" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Container"] ++ type: string ++ default: "" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/ContainerConfig" ++ - type: object ++ properties: ++ HostConfig: ++ $ref: "#/components/schemas/HostConfig" ++ NetworkingConfig: ++ $ref: "#/components/schemas/NetworkingConfig" ++ example: ++ Hostname: "" ++ Domainname: "" ++ User: "" ++ AttachStdin: false ++ AttachStdout: true ++ AttachStderr: true ++ Tty: false ++ OpenStdin: false ++ StdinOnce: false ++ Env: ++ - FOO=bar ++ - BAZ=quux ++ Cmd: ++ - date ++ Entrypoint: "" ++ Image: ubuntu ++ Labels: ++ com.example.vendor: Acme ++ com.example.license: GPL ++ com.example.version: "1.0" ++ Volumes: ++ /volumes/data: {} ++ WorkingDir: "" ++ NetworkDisabled: false ++ ExposedPorts: ++ 22/tcp: {} ++ StopSignal: SIGTERM ++ StopTimeout: 10 ++ HostConfig: ++ Binds: ++ - /tmp:/tmp ++ Links: ++ - redis3:redis ++ Memory: 0 ++ MemorySwap: 0 ++ MemoryReservation: 0 ++ NanoCpus: 500000 ++ CpuPercent: 80 ++ CpuShares: 512 ++ CpuPeriod: 100000 ++ CpuRealtimePeriod: 1000000 ++ CpuRealtimeRuntime: 10000 ++ CpuQuota: 50000 ++ CpusetCpus: 0,1 ++ CpusetMems: 0,1 ++ MaximumIOps: 0 ++ MaximumIOBps: 0 ++ BlkioWeight: 300 ++ BlkioWeightDevice: ++ - {} ++ BlkioDeviceReadBps: ++ - {} ++ BlkioDeviceReadIOps: ++ - {} ++ BlkioDeviceWriteBps: ++ - {} ++ BlkioDeviceWriteIOps: ++ - {} ++ DeviceRequests: ++ - Driver: nvidia ++ Count: -1 ++ DeviceIDs": ++ - "0" ++ - "1" ++ - GPU-fef8089b-4820-abfc-e83e-94318197576e ++ Capabilities: ++ - - gpu ++ - nvidia ++ - compute ++ Options: ++ property1: string ++ property2: string ++ MemorySwappiness: 60 ++ OomKillDisable: false ++ OomScoreAdj: 500 ++ PidMode: "" ++ PidsLimit: 0 ++ PortBindings: ++ 22/tcp: ++ - HostPort: "11022" ++ PublishAllPorts: false ++ Privileged: false ++ ReadonlyRootfs: false ++ Dns: ++ - 8.8.8.8 ++ DnsOptions: ++ - "" ++ DnsSearch: ++ - "" ++ VolumesFrom: ++ - parent ++ - other:ro ++ CapAdd: ++ - NET_ADMIN ++ CapDrop: ++ - MKNOD ++ GroupAdd: ++ - newgroup ++ RestartPolicy: ++ Name: "" ++ MaximumRetryCount: 0 ++ AutoRemove: true ++ NetworkMode: bridge ++ Devices: [] ++ Ulimits: ++ - {} ++ LogConfig: ++ Type: json-file ++ Config: {} ++ SecurityOpt: [] ++ StorageOpt: {} ++ CgroupParent: "" ++ VolumeDriver: "" ++ ShmSize: 67108864 ++ NetworkingConfig: ++ EndpointsConfig: ++ isolated_nw: ++ IPAMConfig: ++ IPv4Address: 172.20.30.33 ++ IPv6Address: 2001:db8:abcd::3033 ++ LinkLocalIPs: ++ - 169.254.34.68 ++ - fe80::3468 ++ Links: ++ - container_1 ++ - container_2 ++ Aliases: ++ - server_x ++ - server_y ++ database_nw: {} ++ application/octet-stream: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/ContainerConfig" ++ - type: object ++ properties: ++ HostConfig: ++ $ref: "#/components/schemas/HostConfig" ++ NetworkingConfig: ++ $ref: "#/components/schemas/NetworkingConfig" ++ example: ++ Hostname: "" ++ Domainname: "" ++ User: "" ++ AttachStdin: false ++ AttachStdout: true ++ AttachStderr: true ++ Tty: false ++ OpenStdin: false ++ StdinOnce: false ++ Env: ++ - FOO=bar ++ - BAZ=quux ++ Cmd: ++ - date ++ Entrypoint: "" ++ Image: ubuntu ++ Labels: ++ com.example.vendor: Acme ++ com.example.license: GPL ++ com.example.version: "1.0" ++ Volumes: ++ /volumes/data: {} ++ WorkingDir: "" ++ NetworkDisabled: false ++ ExposedPorts: ++ 22/tcp: {} ++ StopSignal: SIGTERM ++ StopTimeout: 10 ++ HostConfig: ++ Binds: ++ - /tmp:/tmp ++ Links: ++ - redis3:redis ++ Memory: 0 ++ MemorySwap: 0 ++ MemoryReservation: 0 ++ NanoCpus: 500000 ++ CpuPercent: 80 ++ CpuShares: 512 ++ CpuPeriod: 100000 ++ CpuRealtimePeriod: 1000000 ++ CpuRealtimeRuntime: 10000 ++ CpuQuota: 50000 ++ CpusetCpus: 0,1 ++ CpusetMems: 0,1 ++ MaximumIOps: 0 ++ MaximumIOBps: 0 ++ BlkioWeight: 300 ++ BlkioWeightDevice: ++ - {} ++ BlkioDeviceReadBps: ++ - {} ++ BlkioDeviceReadIOps: ++ - {} ++ BlkioDeviceWriteBps: ++ - {} ++ BlkioDeviceWriteIOps: ++ - {} ++ DeviceRequests: ++ - Driver: nvidia ++ Count: -1 ++ DeviceIDs": ++ - "0" ++ - "1" ++ - GPU-fef8089b-4820-abfc-e83e-94318197576e ++ Capabilities: ++ - - gpu ++ - nvidia ++ - compute ++ Options: ++ property1: string ++ property2: string ++ MemorySwappiness: 60 ++ OomKillDisable: false ++ OomScoreAdj: 500 ++ PidMode: "" ++ PidsLimit: 0 ++ PortBindings: ++ 22/tcp: ++ - HostPort: "11022" ++ PublishAllPorts: false ++ Privileged: false ++ ReadonlyRootfs: false ++ Dns: ++ - 8.8.8.8 ++ DnsOptions: ++ - "" ++ DnsSearch: ++ - "" ++ VolumesFrom: ++ - parent ++ - other:ro ++ CapAdd: ++ - NET_ADMIN ++ CapDrop: ++ - MKNOD ++ GroupAdd: ++ - newgroup ++ RestartPolicy: ++ Name: "" ++ MaximumRetryCount: 0 ++ AutoRemove: true ++ NetworkMode: bridge ++ Devices: [] ++ Ulimits: ++ - {} ++ LogConfig: ++ Type: json-file ++ Config: {} ++ SecurityOpt: [] ++ StorageOpt: {} ++ CgroupParent: "" ++ VolumeDriver: "" ++ ShmSize: 67108864 ++ NetworkingConfig: ++ EndpointsConfig: ++ isolated_nw: ++ IPAMConfig: ++ IPv4Address: 172.20.30.33 ++ IPv6Address: 2001:db8:abcd::3033 ++ LinkLocalIPs: ++ - 169.254.34.68 ++ - fe80::3468 ++ Links: ++ - container_1 ++ - container_2 ++ Aliases: ++ - server_x ++ - server_y ++ database_nw: {} ++ description: Container to create ++ required: true ++ responses: ++ "201": ++ description: Container created successfully ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ContainerCreateResponse" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such image: c2ada9df5af8" ++ "409": ++ description: conflict ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Container ++ description: Create a container. + /containers/{id}/json: + get: +- summary: "Inspect a container" +- description: "Return low-level information about a container." +- operationId: "ContainerInspect" +- produces: +- - "application/json" +- responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/ContainerInspectResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "size" +- in: "query" +- type: "boolean" +- default: false +- description: "Return the size of container as fields `SizeRw` and `SizeRootFs`" +- tags: ["Container"] ++ summary: Inspect a container ++ description: Return low-level information about a container. ++ operationId: ContainerInspect ++ responses: ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ContainerInspectResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: size ++ in: query ++ description: Return the size of container as fields `SizeRw` and `SizeRootFs` ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Container + /containers/{id}/top: + get: +- summary: "List processes running inside a container" ++ summary: List processes running inside a container + description: | + On Unix systems, this is done by running the `ps` command. This endpoint + is not supported on Windows. +- operationId: "ContainerTop" ++ operationId: ContainerTop + responses: +- 200: +- description: "no error" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ContainerTopResponse" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/ContainerTopResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container + schema: +- $ref: "#/definitions/ContainerTopResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "ps_args" +- in: "query" +- description: "The arguments to pass to `ps`. For example, `aux`" +- type: "string" +- default: "-ef" +- tags: ["Container"] ++ type: string ++ - name: ps_args ++ in: query ++ description: The arguments to pass to `ps`. For example, `aux` ++ schema: ++ type: string ++ default: -ef ++ tags: ++ - Container + /containers/{id}/logs: + get: +- summary: "Get container logs" ++ summary: Get container logs + description: | + Get `stdout` and `stderr` logs from a container. + + Note: This endpoint works only for containers with the `json-file` or + `journald` logging driver. +- produces: +- - "application/vnd.docker.raw-stream" +- - "application/vnd.docker.multiplexed-stream" +- operationId: "ContainerLogs" ++ operationId: ContainerLogs + responses: +- 200: ++ "200": + description: | + logs returned as a stream in response body. + For the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach). + Note that unlike the attach endpoint, the logs endpoint does not + upgrade the connection and does not set Content-Type. ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ type: string ++ format: binary ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ type: string ++ format: binary ++ "404": ++ description: no such container ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container + schema: +- type: "string" +- format: "binary" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "follow" +- in: "query" +- description: "Keep connection after returning logs." +- type: "boolean" +- default: false +- - name: "stdout" +- in: "query" +- description: "Return logs from `stdout`" +- type: "boolean" +- default: false +- - name: "stderr" +- in: "query" +- description: "Return logs from `stderr`" +- type: "boolean" +- default: false +- - name: "since" +- in: "query" +- description: "Only return logs since this time, as a UNIX timestamp" +- type: "integer" +- default: 0 +- - name: "until" +- in: "query" +- description: "Only return logs before this time, as a UNIX timestamp" +- type: "integer" +- default: 0 +- - name: "timestamps" +- in: "query" +- description: "Add timestamps to every log line" +- type: "boolean" +- default: false +- - name: "tail" +- in: "query" ++ type: string ++ - name: follow ++ in: query ++ description: Keep connection after returning logs. ++ schema: ++ type: boolean ++ default: false ++ - name: stdout ++ in: query ++ description: Return logs from `stdout` ++ schema: ++ type: boolean ++ default: false ++ - name: stderr ++ in: query ++ description: Return logs from `stderr` ++ schema: ++ type: boolean ++ default: false ++ - name: since ++ in: query ++ description: Only return logs since this time, as a UNIX timestamp ++ schema: ++ type: integer ++ default: 0 ++ - name: until ++ in: query ++ description: Only return logs before this time, as a UNIX timestamp ++ schema: ++ type: integer ++ default: 0 ++ - name: timestamps ++ in: query ++ description: Add timestamps to every log line ++ schema: ++ type: boolean ++ default: false ++ - name: tail ++ in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. +- type: "string" +- default: "all" +- tags: ["Container"] ++ schema: ++ type: string ++ default: all ++ tags: ++ - Container + /containers/{id}/changes: + get: +- summary: "Get changes on a container’s filesystem" ++ summary: Get changes on a container’s filesystem + description: | + Returns which files in a container's filesystem have been added, deleted, + or modified. The `Kind` of modification can be one of: +@@ -8769,72 +803,87 @@ + - `0`: Modified ("C") + - `1`: Added ("A") + - `2`: Deleted ("D") +- operationId: "ContainerChanges" +- produces: ["application/json"] ++ operationId: ContainerChanges + responses: +- 200: +- description: "The list of changes" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/FilesystemChange" +- examples: ++ "200": ++ description: The list of changes ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/FilesystemChange" ++ examples: ++ response: ++ value: ++ - Path: /dev ++ Kind: 0 ++ - Path: /dev/kmsg ++ Kind: 1 ++ - Path: /test ++ Kind: 1 ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: + application/json: +- - Path: "/dev" +- Kind: 0 +- - Path: "/dev/kmsg" +- Kind: 1 +- - Path: "/test" +- Kind: 1 +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- tags: ["Container"] ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ tags: ++ - Container + /containers/{id}/export: + get: +- summary: "Export a container" +- description: "Export the contents of a container as a tarball." +- operationId: "ContainerExport" +- produces: +- - "application/octet-stream" +- responses: +- 200: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- tags: ["Container"] ++ summary: Export a container ++ description: Export the contents of a container as a tarball. ++ operationId: ContainerExport ++ responses: ++ "200": ++ description: no error ++ "404": ++ description: no such container ++ content: ++ application/octet-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ tags: ++ - Container + /containers/{id}/stats: + get: +- summary: "Get container stats based on resource usage" ++ summary: Get container stats based on resource usage + description: | + This endpoint returns a live stream of a container’s resource usage + statistics. +@@ -8863,328 +912,405 @@ + * system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage` + * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus` + * CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0` +- operationId: "ContainerStats" +- produces: ["application/json"] ++ operationId: ContainerStats + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/ContainerStatsResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "200": ++ description: no error ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ContainerStatsResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- description: "ID or name of the container" +- type: "string" +- - name: "stream" +- in: "query" ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: stream ++ in: query + description: | + Stream the output. If false, the stats will be output once and then + it will disconnect. +- type: "boolean" +- default: true +- - name: "one-shot" +- in: "query" ++ schema: ++ type: boolean ++ default: true ++ - name: one-shot ++ in: query + description: | + Only get a single stat instead of waiting for 2 cycles. Must be used + with `stream=false`. +- type: "boolean" +- default: false +- tags: ["Container"] ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Container + /containers/{id}/resize: + post: +- summary: "Resize a container TTY" +- description: "Resize the TTY for a container." +- operationId: "ContainerResize" +- consumes: +- - "application/octet-stream" +- produces: +- - "text/plain" +- responses: +- 200: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "cannot resize container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "h" +- in: "query" +- required: true +- description: "Height of the TTY session in characters" +- type: "integer" +- - name: "w" +- in: "query" +- required: true +- description: "Width of the TTY session in characters" +- type: "integer" +- tags: ["Container"] ++ summary: Resize a container TTY ++ description: Resize the TTY for a container. ++ operationId: ContainerResize ++ responses: ++ "200": ++ description: no error ++ "404": ++ description: no such container ++ content: ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: cannot resize container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: h ++ in: query ++ required: true ++ description: Height of the TTY session in characters ++ schema: ++ type: integer ++ - name: w ++ in: query ++ required: true ++ description: Width of the TTY session in characters ++ schema: ++ type: integer ++ tags: ++ - Container + /containers/{id}/start: + post: +- summary: "Start a container" +- operationId: "ContainerStart" ++ summary: Start a container ++ operationId: ContainerStart + responses: +- 204: +- description: "no error" +- 304: +- description: "container already started" +- 400: +- description: "bad parameter, including an invalid checkpoint ID" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "detachKeys" +- in: "query" ++ "204": ++ description: no error ++ "304": ++ description: container already started ++ "400": ++ description: bad parameter, including an invalid checkpoint ID ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: detachKeys ++ in: query + description: | + Override the key sequence for detaching a container. Format is a + single character `[a-Z]` or `ctrl-` where `` is one + of: `a-z`, `@`, `^`, `[`, `,` or `_`. +- type: "string" +- tags: ["Container"] ++ schema: ++ type: string ++ tags: ++ - Container ++ description: Start a container. + /containers/{id}/stop: + post: +- summary: "Stop a container" +- operationId: "ContainerStop" ++ summary: Stop a container ++ operationId: ContainerStop + responses: +- 204: +- description: "no error" +- 304: +- description: "container already stopped" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "signal" +- in: "query" ++ "204": ++ description: no error ++ "304": ++ description: container already stopped ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: signal ++ in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). +- type: "string" +- - name: "t" +- in: "query" +- description: "Number of seconds to wait before killing the container" +- type: "integer" +- tags: ["Container"] ++ schema: ++ type: string ++ - name: t ++ in: query ++ description: Number of seconds to wait before killing the container ++ schema: ++ type: integer ++ tags: ++ - Container ++ description: Stop a container. + /containers/{id}/restart: + post: +- summary: "Restart a container" +- operationId: "ContainerRestart" ++ summary: Restart a container ++ operationId: ContainerRestart + responses: +- 204: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "signal" +- in: "query" ++ "204": ++ description: no error ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: signal ++ in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). +- type: "string" +- - name: "t" +- in: "query" +- description: "Number of seconds to wait before killing the container" +- type: "integer" +- tags: ["Container"] ++ schema: ++ type: string ++ - name: t ++ in: query ++ description: Number of seconds to wait before killing the container ++ schema: ++ type: integer ++ tags: ++ - Container ++ description: Restart a container. + /containers/{id}/kill: + post: +- summary: "Kill a container" ++ summary: Kill a container + description: | + Send a POSIX signal to a container, defaulting to killing to the + container. +- operationId: "ContainerKill" ++ operationId: ContainerKill + responses: +- 204: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "204": ++ description: no error ++ "404": ++ description: no such container ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 409: +- description: "container is not running" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "409": ++ description: container is not running ++ content: + application/json: +- message: "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- description: "ID or name of the container" +- type: "string" +- - name: "signal" +- in: "query" ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: signal ++ in: query + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). +- type: "string" +- default: "SIGKILL" +- tags: ["Container"] ++ schema: ++ type: string ++ default: SIGKILL ++ tags: ++ - Container + /containers/{id}/update: + post: +- summary: "Update a container" ++ summary: Update a container + description: | + Change various configuration options of a container without having to + recreate it. +- operationId: "ContainerUpdate" +- consumes: ["application/json"] +- produces: ["application/json"] ++ operationId: ContainerUpdate + responses: +- 200: +- description: "The container has been updated." +- schema: +- $ref: "#/definitions/ContainerUpdateResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "200": ++ description: The container has been updated. ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ContainerUpdateResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "update" +- in: "body" ++ - name: id ++ in: path + required: true ++ description: ID or name of the container + schema: +- allOf: +- - $ref: "#/definitions/Resources" +- - type: "object" +- properties: +- RestartPolicy: +- $ref: "#/definitions/RestartPolicy" +- example: +- BlkioWeight: 300 +- CpuShares: 512 +- CpuPeriod: 100000 +- CpuQuota: 50000 +- CpuRealtimePeriod: 1000000 +- CpuRealtimeRuntime: 10000 +- CpusetCpus: "0,1" +- CpusetMems: "0" +- Memory: 314572800 +- MemorySwap: 514288000 +- MemoryReservation: 209715200 +- RestartPolicy: +- MaximumRetryCount: 4 +- Name: "on-failure" +- tags: ["Container"] ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/Resources" ++ - type: object ++ properties: ++ RestartPolicy: ++ $ref: "#/components/schemas/RestartPolicy" ++ example: ++ BlkioWeight: 300 ++ CpuShares: 512 ++ CpuPeriod: 100000 ++ CpuQuota: 50000 ++ CpuRealtimePeriod: 1000000 ++ CpuRealtimeRuntime: 10000 ++ CpusetCpus: 0,1 ++ CpusetMems: "0" ++ Memory: 314572800 ++ MemorySwap: 514288000 ++ MemoryReservation: 209715200 ++ RestartPolicy: ++ MaximumRetryCount: 4 ++ Name: on-failure ++ required: true ++ tags: ++ - Container + /containers/{id}/rename: + post: +- summary: "Rename a container" +- operationId: "ContainerRename" ++ summary: Rename a container ++ operationId: ContainerRename + responses: +- 204: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 409: +- description: "name already in use" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "name" +- in: "query" +- required: true +- description: "New name for the container" +- type: "string" +- tags: ["Container"] ++ "204": ++ description: no error ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "409": ++ description: name already in use ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: name ++ in: query ++ required: true ++ description: New name for the container ++ schema: ++ type: string ++ tags: ++ - Container ++ description: Rename a container. + /containers/{id}/pause: + post: +- summary: "Pause a container" ++ summary: Pause a container + description: | + Use the freezer cgroup to suspend all processes in a container. + +@@ -9192,57 +1318,71 @@ + which is observable by the process being suspended. With the freezer + cgroup the process is unaware, and unable to capture, that it is being + suspended, and subsequently resumed. +- operationId: "ContainerPause" ++ operationId: ContainerPause + responses: +- 204: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "204": ++ description: no error ++ "404": ++ description: no such container ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- description: "ID or name of the container" +- type: "string" +- tags: ["Container"] ++ description: ID or name of the container ++ schema: ++ type: string ++ tags: ++ - Container + /containers/{id}/unpause: + post: +- summary: "Unpause a container" +- description: "Resume a container which has been paused." +- operationId: "ContainerUnpause" +- responses: +- 204: +- description: "no error" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- tags: ["Container"] ++ summary: Unpause a container ++ description: Resume a container which has been paused. ++ operationId: ContainerUnpause ++ responses: ++ "204": ++ description: no error ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ tags: ++ - Container + /containers/{id}/attach: + post: +- summary: "Attach to a container" ++ summary: Attach to a container + description: | + Attach to a container to read its output or send it input. You can attach + to the same container multiple times and you can reattach to containers +@@ -9338,46 +1478,55 @@ + the stream is not multiplexed. The data exchanged over the hijacked + connection is simply the raw data from the process PTY and client's + `stdin`. +- +- operationId: "ContainerAttach" +- produces: +- - "application/vnd.docker.raw-stream" +- - "application/vnd.docker.multiplexed-stream" +- responses: +- 101: +- description: "no error, hints proxy about hijacking" +- 200: +- description: "no error, no upgrade header found" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "detachKeys" +- in: "query" ++ operationId: ContainerAttach ++ responses: ++ "101": ++ description: no error, hints proxy about hijacking ++ "200": ++ description: no error, no upgrade header found ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such container ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: detachKeys ++ in: query + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,` or `_`. +- type: "string" +- - name: "logs" +- in: "query" ++ schema: ++ type: string ++ - name: logs ++ in: query + description: | + Replay previous logs from the container. + +@@ -9387,401 +1536,484 @@ + If `stream` is also enabled, once all the previous output has been + returned, it will seamlessly transition into streaming current + output. +- type: "boolean" +- default: false +- - name: "stream" +- in: "query" ++ schema: ++ type: boolean ++ default: false ++ - name: stream ++ in: query + description: | + Stream attached streams from the time the request was made onwards. +- type: "boolean" +- default: false +- - name: "stdin" +- in: "query" +- description: "Attach to `stdin`" +- type: "boolean" +- default: false +- - name: "stdout" +- in: "query" +- description: "Attach to `stdout`" +- type: "boolean" +- default: false +- - name: "stderr" +- in: "query" +- description: "Attach to `stderr`" +- type: "boolean" +- default: false +- tags: ["Container"] ++ schema: ++ type: boolean ++ default: false ++ - name: stdin ++ in: query ++ description: Attach to `stdin` ++ schema: ++ type: boolean ++ default: false ++ - name: stdout ++ in: query ++ description: Attach to `stdout` ++ schema: ++ type: boolean ++ default: false ++ - name: stderr ++ in: query ++ description: Attach to `stderr` ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Container + /containers/{id}/attach/ws: + get: +- summary: "Attach to a container via a websocket" +- operationId: "ContainerAttachWebsocket" ++ summary: Attach to a container via a websocket ++ operationId: ContainerAttachWebsocket + responses: +- 101: +- description: "no error, hints proxy about hijacking" +- 200: +- description: "no error, no upgrade header found" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "detachKeys" +- in: "query" ++ "101": ++ description: no error, hints proxy about hijacking ++ "200": ++ description: no error, no upgrade header found ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: detachKeys ++ in: query + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,`, or `_`. +- type: "string" +- - name: "logs" +- in: "query" +- description: "Return logs" +- type: "boolean" +- default: false +- - name: "stream" +- in: "query" +- description: "Return stream" +- type: "boolean" +- default: false +- - name: "stdin" +- in: "query" +- description: "Attach to `stdin`" +- type: "boolean" +- default: false +- - name: "stdout" +- in: "query" +- description: "Attach to `stdout`" +- type: "boolean" +- default: false +- - name: "stderr" +- in: "query" +- description: "Attach to `stderr`" +- type: "boolean" +- default: false +- tags: ["Container"] ++ schema: ++ type: string ++ - name: logs ++ in: query ++ description: Return logs ++ schema: ++ type: boolean ++ default: false ++ - name: stream ++ in: query ++ description: Return stream ++ schema: ++ type: boolean ++ default: false ++ - name: stdin ++ in: query ++ description: Attach to `stdin` ++ schema: ++ type: boolean ++ default: false ++ - name: stdout ++ in: query ++ description: Attach to `stdout` ++ schema: ++ type: boolean ++ default: false ++ - name: stderr ++ in: query ++ description: Attach to `stderr` ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Container ++ description: Attach to a container via a websocket. + /containers/{id}/wait: + post: +- summary: "Wait for a container" +- description: "Block until a container stops, then returns the exit code." +- operationId: "ContainerWait" +- produces: ["application/json"] +- responses: +- 200: +- description: "The container has exit." +- schema: +- $ref: "#/definitions/ContainerWaitResponse" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "condition" +- in: "query" ++ summary: Wait for a container ++ description: Block until a container stops, then returns the exit code. ++ operationId: ContainerWait ++ responses: ++ "200": ++ description: The container has exit. ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ContainerWaitResponse" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: condition ++ in: query + description: | + Wait until a container state reaches the given condition. + + Defaults to `not-running` if omitted or empty. +- type: "string" +- enum: +- - "not-running" +- - "next-exit" +- - "removed" +- default: "not-running" +- tags: ["Container"] ++ schema: ++ type: string ++ enum: ++ - not-running ++ - next-exit ++ - removed ++ default: not-running ++ tags: ++ - Container + /containers/{id}: + delete: +- summary: "Remove a container" +- operationId: "ContainerDelete" ++ summary: Remove a container ++ operationId: ContainerDelete + responses: +- 204: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 409: +- description: "conflict" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: | +- You cannot remove a running container: c2ada9df5af8. Stop the +- container before attempting removal or force remove +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "v" +- in: "query" +- description: "Remove anonymous volumes associated with the container." +- type: "boolean" +- default: false +- - name: "force" +- in: "query" +- description: "If the container is running, kill it before removing it." +- type: "boolean" +- default: false +- - name: "link" +- in: "query" +- description: "Remove the specified link associated with the container." +- type: "boolean" +- default: false +- tags: ["Container"] ++ "204": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "409": ++ description: conflict ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: | ++ You cannot remove a running container: c2ada9df5af8. Stop the ++ container before attempting removal or force remove ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: v ++ in: query ++ description: Remove anonymous volumes associated with the container. ++ schema: ++ type: boolean ++ default: false ++ - name: force ++ in: query ++ description: If the container is running, kill it before removing it. ++ schema: ++ type: boolean ++ default: false ++ - name: link ++ in: query ++ description: Remove the specified link associated with the container. ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Container ++ description: Remove a container. + /containers/{id}/archive: + head: +- summary: "Get information about files in a container" ++ summary: Get information about files in a container + description: | + A response header `X-Docker-Container-Path-Stat` is returned, containing + a base64 - encoded JSON object with some filesystem header information + about the path. +- operationId: "ContainerArchiveInfo" ++ operationId: ContainerArchiveInfo + responses: +- 200: +- description: "no error" ++ "200": ++ description: no error + headers: + X-Docker-Container-Path-Stat: +- type: "string" + description: | + A base64 - encoded JSON object with some filesystem header + information about the path +- 400: +- description: "Bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "Container or path does not exist" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the container" +- type: "string" +- - name: "path" +- in: "query" ++ schema: ++ type: string ++ "400": ++ description: Bad parameter ++ "404": ++ description: Container or path does not exist ++ "500": ++ description: Server error ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: path ++ in: query + required: true +- description: "Resource in the container’s filesystem to archive." +- type: "string" +- tags: ["Container"] +- get: +- summary: "Get an archive of a filesystem resource in a container" +- description: "Get a tar archive of a resource in the filesystem of container id." +- operationId: "ContainerArchive" +- produces: ["application/x-tar"] +- responses: +- 200: +- description: "no error" +- 400: +- description: "Bad parameter" ++ description: Resource in the container’s filesystem to archive. + schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "Container or path does not exist" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ type: string ++ tags: ++ - Container ++ get: ++ summary: Get an archive of a filesystem resource in a container ++ description: Get a tar archive of a resource in the filesystem of container id. ++ operationId: ContainerArchive ++ responses: ++ "200": ++ description: no error ++ content: ++ application/x-tar: {} ++ "400": ++ description: Bad parameter ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: Container or path does not exist ++ content: ++ application/x-tar: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- description: "ID or name of the container" +- type: "string" +- - name: "path" +- in: "query" ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: path ++ in: query + required: true +- description: "Resource in the container’s filesystem to archive." +- type: "string" +- tags: ["Container"] ++ description: Resource in the container’s filesystem to archive. ++ schema: ++ type: string ++ tags: ++ - Container + put: +- summary: "Extract an archive of files or folders to a directory in a container" ++ summary: Extract an archive of files or folders to a directory in a container + description: | + Upload a tar archive to be extracted to a path in the filesystem of container id. + `path` parameter is asserted to be a directory. If it exists as a file, 400 error + will be returned with message "not a directory". +- operationId: "PutContainerArchive" +- consumes: ["application/x-tar", "application/octet-stream"] ++ operationId: PutContainerArchive + responses: +- 200: +- description: "The content was extracted successfully" +- 400: +- description: "Bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "200": ++ description: The content was extracted successfully ++ "400": ++ description: Bad parameter ++ content: + application/json: +- message: "not a directory" +- 403: +- description: "Permission denied, the volume or container rootfs is marked as read-only." +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "No such container or path does not exist inside the container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: not a directory ++ "403": ++ description: Permission denied, the volume or container rootfs is marked as read-only. ++ content: + application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: No such container or path does not exist inside the container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- description: "ID or name of the container" +- type: "string" +- - name: "path" +- in: "query" ++ description: ID or name of the container ++ schema: ++ type: string ++ - name: path ++ in: query + required: true + description: "Path to a directory in the container to extract the archive’s contents into. " +- type: "string" +- - name: "noOverwriteDirNonDir" +- in: "query" ++ schema: ++ type: string ++ - name: noOverwriteDirNonDir ++ in: query + description: | + If `1`, `true`, or `True` then it will be an error if unpacking the + given content would cause an existing directory to be replaced with + a non-directory and vice versa. +- type: "string" +- - name: "copyUIDGID" +- in: "query" ++ schema: ++ type: string ++ - name: copyUIDGID ++ in: query + description: | + If `1`, `true`, then it will copy UID/GID maps to the dest file or + dir +- type: "string" +- - name: "inputStream" +- in: "body" +- required: true +- description: | +- The input stream must be a tar archive compressed with one of the +- following algorithms: `identity` (no compression), `gzip`, `bzip2`, +- or `xz`. +- schema: +- type: "string" +- format: "binary" +- tags: ["Container"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/x-tar: ++ schema: ++ type: string ++ format: binary ++ application/octet-stream: ++ schema: ++ type: string ++ format: binary ++ description: | ++ The input stream must be a tar archive compressed with one of the ++ following algorithms: `identity` (no compression), `gzip`, `bzip2`, ++ or `xz`. ++ required: true ++ tags: ++ - Container + /containers/prune: + post: +- summary: "Delete stopped containers" +- produces: +- - "application/json" +- operationId: "ContainerPrune" ++ summary: Delete stopped containers ++ operationId: ContainerPrune + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels. +- type: "string" +- responses: +- 200: +- description: "No error" + schema: +- type: "object" +- title: "ContainerPruneResponse" +- properties: +- ContainersDeleted: +- description: "Container IDs that were deleted" +- type: "array" +- items: +- type: "string" +- SpaceReclaimed: +- description: "Disk space reclaimed in bytes" +- type: "integer" +- format: "int64" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Container"] ++ type: string ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: ContainerPruneResponse ++ properties: ++ ContainersDeleted: ++ description: Container IDs that were deleted ++ type: array ++ items: ++ type: string ++ SpaceReclaimed: ++ description: Disk space reclaimed in bytes ++ type: integer ++ format: int64 ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Container ++ description: Delete stopped containers. + /images/json: + get: +- summary: "List Images" +- description: "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image." +- operationId: "ImageList" +- produces: +- - "application/json" +- responses: +- 200: +- description: "Summary image data for the images matching the query" ++ summary: List Images ++ description: Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image. ++ operationId: ImageList ++ responses: ++ "200": ++ description: Summary image data for the images matching the query ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/ImageSummary" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: all ++ in: query ++ description: Show all images. Only images from a final layer (no children) are shown by default. + schema: +- type: "array" +- items: +- $ref: "#/definitions/ImageSummary" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "all" +- in: "query" +- description: "Show all images. Only images from a final layer (no children) are shown by default." +- type: "boolean" +- default: false +- - name: "filters" +- in: "query" ++ type: boolean ++ default: false ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the images list. +@@ -9794,31 +2026,37 @@ + - `reference`=(`[:]`) + - `since`=(`[:]`, `` or ``) + - `until=` +- type: "string" +- - name: "shared-size" +- in: "query" +- description: "Compute and show shared size as a `SharedSize` field on each image." +- type: "boolean" +- default: false +- - name: "digests" +- in: "query" +- description: "Show digest information as a `RepoDigests` field on each image." +- type: "boolean" +- default: false +- - name: "manifests" +- in: "query" +- description: "Include `Manifests` in the image summary." +- type: "boolean" +- default: false +- - name: "identity" +- in: "query" +- description: "Include `Identity` in each manifest summary. Requires `manifests=1`." +- type: "boolean" +- default: false +- tags: ["Image"] ++ schema: ++ type: string ++ - name: shared-size ++ in: query ++ description: Compute and show shared size as a `SharedSize` field on each image. ++ schema: ++ type: boolean ++ default: false ++ - name: digests ++ in: query ++ description: Show digest information as a `RepoDigests` field on each image. ++ schema: ++ type: boolean ++ default: false ++ - name: manifests ++ in: query ++ description: Include `Manifests` in the image summary. ++ schema: ++ type: boolean ++ default: false ++ - name: identity ++ in: query ++ description: Include `Identity` in each manifest summary. Requires `manifests=1`. ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Image + /build: + post: +- summary: "Build an image" ++ summary: Build an image + description: | + Build an image from a tar archive with a `Dockerfile` in it. + +@@ -9827,136 +2065,142 @@ + The Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output. + + The build is canceled if the client drops the connection by quitting or being killed. +- operationId: "ImageBuild" +- consumes: +- - "application/octet-stream" +- produces: +- - "application/json" +- parameters: +- - name: "inputStream" +- in: "body" +- description: "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." +- schema: +- type: "string" +- format: "binary" +- - name: "dockerfile" +- in: "query" +- description: "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`." +- type: "string" +- default: "Dockerfile" +- - name: "t" +- in: "query" +- description: "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters." +- type: "string" +- - name: "extrahosts" +- in: "query" +- description: "Extra hosts to add to /etc/hosts" +- type: "string" +- - name: "remote" +- in: "query" +- description: "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball." +- type: "string" +- - name: "q" +- in: "query" +- description: "Suppress verbose build output." +- type: "boolean" +- default: false +- - name: "nocache" +- in: "query" +- description: "Do not use the cache when building the image." +- type: "boolean" +- default: false +- - name: "cachefrom" +- in: "query" +- description: "JSON array of images used for build cache resolution." +- type: "string" +- - name: "pull" +- in: "query" +- description: "Attempt to pull the image even if an older image exists locally." +- type: "string" +- - name: "rm" +- in: "query" +- description: "Remove intermediate containers after a successful build." +- type: "boolean" +- default: true +- - name: "forcerm" +- in: "query" +- description: "Always remove intermediate containers, even upon failure." +- type: "boolean" +- default: false +- - name: "memory" +- in: "query" +- description: "Set memory limit for build." +- type: "integer" +- format: "int64" +- - name: "memswap" +- in: "query" +- description: "Total memory (memory + swap). Set as `-1` to disable swap." +- type: "integer" +- format: "int64" +- - name: "cpushares" +- in: "query" +- description: "CPU shares (relative weight)." +- type: "integer" +- format: "int64" +- - name: "cpusetcpus" +- in: "query" +- description: "CPUs in which to allow execution (e.g., `0-3`, `0,1`)." +- type: "string" +- - name: "cpuperiod" +- in: "query" +- description: "The length of a CPU period in microseconds." +- type: "integer" +- format: "int64" +- - name: "cpuquota" +- in: "query" +- description: "Microseconds of CPU time that the container can get in a CPU period." +- type: "integer" +- format: "int64" +- - name: "buildargs" +- in: "query" +- description: > +- JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker +- uses the buildargs as the environment context for commands run via the `Dockerfile` RUN +- instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for +- passing secret values. +- +- +- For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the +- query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded. ++ operationId: ImageBuild ++ parameters: ++ - name: dockerfile ++ in: query ++ description: Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`. ++ schema: ++ type: string ++ default: Dockerfile ++ - name: t ++ in: query ++ description: A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters. ++ schema: ++ type: string ++ - name: extrahosts ++ in: query ++ description: Extra hosts to add to /etc/hosts ++ schema: ++ type: string ++ - name: remote ++ in: query ++ description: A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball. ++ schema: ++ type: string ++ - name: q ++ in: query ++ description: Suppress verbose build output. ++ schema: ++ type: boolean ++ default: false ++ - name: nocache ++ in: query ++ description: Do not use the cache when building the image. ++ schema: ++ type: boolean ++ default: false ++ - name: cachefrom ++ in: query ++ description: JSON array of images used for build cache resolution. ++ schema: ++ type: string ++ - name: pull ++ in: query ++ description: Attempt to pull the image even if an older image exists locally. ++ schema: ++ type: string ++ - name: rm ++ in: query ++ description: Remove intermediate containers after a successful build. ++ schema: ++ type: boolean ++ default: true ++ - name: forcerm ++ in: query ++ description: Always remove intermediate containers, even upon failure. ++ schema: ++ type: boolean ++ default: false ++ - name: memory ++ in: query ++ description: Set memory limit for build. ++ schema: ++ type: integer ++ format: int64 ++ - name: memswap ++ in: query ++ description: Total memory (memory + swap). Set as `-1` to disable swap. ++ schema: ++ type: integer ++ format: int64 ++ - name: cpushares ++ in: query ++ description: CPU shares (relative weight). ++ schema: ++ type: integer ++ format: int64 ++ - name: cpusetcpus ++ in: query ++ description: CPUs in which to allow execution (e.g., `0-3`, `0,1`). ++ schema: ++ type: string ++ - name: cpuperiod ++ in: query ++ description: The length of a CPU period in microseconds. ++ schema: ++ type: integer ++ format: int64 ++ - name: cpuquota ++ in: query ++ description: Microseconds of CPU time that the container can get in a CPU period. ++ schema: ++ type: integer ++ format: int64 ++ - name: buildargs ++ in: query ++ description: | ++ JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values. + ++ For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded. + + [Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg) +- type: "string" +- - name: "shmsize" +- in: "query" +- description: "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB." +- type: "integer" +- format: "int64" +- - name: "squash" +- in: "query" +- description: "Squash the resulting images layers into a single layer. *(Experimental release only.)*" +- type: "boolean" +- - name: "labels" +- in: "query" +- description: "Arbitrary key/value labels to set on the image, as a JSON map of string pairs." +- type: "string" +- - name: "networkmode" +- in: "query" ++ schema: ++ type: string ++ - name: shmsize ++ in: query ++ description: Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. ++ schema: ++ type: integer ++ format: int64 ++ - name: squash ++ in: query ++ description: Squash the resulting images layers into a single layer. *(Experimental release only.)* ++ schema: ++ type: boolean ++ - name: labels ++ in: query ++ description: Arbitrary key/value labels to set on the image, as a JSON map of string pairs. ++ schema: ++ type: string ++ - name: networkmode ++ in: query + description: | + Sets the networking mode for the run commands during build. Supported + standard values are: `bridge`, `host`, `none`, and `container:`. + Any other value is taken as a custom network's name or ID to which this + container should connect to. +- type: "string" +- - name: "Content-type" +- in: "header" +- type: "string" +- enum: +- - "application/x-tar" +- default: "application/x-tar" +- - name: "X-Registry-Config" +- in: "header" ++ schema: ++ type: string ++ - name: Content-type ++ in: header ++ schema: ++ type: string ++ enum: ++ - application/x-tar ++ default: application/x-tar ++ - name: X-Registry-Config ++ in: header + description: | + This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to. + +@@ -9976,19 +2220,22 @@ + ``` + + Only the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API. +- type: "string" +- - name: "platform" +- in: "query" +- description: "Platform in the format os[/arch[/variant]]" +- type: "string" +- default: "" +- - name: "target" +- in: "query" +- description: "Target build stage" +- type: "string" +- default: "" +- - name: "outputs" +- in: "query" ++ schema: ++ type: string ++ - name: platform ++ in: query ++ description: Platform in the format os[/arch[/variant]] ++ schema: ++ type: string ++ default: "" ++ - name: target ++ in: query ++ description: Target build stage ++ schema: ++ type: string ++ default: "" ++ - name: outputs ++ in: query + description: | + BuildKit output configuration in the format of a stringified JSON array of objects. + Each object must have two top-level properties: `Type` and `Attrs`. +@@ -10001,59 +2248,76 @@ + ``` + [{"Type":"moby","Attrs":{"type":"image","force-compression":"true","compression":"zstd"}}] + ``` +- type: "string" +- default: "" +- - name: "version" +- in: "query" +- type: "string" +- default: "1" +- enum: ["1", "2"] ++ schema: ++ type: string ++ default: "" ++ - name: version ++ in: query + description: | + Version of the builder backend to use. + + - `1` is the first generation classic (deprecated) builder in the Docker daemon (default) + - `2` is [BuildKit](https://github.com/moby/buildkit) +- responses: +- 200: +- description: "no error" +- 400: +- description: "Bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Image"] ++ type: string ++ enum: ++ - "1" ++ - "2" ++ default: "1" ++ requestBody: ++ content: ++ application/octet-stream: ++ schema: ++ type: string ++ format: binary ++ description: "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." ++ responses: ++ "200": ++ description: no error ++ "400": ++ description: Bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Image + /build/prune: + post: +- summary: "Delete builder cache" +- produces: +- - "application/json" +- operationId: "BuildPrune" +- parameters: +- - name: "reserved-space" +- in: "query" +- description: "Amount of disk space in bytes to keep for cache" +- type: "integer" +- format: "int64" +- - name: "max-used-space" +- in: "query" +- description: "Maximum amount of disk space allowed to keep for cache" +- type: "integer" +- format: "int64" +- - name: "min-free-space" +- in: "query" +- description: "Target amount of free disk space after pruning" +- type: "integer" +- format: "int64" +- - name: "all" +- in: "query" +- type: "boolean" +- description: "Remove all types of build cache" +- - name: "filters" +- in: "query" +- type: "string" ++ summary: Delete builder cache ++ operationId: BuildPrune ++ parameters: ++ - name: reserved-space ++ in: query ++ description: Amount of disk space in bytes to keep for cache ++ schema: ++ type: integer ++ format: int64 ++ - name: max-used-space ++ in: query ++ description: Maximum amount of disk space allowed to keep for cache ++ schema: ++ type: integer ++ format: int64 ++ - name: min-free-space ++ in: query ++ description: Target amount of free disk space after pruning ++ schema: ++ type: integer ++ format: int64 ++ - name: all ++ in: query ++ description: Remove all types of build cache ++ schema: ++ type: boolean ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the list of build cache objects. +@@ -10068,51 +2332,58 @@ + - `inuse` + - `shared` + - `private` +- responses: +- 200: +- description: "No error" +- schema: +- type: "object" +- title: "BuildPruneResponse" +- properties: +- CachesDeleted: +- type: "array" +- items: +- description: "ID of build cache object" +- type: "string" +- SpaceReclaimed: +- description: "Disk space reclaimed in bytes" +- type: "integer" +- format: "int64" +- 500: +- description: "Server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Image"] ++ type: string ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: BuildPruneResponse ++ properties: ++ CachesDeleted: ++ type: array ++ items: ++ description: ID of build cache object ++ type: string ++ SpaceReclaimed: ++ description: Disk space reclaimed in bytes ++ type: integer ++ format: int64 ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Image ++ description: Delete builder cache. + /images/create: + post: +- summary: "Create an image" +- description: "Pull or import an image." +- operationId: "ImageCreate" +- consumes: +- - "text/plain" +- - "application/octet-stream" +- produces: +- - "application/json" +- responses: +- 200: +- description: "no error" +- 404: +- description: "repository does not exist or no read access" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ summary: Create an image ++ description: Pull or import an image. ++ operationId: ImageCreate ++ responses: ++ "200": ++ description: no error ++ "404": ++ description: repository does not exist or no read access ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "fromImage" +- in: "query" ++ - name: fromImage ++ in: query + description: | + Name of the image to pull. If the name includes a tag or digest, specific behavior applies: + +@@ -10120,39 +2391,39 @@ + - If both `fromImage` and `tag` are provided, `tag` takes precedence. + - If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored. + - If neither a tag nor digest is specified, all tags are pulled. +- type: "string" +- - name: "fromSrc" +- in: "query" +- description: "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image." +- type: "string" +- - name: "repo" +- in: "query" +- description: "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image." +- type: "string" +- - name: "tag" +- in: "query" +- description: "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled." +- type: "string" +- - name: "message" +- in: "query" +- description: "Set commit message for imported image." +- type: "string" +- - name: "inputImage" +- in: "body" +- description: "Image content if the value `-` has been specified in fromSrc query parameter" + schema: +- type: "string" +- required: false +- - name: "X-Registry-Auth" +- in: "header" ++ type: string ++ - name: fromSrc ++ in: query ++ description: Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image. ++ schema: ++ type: string ++ - name: repo ++ in: query ++ description: Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image. ++ schema: ++ type: string ++ - name: tag ++ in: query ++ description: Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled. ++ schema: ++ type: string ++ - name: message ++ in: query ++ description: Set commit message for imported image. ++ schema: ++ type: string ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" +- - name: "changes" +- in: "query" ++ schema: ++ type: string ++ - name: changes ++ in: query + description: | + Apply `Dockerfile` instructions to the image that is created, + for example: `changes=ENV DEBUG=true`. +@@ -10160,11 +2431,14 @@ + + Supported `Dockerfile` instructions: + `CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR` +- type: "array" +- items: +- type: "string" +- - name: "platform" +- in: "query" ++ style: form ++ explode: false ++ schema: ++ type: array ++ items: ++ type: string ++ - name: platform ++ in: query + description: | + Platform in the format os[/arch[/variant]]. + +@@ -10181,51 +2455,68 @@ + this option sets the platform information for the imported image. If + the option is not set, the host's native OS and Architecture are used + for the imported image. +- type: "string" +- default: "" +- tags: ["Image"] ++ schema: ++ type: string ++ default: "" ++ requestBody: ++ content: ++ text/plain: ++ schema: ++ type: string ++ application/octet-stream: ++ schema: ++ type: string ++ description: Image content if the value `-` has been specified in fromSrc query parameter ++ tags: ++ - Image + /images/{name}/json: + get: +- summary: "Inspect an image" +- description: "Return low-level information about an image." +- operationId: "ImageInspect" +- produces: +- - "application/json" +- responses: +- 200: +- description: "No error" +- schema: +- $ref: "#/definitions/ImageInspect" +- 404: +- description: "No such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such image: someimage (tag: latest)" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "Image name or id" +- type: "string" ++ summary: Inspect an image ++ description: Return low-level information about an image. ++ operationId: ImageInspect ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ImageInspect" ++ "404": ++ description: No such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such image: someimage (tag: latest)" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: Image name or id + required: true +- - name: "manifests" +- in: "query" ++ schema: ++ type: string ++ - name: manifests ++ in: query + description: |- + Include Manifests in the image summary. + + The `manifests` and `platform` options are mutually exclusive, and + an error is produced if both are set. +- type: "boolean" +- default: false + required: false +- - name: "platform" +- type: "string" +- in: "query" ++ schema: ++ type: boolean ++ default: false ++ - name: platform ++ in: query + description: |- + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, +@@ -10240,10 +2531,13 @@ + an error is produced if both are set. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- tags: ["Image"] ++ schema: ++ type: string ++ tags: ++ - Image + /images/{name}/attestations: + get: +- summary: "Get attestation statements for an image" ++ summary: Get attestation statements for an image + description: | + Return the in-toto attestation statements attached to the image for the + given platform. The daemon locates the attestation manifest(s) that +@@ -10252,47 +2546,52 @@ + metadata. + + If the image has no attestations an empty array is returned. +- operationId: "ImageAttestations" +- produces: +- - "application/json" ++ operationId: ImageAttestations + responses: +- 200: +- description: "No error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/AttestationStatement" +- 400: +- description: "Bad parameter (e.g. malformed `platform` value)" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "No such image, or no manifest found for the requested platform" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 501: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/AttestationStatement" ++ "400": ++ description: Bad parameter (e.g. malformed `platform` value) ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: No such image, or no manifest found for the requested platform ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "501": + description: | + The daemon's image backend does not support attestations. This + is returned by the legacy (graphdriver) image store, which does + not preserve OCI image indexes. +- schema: +- $ref: "#/definitions/ErrorResponse" ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" +- description: "Image name or id" +- type: "string" +- required: true +- - name: "platform" +- type: "array" +- items: +- type: "string" +- collectionFormat: "multi" +- in: "query" ++ - name: name ++ in: path ++ description: Image name or id ++ required: true ++ schema: ++ type: string ++ - name: platform ++ in: query + description: |- + JSON-encoded OCI platform to select the image variant whose + attestations to return. +@@ -10305,12 +2604,13 @@ + + Example: `{"os": "linux", "architecture": "amd64"}` + required: false +- - name: "type" +- type: "array" +- items: +- type: "string" +- collectionFormat: "multi" +- in: "query" ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ - name: type ++ in: query + description: |- + In-toto predicate type URI to filter returned statements. May be + repeated to accept any of several predicate types. If omitted, all +@@ -10318,71 +2618,84 @@ + + Example: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document` + required: false +- - name: "statement" +- type: "boolean" +- in: "query" ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ - name: statement ++ in: query + description: |- + Include the verbatim in-toto statement body in each returned + entry. Defaults to false; when omitted or false, only the + descriptor and predicate type are returned and statement blobs + are not read. +- default: false + required: false +- tags: ["Image"] ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Image + /images/{name}/history: + get: +- summary: "Get the history of an image" +- description: "Return parent layers of an image." +- operationId: "ImageHistory" +- produces: ["application/json"] +- responses: +- 200: +- description: "List of image layers" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/ImageHistoryResponseItem" +- examples: ++ summary: Get the history of an image ++ description: Return parent layers of an image. ++ operationId: ImageHistory ++ responses: ++ "200": ++ description: List of image layers ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/ImageHistoryResponseItem" ++ examples: ++ response: ++ value: ++ - Id: 3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710 ++ Created: 1398108230 ++ CreatedBy: "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /" ++ Tags: ++ - ubuntu:lucid ++ - ubuntu:10.04 ++ Size: 182964289 ++ Comment: "" ++ - Id: 6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8 ++ Created: 1398108222 ++ CreatedBy: "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/" ++ Tags: [] ++ Size: 0 ++ Comment: "" ++ - Id: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158 ++ Created: 1371157430 ++ CreatedBy: "" ++ Tags: ++ - scratch12:latest ++ - scratch:latest ++ Size: 0 ++ Comment: Imported from - ++ "404": ++ description: No such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: + application/json: +- - Id: "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710" +- Created: 1398108230 +- CreatedBy: "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /" +- Tags: +- - "ubuntu:lucid" +- - "ubuntu:10.04" +- Size: 182964289 +- Comment: "" +- - Id: "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8" +- Created: 1398108222 +- CreatedBy: "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/" +- Tags: [] +- Size: 0 +- Comment: "" +- - Id: "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158" +- Created: 1371157430 +- CreatedBy: "" +- Tags: +- - "scratch12:latest" +- - "scratch:latest" +- Size: 0 +- Comment: "Imported from -" +- 404: +- description: "No such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "Image name or ID" +- type: "string" +- required: true +- - name: "platform" +- type: "string" +- in: "query" ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: Image name or ID ++ required: true ++ schema: ++ type: string ++ - name: platform ++ in: query + description: | + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, +@@ -10394,10 +2707,13 @@ + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- tags: ["Image"] ++ schema: ++ type: string ++ tags: ++ - Image + /images/{name}/push: + post: +- summary: "Push an image" ++ summary: Push an image + description: | + Push an image to a registry. + +@@ -10406,23 +2722,25 @@ + `registry.example.com/myimage:latest`. + + The push is cancelled if the HTTP connection is closed. +- operationId: "ImagePush" +- consumes: +- - "application/octet-stream" +- responses: +- 200: +- description: "No error" +- 404: +- description: "No such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ operationId: ImagePush ++ responses: ++ "200": ++ description: No error ++ "404": ++ description: No such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + Name of the image to push. For example, `registry.example.com/myimage`. + The image must be present in the local image store with the same name. +@@ -10432,18 +2750,19 @@ + considered equivalent to `registry.example.com/myimage`. + + Use the `tag` parameter to specify the tag to push. +- type: "string" + required: true +- - name: "tag" +- in: "query" ++ schema: ++ type: string ++ - name: tag ++ in: query + description: | + Tag of the image to push. For example, `latest`. If no tag is provided, + all tags of the given image that are present in the local image store + are pushed. +- type: "string" +- - name: "platform" +- type: "string" +- in: "query" ++ schema: ++ type: string ++ - name: platform ++ in: query + description: | + JSON-encoded OCI platform to select the platform-variant to push. + If not provided, all available variants will attempt to be pushed. +@@ -10454,206 +2773,242 @@ + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- - name: "X-Registry-Auth" +- in: "header" ++ schema: ++ type: string ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" + required: true +- tags: ["Image"] ++ schema: ++ type: string ++ tags: ++ - Image + /images/{name}/tag: + post: +- summary: "Tag an image" ++ summary: Tag an image + description: | + Create a tag that refers to a source image. + + This creates an additional reference (tag) to the source image. The tag + can include a different repository name and/or tag. If the repository + or tag already exists, it will be overwritten. +- operationId: "ImageTag" ++ operationId: ImageTag + responses: +- 201: +- description: "No error" +- 400: +- description: "Bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "No such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 409: +- description: "Conflict" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "Image name or ID to tag." +- type: "string" +- required: true +- - name: "repo" +- in: "query" +- description: "The repository to tag in. For example, `someuser/someimage`." +- type: "string" +- - name: "tag" +- in: "query" +- description: "The name of the new tag." +- type: "string" +- tags: ["Image"] ++ "201": ++ description: No error ++ "400": ++ description: Bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: No such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "409": ++ description: Conflict ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: Image name or ID to tag. ++ required: true ++ schema: ++ type: string ++ - name: repo ++ in: query ++ description: The repository to tag in. For example, `someuser/someimage`. ++ schema: ++ type: string ++ - name: tag ++ in: query ++ description: The name of the new tag. ++ schema: ++ type: string ++ tags: ++ - Image + /images/{name}: + delete: +- summary: "Remove an image" ++ summary: Remove an image + description: | + Remove an image, along with any untagged parent images that were + referenced by that image. + + Images can't be removed if they have descendant images, are being + used by a running container or are being used by a build. +- operationId: "ImageDelete" +- produces: ["application/json"] ++ operationId: ImageDelete + responses: +- 200: +- description: "The image was deleted successfully" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/ImageDeleteResponseItem" +- examples: ++ "200": ++ description: The image was deleted successfully ++ content: + application/json: +- - Untagged: "3e2f21a89f" +- - Deleted: "3e2f21a89f" +- - Deleted: "53b4f83ac9" +- 404: +- description: "No such image" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 409: +- description: "Conflict" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "Image name or ID" +- type: "string" +- required: true +- - name: "force" +- in: "query" +- description: "Remove the image even if it is being used by stopped containers or has other tags" +- type: "boolean" +- default: false +- - name: "noprune" +- in: "query" +- description: "Do not delete untagged parent images" +- type: "boolean" +- default: false +- - name: "platforms" +- in: "query" ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/ImageDeleteResponseItem" ++ examples: ++ response: ++ value: ++ - Untagged: 3e2f21a89f ++ - Deleted: 3e2f21a89f ++ - Deleted: 53b4f83ac9 ++ "404": ++ description: No such image ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "409": ++ description: Conflict ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: Image name or ID ++ required: true ++ schema: ++ type: string ++ - name: force ++ in: query ++ description: Remove the image even if it is being used by stopped containers or has other tags ++ schema: ++ type: boolean ++ default: false ++ - name: noprune ++ in: query ++ description: Do not delete untagged parent images ++ schema: ++ type: boolean ++ default: false ++ - name: platforms ++ in: query + description: | + Select platform-specific content to delete. + Multiple values are accepted. + Each platform is a OCI platform encoded as a JSON string. +- type: "array" +- items: +- # This should be OCIPlatform +- # but $ref is not supported for array in query in Swagger 2.0 +- # $ref: "#/definitions/OCIPlatform" +- type: "string" +- tags: ["Image"] +- /images/search: +- get: +- summary: "Search images" +- description: "Search for an image on Docker Hub." +- operationId: "ImageSearch" +- produces: +- - "application/json" +- responses: +- 200: +- description: "No error" ++ style: form ++ explode: false + schema: +- type: "array" ++ type: array + items: +- type: "object" +- title: "ImageSearchResponseItem" +- properties: +- description: +- type: "string" +- is_official: +- type: "boolean" +- is_automated: +- description: | +- Whether this repository has automated builds enabled. ++ type: string ++ tags: ++ - Image ++ /images/search: ++ get: ++ summary: Search images ++ description: Search for an image on Docker Hub. ++ operationId: ImageSearch ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ type: object ++ title: ImageSearchResponseItem ++ properties: ++ description: ++ type: string ++ is_official: ++ type: boolean ++ is_automated: ++ description: | ++ Whether this repository has automated builds enabled. + +-


+ +- > **Deprecated**: This field is deprecated and will always be "false". +- type: "boolean" +- example: false +- name: +- type: "string" +- star_count: +- type: "integer" +- examples: +- application/json: +- - description: "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!" +- is_official: true +- is_automated: false +- name: "alpine" +- star_count: 10093 +- - description: "Busybox base image." +- is_official: true +- is_automated: false +- name: "Busybox base image." +- star_count: 3037 +- - description: "The PostgreSQL object-relational database system provides reliability and data integrity." +- is_official: true +- is_automated: false +- name: "postgres" +- star_count: 12408 +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "term" +- in: "query" +- description: "Term to search" +- type: "string" +- required: true +- - name: "limit" +- in: "query" +- description: "Maximum number of results to return" +- type: "integer" +- - name: "filters" +- in: "query" ++ ++ ++ ++ ++ > **Deprecated**: This field is deprecated and will always be "false". ++ type: boolean ++ example: false ++ name: ++ type: string ++ star_count: ++ type: integer ++ examples: ++ response: ++ value: ++ - description: A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size! ++ is_official: true ++ is_automated: false ++ name: alpine ++ star_count: 10093 ++ - description: Busybox base image. ++ is_official: true ++ is_automated: false ++ name: Busybox base image. ++ star_count: 3037 ++ - description: The PostgreSQL object-relational database system provides reliability and data integrity. ++ is_official: true ++ is_automated: false ++ name: postgres ++ star_count: 12408 ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: term ++ in: query ++ description: Term to search ++ required: true ++ schema: ++ type: string ++ - name: limit ++ in: query ++ description: Maximum number of results to return ++ schema: ++ type: integer ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters: + + - `is-official=(true|false)` + - `stars=` Matches images that has at least 'number' stars. +- type: "string" +- tags: ["Image"] ++ schema: ++ type: string ++ tags: ++ - Image + /images/prune: + post: +- summary: "Delete unused images" +- produces: +- - "application/json" +- operationId: "ImagePrune" ++ summary: Delete unused images ++ operationId: ImagePrune + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters: + +@@ -10662,109 +3017,125 @@ + (or `0`), all unused images are pruned. + - `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels. +- type: "string" +- responses: +- 200: +- description: "No error" + schema: +- type: "object" +- title: "ImagePruneResponse" +- properties: +- ImagesDeleted: +- description: "Images that were deleted" +- type: "array" +- items: +- $ref: "#/definitions/ImageDeleteResponseItem" +- SpaceReclaimed: +- description: "Disk space reclaimed in bytes" +- type: "integer" +- format: "int64" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Image"] ++ type: string ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: ImagePruneResponse ++ properties: ++ ImagesDeleted: ++ description: Images that were deleted ++ type: array ++ items: ++ $ref: "#/components/schemas/ImageDeleteResponseItem" ++ SpaceReclaimed: ++ description: Disk space reclaimed in bytes ++ type: integer ++ format: int64 ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Image ++ description: Delete unused images. + /auth: + post: +- summary: "Check auth configuration" ++ summary: Check auth configuration + description: | + Validate credentials for a registry and, if available, get an identity + token for accessing the registry without password. +- operationId: "SystemAuth" +- consumes: ["application/json"] +- produces: ["application/json"] +- responses: +- 200: +- description: "An identity token was generated successfully." +- schema: +- $ref: "#/definitions/AuthResponse" +- 204: +- description: "No error" +- 401: +- description: "Auth error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "authConfig" +- in: "body" +- description: "Authentication to check" +- schema: +- $ref: "#/definitions/AuthConfig" +- tags: ["System"] ++ operationId: SystemAuth ++ responses: ++ "200": ++ description: An identity token was generated successfully. ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/AuthResponse" ++ "204": ++ description: No error ++ "401": ++ description: Auth error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/AuthConfig" ++ description: Authentication to check ++ tags: ++ - System + /info: + get: +- summary: "Get system information" +- operationId: "SystemInfo" +- produces: +- - "application/json" +- responses: +- 200: +- description: "No error" +- schema: +- $ref: "#/definitions/SystemInfo" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["System"] ++ summary: Get system information ++ operationId: SystemInfo ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/SystemInfo" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - System ++ description: Get system information. + /version: + get: +- summary: "Get version" +- description: "Returns the version of Docker that is running and various information about the system that Docker is running on." +- operationId: "SystemVersion" +- produces: ["application/json"] +- responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/SystemVersion" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["System"] ++ summary: Get version ++ description: Returns the version of Docker that is running and various information about the system that Docker is running on. ++ operationId: SystemVersion ++ responses: ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/SystemVersion" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - System + /_ping: + get: +- summary: "Ping" +- description: "This is a dummy endpoint you can use to test if the server is accessible." +- operationId: "SystemPing" +- produces: ["text/plain"] ++ summary: Ping ++ description: This is a dummy endpoint you can use to test if the server is accessible. ++ operationId: SystemPing + responses: +- 200: +- description: "no error" +- schema: +- type: "string" +- example: "OK" ++ "200": ++ description: no error + headers: + Api-Version: +- type: "string" +- description: "Max API Version the server supports" ++ description: Max API Version the server supports ++ schema: ++ type: string + Builder-Version: +- type: "string" + description: | + Default version of docker image builder + +@@ -10775,137 +3146,179 @@ + + This value is a recommendation as advertised by the daemon, and + it is up to the client to choose which builder to use. +- default: "2" ++ schema: ++ type: string ++ default: "2" + Docker-Experimental: +- type: "boolean" +- description: "If the server is running with experimental mode enabled" ++ description: If the server is running with experimental mode enabled ++ schema: ++ type: boolean + Swarm: +- type: "string" +- enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"] + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. +- default: "inactive" ++ schema: ++ type: string ++ enum: ++ - inactive ++ - pending ++ - error ++ - locked ++ - active/worker ++ - active/manager ++ default: inactive + Cache-Control: +- type: "string" +- default: "no-cache, no-store, must-revalidate" ++ schema: ++ type: string ++ default: no-cache, no-store, must-revalidate + Pragma: +- type: "string" +- default: "no-cache" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ type: string ++ default: no-cache ++ content: ++ text/plain: ++ schema: ++ type: string ++ example: OK ++ "500": ++ description: server error + headers: + Cache-Control: +- type: "string" +- default: "no-cache, no-store, must-revalidate" ++ schema: ++ type: string ++ default: no-cache, no-store, must-revalidate + Pragma: +- type: "string" +- default: "no-cache" +- tags: ["System"] ++ schema: ++ type: string ++ default: no-cache ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - System + head: +- summary: "Ping" +- description: "This is a dummy endpoint you can use to test if the server is accessible." +- operationId: "SystemPingHead" +- produces: ["text/plain"] ++ summary: Ping ++ description: This is a dummy endpoint you can use to test if the server is accessible. ++ operationId: SystemPingHead + responses: +- 200: +- description: "no error" +- schema: +- type: "string" +- example: "(empty)" ++ "200": ++ description: no error + headers: + Api-Version: +- type: "string" +- description: "Max API Version the server supports" ++ description: Max API Version the server supports ++ schema: ++ type: string + Builder-Version: +- type: "string" +- description: "Default version of docker image builder" ++ description: Default version of docker image builder ++ schema: ++ type: string + Docker-Experimental: +- type: "boolean" +- description: "If the server is running with experimental mode enabled" ++ description: If the server is running with experimental mode enabled ++ schema: ++ type: boolean + Swarm: +- type: "string" +- enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"] + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. +- default: "inactive" ++ schema: ++ type: string ++ enum: ++ - inactive ++ - pending ++ - error ++ - locked ++ - active/worker ++ - active/manager ++ default: inactive + Cache-Control: +- type: "string" +- default: "no-cache, no-store, must-revalidate" ++ schema: ++ type: string ++ default: no-cache, no-store, must-revalidate + Pragma: +- type: "string" +- default: "no-cache" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["System"] ++ schema: ++ type: string ++ default: no-cache ++ "500": ++ description: server error ++ tags: ++ - System + /commit: + post: +- summary: "Create a new image from a container" +- operationId: "ImageCommit" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- responses: +- 201: +- description: "no error" +- schema: +- $ref: "#/definitions/IDResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "containerConfig" +- in: "body" +- description: "The container configuration" +- schema: +- $ref: "#/definitions/ContainerConfig" +- - name: "container" +- in: "query" +- description: "The ID or name of the container to commit" +- type: "string" +- - name: "repo" +- in: "query" +- description: "Repository name for the created image" +- type: "string" +- - name: "tag" +- in: "query" +- description: "Tag name for the create image" +- type: "string" +- - name: "comment" +- in: "query" +- description: "Commit message" +- type: "string" +- - name: "author" +- in: "query" +- description: "Author of the image (e.g., `John Hannibal Smith `)" +- type: "string" +- - name: "pause" +- in: "query" +- description: "Whether to pause the container before committing" +- type: "boolean" +- default: true +- - name: "changes" +- in: "query" ++ summary: Create a new image from a container ++ operationId: ImageCommit ++ responses: ++ "201": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/IDResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: container ++ in: query ++ description: The ID or name of the container to commit ++ schema: ++ type: string ++ - name: repo ++ in: query ++ description: Repository name for the created image ++ schema: ++ type: string ++ - name: tag ++ in: query ++ description: Tag name for the create image ++ schema: ++ type: string ++ - name: comment ++ in: query ++ description: Commit message ++ schema: ++ type: string ++ - name: author ++ in: query ++ description: Author of the image (e.g., `John Hannibal Smith `) ++ schema: ++ type: string ++ - name: pause ++ in: query ++ description: Whether to pause the container before committing ++ schema: ++ type: boolean ++ default: true ++ - name: changes ++ in: query + description: "`Dockerfile` instructions to apply while committing" +- type: "string" +- tags: ["Image"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ContainerConfig" ++ description: The container configuration ++ tags: ++ - Image ++ description: Create a new image from a container. + /events: + get: +- summary: "Monitor events" ++ summary: Monitor events + description: | + Stream real-time events from the server. + +@@ -10930,36 +3343,45 @@ + Configs report these events: `create`, `update`, and `remove` + + The Builder reports `prune` events +- +- operationId: "SystemEvents" +- produces: +- - "application/jsonl" +- - "application/x-ndjson" +- - "application/json-seq" +- responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/EventMessage" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "since" +- in: "query" +- description: "Show events created since this timestamp then stream new events." +- type: "string" +- - name: "until" +- in: "query" +- description: "Show events created until this timestamp then stop streaming." +- type: "string" +- - name: "filters" +- in: "query" ++ operationId: SystemEvents ++ responses: ++ "200": ++ description: no error ++ content: ++ application/jsonl: ++ schema: ++ $ref: "#/components/schemas/EventMessage" ++ application/x-ndjson: ++ schema: ++ $ref: "#/components/schemas/EventMessage" ++ application/json-seq: ++ schema: ++ $ref: "#/components/schemas/EventMessage" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: since ++ in: query ++ description: Show events created since this timestamp then stream new events. ++ schema: ++ type: string ++ - name: until ++ in: query ++ description: Show events created until this timestamp then stop streaming. ++ schema: ++ type: string ++ - name: filters ++ in: query + description: | + A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters: + +@@ -10977,51 +3399,78 @@ + - `service=` service name or ID + - `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config` + - `volume=` volume name +- type: "string" +- tags: ["System"] ++ schema: ++ type: string ++ tags: ++ - System + /system/df: + get: +- summary: "Get data usage information" +- operationId: "SystemDataUsage" ++ summary: Get data usage information ++ operationId: SystemDataUsage + responses: +- 200: +- description: "no error" +- schema: +- type: "object" +- title: "SystemDataUsageResponse" +- properties: +- ImageUsage: +- $ref: "#/definitions/ImagesDiskUsage" +- ContainerUsage: +- $ref: "#/definitions/ContainersDiskUsage" +- VolumeUsage: +- $ref: "#/definitions/VolumesDiskUsage" +- BuildCacheUsage: +- $ref: "#/definitions/BuildCacheDiskUsage" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: SystemDataUsageResponse ++ properties: ++ ImageUsage: ++ $ref: "#/components/schemas/ImagesDiskUsage" ++ ContainerUsage: ++ $ref: "#/components/schemas/ContainersDiskUsage" ++ VolumeUsage: ++ $ref: "#/components/schemas/VolumesDiskUsage" ++ BuildCacheUsage: ++ $ref: "#/components/schemas/BuildCacheDiskUsage" ++ text/plain: ++ schema: ++ type: object ++ title: SystemDataUsageResponse ++ properties: ++ ImageUsage: ++ $ref: "#/components/schemas/ImagesDiskUsage" ++ ContainerUsage: ++ $ref: "#/components/schemas/ContainersDiskUsage" ++ VolumeUsage: ++ $ref: "#/components/schemas/VolumesDiskUsage" ++ BuildCacheUsage: ++ $ref: "#/components/schemas/BuildCacheDiskUsage" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "type" +- in: "query" ++ - name: type ++ in: query + description: | + Object types, for which to compute and return data. +- type: "array" +- collectionFormat: multi +- items: +- type: "string" +- enum: ["container", "image", "volume", "build-cache"] +- - name: "verbose" +- in: "query" ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ enum: ++ - container ++ - image ++ - volume ++ - build-cache ++ - name: verbose ++ in: query + description: | + Show detailed information on space usage. +- type: "boolean" +- default: false +- tags: ["System"] ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - System ++ description: Get data usage information. + /images/{name}/get: + get: +- summary: "Export an image" ++ summary: Export an image + description: | + Get a tarball containing all images and metadata for a repository. + +@@ -11042,31 +3491,30 @@ + } + } + ``` +- operationId: "ImageGet" +- produces: +- - "application/x-tar" +- responses: +- 200: +- description: "no error" +- schema: +- type: "string" +- format: "binary" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "Image name or ID" +- type: "string" +- required: true +- - name: "platform" +- type: "array" +- items: +- type: "string" +- collectionFormat: "multi" +- in: "query" ++ operationId: ImageGet ++ responses: ++ "200": ++ description: no error ++ content: ++ application/x-tar: ++ schema: ++ type: string ++ format: binary ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: Image name or ID ++ required: true ++ schema: ++ type: string ++ - name: platform ++ in: query + description: | + JSON encoded OCI platform describing a platform which will be used + to select a platform-specific image to be saved if the image is +@@ -11074,10 +3522,16 @@ + If not provided, the full multi-platform image will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- tags: ["Image"] ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ tags: ++ - Image + /images/get: + get: +- summary: "Export several images" ++ summary: Export several images + description: | + Get a tarball containing all images and metadata for several image + repositories. +@@ -11089,32 +3543,33 @@ + file for this image ID. + + For details on the format, see the [export image endpoint](#operation/ImageGet). +- operationId: "ImageGetAll" +- produces: +- - "application/x-tar" +- responses: +- 200: +- description: "no error" +- schema: +- type: "string" +- format: "binary" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "names" +- in: "query" +- description: "Image names to filter by" +- type: "array" +- items: +- type: "string" +- - name: "platform" +- type: "array" +- items: +- type: "string" +- collectionFormat: "multi" +- in: "query" ++ operationId: ImageGetAll ++ responses: ++ "200": ++ description: no error ++ content: ++ application/x-tar: ++ schema: ++ type: string ++ format: binary ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: names ++ in: query ++ description: Image names to filter by ++ style: form ++ explode: false ++ schema: ++ type: array ++ items: ++ type: string ++ - name: platform ++ in: query + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to be saved if the image is +@@ -11122,44 +3577,39 @@ + will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- tags: ["Image"] ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ tags: ++ - Image + /images/load: + post: +- summary: "Import images" ++ summary: Import images + description: | + Load a set of images and tags into a repository. + + For details on the format, see the [export image endpoint](#operation/ImageGet). +- operationId: "ImageLoad" +- consumes: +- - "application/x-tar" +- produces: +- - "application/json" +- responses: +- 200: +- description: "no error" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "imagesTarball" +- in: "body" +- description: "Tar archive containing images" +- schema: +- type: "string" +- format: "binary" +- - name: "quiet" +- in: "query" +- description: "Suppress progress details during load." +- type: "boolean" +- default: false +- - name: "platform" +- type: "array" +- items: +- type: "string" +- collectionFormat: "multi" +- in: "query" ++ operationId: ImageLoad ++ responses: ++ "200": ++ description: no error ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: quiet ++ in: query ++ description: Suppress progress details during load. ++ schema: ++ type: boolean ++ default: false ++ - name: platform ++ in: query + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to load if the image is +@@ -11167,299 +3617,347 @@ + will be loaded. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` +- tags: ["Image"] ++ explode: true ++ schema: ++ type: array ++ items: ++ type: string ++ requestBody: ++ content: ++ application/x-tar: ++ schema: ++ type: string ++ format: binary ++ description: Tar archive containing images ++ tags: ++ - Image + /containers/{id}/exec: + post: +- summary: "Create an exec instance" +- description: "Run a command inside a running container." +- operationId: "ContainerExec" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- responses: +- 201: +- description: "no error" +- schema: +- $ref: "#/definitions/IDResponse" +- 404: +- description: "no such container" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such container: c2ada9df5af8" +- 409: +- description: "container is paused" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "execConfig" +- in: "body" +- description: "Exec configuration" +- schema: +- type: "object" +- title: "ExecConfig" +- properties: +- AttachStdin: +- type: "boolean" +- description: "Attach to `stdin` of the exec command." +- AttachStdout: +- type: "boolean" +- description: "Attach to `stdout` of the exec command." +- AttachStderr: +- type: "boolean" +- description: "Attach to `stderr` of the exec command." +- ConsoleSize: +- type: "array" +- description: "Initial console size, as an `[height, width]` array." +- x-nullable: true +- minItems: 2 +- maxItems: 2 +- items: +- type: "integer" +- minimum: 0 +- example: [80, 64] +- DetachKeys: +- type: "string" +- description: | +- Override the key sequence for detaching a container. Format is +- a single character `[a-Z]` or `ctrl-` where `` +- is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. +- Tty: +- type: "boolean" +- description: "Allocate a pseudo-TTY." +- Env: +- description: | +- A list of environment variables in the form `["VAR=value", ...]`. +- type: "array" +- items: +- type: "string" +- Cmd: +- type: "array" +- description: "Command to run, as a string or array of strings." +- items: +- type: "string" +- Privileged: +- type: "boolean" +- description: "Runs the exec process with extended privileges." +- default: false +- User: +- type: "string" +- description: | +- The user, and optionally, group to run the exec process inside +- the container. Format is one of: `user`, `user:group`, `uid`, +- or `uid:gid`. +- WorkingDir: +- type: "string" +- description: | +- The working directory for the exec process inside the container. +- example: +- AttachStdin: false +- AttachStdout: true +- AttachStderr: true +- DetachKeys: "ctrl-p,ctrl-q" +- Tty: false +- Cmd: +- - "date" +- Env: +- - "FOO=bar" +- - "BAZ=quux" +- required: true +- - name: "id" +- in: "path" +- description: "ID or name of container" +- type: "string" ++ summary: Create an exec instance ++ description: Run a command inside a running container. ++ operationId: ContainerExec ++ responses: ++ "201": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/IDResponse" ++ "404": ++ description: no such container ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such container: c2ada9df5af8" ++ "409": ++ description: container is paused ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: ID or name of container + required: true +- tags: ["Exec"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: ExecConfig ++ properties: ++ AttachStdin: ++ type: boolean ++ description: Attach to `stdin` of the exec command. ++ AttachStdout: ++ type: boolean ++ description: Attach to `stdout` of the exec command. ++ AttachStderr: ++ type: boolean ++ description: Attach to `stderr` of the exec command. ++ ConsoleSize: ++ type: ++ - array ++ - "null" ++ description: Initial console size, as an `[height, width]` array. ++ minItems: 2 ++ maxItems: 2 ++ items: ++ type: integer ++ minimum: 0 ++ example: ++ - 80 ++ - 64 ++ DetachKeys: ++ type: string ++ description: | ++ Override the key sequence for detaching a container. Format is ++ a single character `[a-Z]` or `ctrl-` where `` ++ is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. ++ Tty: ++ type: boolean ++ description: Allocate a pseudo-TTY. ++ Env: ++ description: | ++ A list of environment variables in the form `["VAR=value", ...]`. ++ type: array ++ items: ++ type: string ++ Cmd: ++ type: array ++ description: Command to run, as a string or array of strings. ++ items: ++ type: string ++ Privileged: ++ type: boolean ++ description: Runs the exec process with extended privileges. ++ default: false ++ User: ++ type: string ++ description: | ++ The user, and optionally, group to run the exec process inside ++ the container. Format is one of: `user`, `user:group`, `uid`, ++ or `uid:gid`. ++ WorkingDir: ++ type: string ++ description: | ++ The working directory for the exec process inside the container. ++ example: ++ AttachStdin: false ++ AttachStdout: true ++ AttachStderr: true ++ DetachKeys: ctrl-p,ctrl-q ++ Tty: false ++ Cmd: ++ - date ++ Env: ++ - FOO=bar ++ - BAZ=quux ++ description: Exec configuration ++ required: true ++ tags: ++ - Exec + /exec/{id}/start: + post: +- summary: "Start an exec instance" ++ summary: Start an exec instance + description: | + Starts a previously set up exec instance. If detach is true, this endpoint + returns immediately after starting the command. Otherwise, it sets up an + interactive session with the command. +- operationId: "ExecStart" +- consumes: +- - "application/json" +- produces: +- - "application/vnd.docker.raw-stream" +- - "application/vnd.docker.multiplexed-stream" +- responses: +- 200: +- description: "No error" +- 404: +- description: "No such exec instance" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 409: +- description: "Container is stopped or paused" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ operationId: ExecStart ++ responses: ++ "200": ++ description: No error ++ "404": ++ description: No such exec instance ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "409": ++ description: Container is stopped or paused ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "execStartConfig" +- in: "body" +- schema: +- type: "object" +- title: "ExecStartConfig" +- properties: +- Detach: +- type: "boolean" +- description: "Detach from the command." +- example: false +- Tty: +- type: "boolean" +- description: "Allocate a pseudo-TTY." +- example: true +- ConsoleSize: +- type: "array" +- description: "Initial console size, as an `[height, width]` array." +- x-nullable: true +- minItems: 2 +- maxItems: 2 +- items: +- type: "integer" +- minimum: 0 +- example: [80, 64] +- - name: "id" +- in: "path" +- description: "Exec instance ID" ++ - name: id ++ in: path ++ description: Exec instance ID + required: true +- type: "string" +- tags: ["Exec"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: ExecStartConfig ++ properties: ++ Detach: ++ type: boolean ++ description: Detach from the command. ++ example: false ++ Tty: ++ type: boolean ++ description: Allocate a pseudo-TTY. ++ example: true ++ ConsoleSize: ++ type: ++ - array ++ - "null" ++ description: Initial console size, as an `[height, width]` array. ++ minItems: 2 ++ maxItems: 2 ++ items: ++ type: integer ++ minimum: 0 ++ example: ++ - 80 ++ - 64 ++ tags: ++ - Exec + /exec/{id}/resize: + post: +- summary: "Resize an exec instance" ++ summary: Resize an exec instance + description: | + Resize the TTY session used by an exec instance. This endpoint only works + if `tty` was specified as part of creating and starting the exec instance. +- operationId: "ExecResize" ++ operationId: ExecResize + responses: +- 200: +- description: "No error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "No such exec instance" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "Exec instance ID" +- required: true +- type: "string" +- - name: "h" +- in: "query" +- required: true +- description: "Height of the TTY session in characters" +- type: "integer" +- - name: "w" +- in: "query" +- required: true +- description: "Width of the TTY session in characters" +- type: "integer" +- tags: ["Exec"] ++ "200": ++ description: No error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: No such exec instance ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: Exec instance ID ++ required: true ++ schema: ++ type: string ++ - name: h ++ in: query ++ required: true ++ description: Height of the TTY session in characters ++ schema: ++ type: integer ++ - name: w ++ in: query ++ required: true ++ description: Width of the TTY session in characters ++ schema: ++ type: integer ++ tags: ++ - Exec + /exec/{id}/json: + get: +- summary: "Inspect an exec instance" +- description: "Return low-level information about an exec instance." +- operationId: "ExecInspect" +- produces: +- - "application/json" +- responses: +- 200: +- description: "No error" +- schema: +- type: "object" +- title: "ExecInspectResponse" +- properties: +- CanRemove: +- type: "boolean" +- DetachKeys: +- type: "string" +- ID: +- type: "string" +- Running: +- type: "boolean" +- ExitCode: +- type: "integer" +- ProcessConfig: +- $ref: "#/definitions/ProcessConfig" +- OpenStdin: +- type: "boolean" +- OpenStderr: +- type: "boolean" +- OpenStdout: +- type: "boolean" +- ContainerID: +- type: "string" +- Pid: +- type: "integer" +- description: "The system process ID for the exec process." +- examples: +- application/json: +- CanRemove: false +- ContainerID: "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126" +- DetachKeys: "" +- ExitCode: 2 +- ID: "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b" +- OpenStderr: true +- OpenStdin: true +- OpenStdout: true +- ProcessConfig: +- arguments: +- - "-c" +- - "exit 2" +- entrypoint: "sh" +- privileged: false +- tty: true +- user: "1000" +- Running: false +- Pid: 42000 +- 404: +- description: "No such exec instance" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "Exec instance ID" ++ summary: Inspect an exec instance ++ description: Return low-level information about an exec instance. ++ operationId: ExecInspect ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: ExecInspectResponse ++ properties: ++ CanRemove: ++ type: boolean ++ DetachKeys: ++ type: string ++ ID: ++ type: string ++ Running: ++ type: boolean ++ ExitCode: ++ type: integer ++ ProcessConfig: ++ $ref: "#/components/schemas/ProcessConfig" ++ OpenStdin: ++ type: boolean ++ OpenStderr: ++ type: boolean ++ OpenStdout: ++ type: boolean ++ ContainerID: ++ type: string ++ Pid: ++ type: integer ++ description: The system process ID for the exec process. ++ examples: ++ response: ++ value: ++ CanRemove: false ++ ContainerID: b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126 ++ DetachKeys: "" ++ ExitCode: 2 ++ ID: f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b ++ OpenStderr: true ++ OpenStdin: true ++ OpenStdout: true ++ ProcessConfig: ++ arguments: ++ - -c ++ - exit 2 ++ entrypoint: sh ++ privileged: false ++ tty: true ++ user: "1000" ++ Running: false ++ Pid: 42000 ++ "404": ++ description: No such exec instance ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: Exec instance ID + required: true +- type: "string" +- tags: ["Exec"] +- ++ schema: ++ type: string ++ tags: ++ - Exec + /volumes: + get: +- summary: "List volumes" +- operationId: "VolumeList" +- produces: ["application/json"] ++ summary: List volumes ++ operationId: VolumeList + responses: +- 200: +- description: "Summary volume data that matches the query" +- schema: +- $ref: "#/definitions/VolumeListResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: Summary volume data that matches the query ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/VolumeListResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + JSON encoded value of the filters (a `map[string][]string`) to + process on the volumes list. Available filters: +@@ -11472,190 +3970,222 @@ + - `label=` or `label=:` Matches volumes based on + the presence of a `label` alone or a `label` and a value. + - `name=` Matches all or part of a volume name. +- type: "string" +- format: "json" +- tags: ["Volume"] +- ++ schema: ++ type: string ++ format: json ++ tags: ++ - Volume ++ description: List volumes. + /volumes/create: + post: +- summary: "Create a volume" +- operationId: "VolumeCreate" +- consumes: ["application/json"] +- produces: ["application/json"] ++ summary: Create a volume ++ operationId: VolumeCreate + responses: +- 201: +- description: "The volume was created successfully" +- schema: +- $ref: "#/definitions/Volume" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "volumeConfig" +- in: "body" +- required: true +- description: "Volume configuration" +- schema: +- $ref: "#/definitions/VolumeCreateRequest" +- tags: ["Volume"] +- ++ "201": ++ description: The volume was created successfully ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Volume" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/VolumeCreateRequest" ++ description: Volume configuration ++ required: true ++ tags: ++ - Volume ++ description: Create a volume. + /volumes/{name}: + get: +- summary: "Inspect a volume" +- operationId: "VolumeInspect" +- produces: ["application/json"] ++ summary: Inspect a volume ++ operationId: VolumeInspect + responses: +- 200: +- description: "No error" +- schema: +- $ref: "#/definitions/Volume" +- 404: +- description: "No such volume" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Volume" ++ "404": ++ description: No such volume ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + required: true +- description: "Volume name or ID" +- type: "string" +- tags: ["Volume"] +- ++ description: Volume name or ID ++ schema: ++ type: string ++ tags: ++ - Volume ++ description: Inspect a volume. + put: + summary: | + "Update a volume. Valid only for Swarm cluster volumes" +- operationId: "VolumeUpdate" +- consumes: ["application/json"] +- produces: ["application/json"] +- responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such volume" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- description: "The name or ID of the volume" +- type: "string" +- required: true +- - name: "body" +- in: "body" +- schema: +- # though the schema for is an object that contains only a +- # ClusterVolumeSpec, wrapping the ClusterVolumeSpec in this object +- # means that if, later on, we support things like changing the +- # labels, we can do so without duplicating that information to the +- # ClusterVolumeSpec. +- type: "object" +- description: "Volume configuration" +- properties: +- Spec: +- $ref: "#/definitions/ClusterVolumeSpec" +- description: | +- The spec of the volume to update. Currently, only Availability may +- change. All other fields must remain unchanged. +- - name: "version" +- in: "query" ++ operationId: VolumeUpdate ++ responses: ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such volume ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ description: The name or ID of the volume ++ required: true ++ schema: ++ type: string ++ - name: version ++ in: query + description: | + The version number of the volume being updated. This is required to + avoid conflicting writes. Found in the volume's `ClusterVolume` + field. +- type: "integer" +- format: "int64" + required: true +- tags: ["Volume"] +- ++ schema: ++ type: integer ++ format: int64 ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ description: Volume configuration ++ properties: ++ Spec: ++ $ref: "#/components/schemas/ClusterVolumeSpec" ++ description: | ++ The spec of the volume to update. Currently, only Availability may ++ change. All other fields must remain unchanged. ++ tags: ++ - Volume ++ description: |- ++ "Update a volume. Valid only for Swarm cluster volumes" ++ . + delete: +- summary: "Remove a volume" +- description: "Instruct the driver to remove the volume." +- operationId: "VolumeDelete" +- responses: +- 204: +- description: "The volume was removed" +- 404: +- description: "No such volume or volume driver" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 409: +- description: "Volume is in use and cannot be removed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "name" +- in: "path" +- required: true +- description: "Volume name or ID" +- type: "string" +- - name: "force" +- in: "query" +- description: "Force the removal of the volume" +- type: "boolean" +- default: false +- tags: ["Volume"] +- ++ summary: Remove a volume ++ description: Instruct the driver to remove the volume. ++ operationId: VolumeDelete ++ responses: ++ "204": ++ description: The volume was removed ++ "404": ++ description: No such volume or volume driver ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "409": ++ description: Volume is in use and cannot be removed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: name ++ in: path ++ required: true ++ description: Volume name or ID ++ schema: ++ type: string ++ - name: force ++ in: query ++ description: Force the removal of the volume ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Volume + /volumes/prune: + post: +- summary: "Delete unused volumes" +- produces: +- - "application/json" +- operationId: "VolumePrune" ++ summary: Delete unused volumes ++ operationId: VolumePrune + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels. + - `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes. +- type: "string" +- responses: +- 200: +- description: "No error" +- schema: +- type: "object" +- title: "VolumePruneResponse" +- properties: +- VolumesDeleted: +- description: "Volumes that were deleted" +- type: "array" +- items: +- type: "string" +- SpaceReclaimed: +- description: "Disk space reclaimed in bytes" +- type: "integer" +- format: "int64" +- 500: +- description: "Server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Volume"] ++ type: string ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: VolumePruneResponse ++ properties: ++ VolumesDeleted: ++ description: Volumes that were deleted ++ type: array ++ items: ++ type: string ++ SpaceReclaimed: ++ description: Disk space reclaimed in bytes ++ type: integer ++ format: int64 ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Volume ++ description: Delete unused volumes. + /networks: + get: +- summary: "List networks" ++ summary: List networks + description: | + Returns a list of networks. For details on the format, see the + [network inspect endpoint](#operation/NetworkInspect). +@@ -11663,77 +4193,79 @@ + Note that it uses a different, smaller representation of a network than + inspecting a single network. For example, the list of containers attached + to the network is not propagated in API versions 1.28 and up. +- operationId: "NetworkList" +- produces: +- - "application/json" ++ operationId: NetworkList + responses: +- 200: +- description: "No error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/NetworkSummary" +- examples: ++ "200": ++ description: No error ++ content: + application/json: +- - Name: "bridge" +- Id: "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566" +- Created: "2016-10-19T06:21:00.416543526Z" +- Scope: "local" +- Driver: "bridge" +- EnableIPv4: true +- EnableIPv6: false +- Internal: false +- Attachable: false +- Ingress: false +- IPAM: +- Driver: "default" +- Config: +- - +- Subnet: "172.17.0.0/16" +- Options: +- com.docker.network.bridge.default_bridge: "true" +- com.docker.network.bridge.enable_icc: "true" +- com.docker.network.bridge.enable_ip_masquerade: "true" +- com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" +- com.docker.network.bridge.name: "docker0" +- com.docker.network.driver.mtu: "1500" +- - Name: "none" +- Id: "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794" +- Created: "0001-01-01T00:00:00Z" +- Scope: "local" +- Driver: "null" +- EnableIPv4: false +- EnableIPv6: false +- Internal: false +- Attachable: false +- Ingress: false +- IPAM: +- Driver: "default" +- Config: [] +- Containers: {} +- Options: {} +- - Name: "host" +- Id: "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e" +- Created: "0001-01-01T00:00:00Z" +- Scope: "local" +- Driver: "host" +- EnableIPv4: false +- EnableIPv6: false +- Internal: false +- Attachable: false +- Ingress: false +- IPAM: +- Driver: "default" +- Config: [] +- Containers: {} +- Options: {} +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/NetworkSummary" ++ examples: ++ response: ++ value: ++ - Name: bridge ++ Id: f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566 ++ Created: 2016-10-19T06:21:00.416543526Z ++ Scope: local ++ Driver: bridge ++ EnableIPv4: true ++ EnableIPv6: false ++ Internal: false ++ Attachable: false ++ Ingress: false ++ IPAM: ++ Driver: default ++ Config: ++ - Subnet: 172.17.0.0/16 ++ Options: ++ com.docker.network.bridge.default_bridge: "true" ++ com.docker.network.bridge.enable_icc: "true" ++ com.docker.network.bridge.enable_ip_masquerade: "true" ++ com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 ++ com.docker.network.bridge.name: docker0 ++ com.docker.network.driver.mtu: "1500" ++ - Name: none ++ Id: e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794 ++ Created: 0001-01-01T00:00:00Z ++ Scope: local ++ Driver: "null" ++ EnableIPv4: false ++ EnableIPv6: false ++ Internal: false ++ Attachable: false ++ Ingress: false ++ IPAM: ++ Driver: default ++ Config: [] ++ Containers: {} ++ Options: {} ++ - Name: host ++ Id: 13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e ++ Created: 0001-01-01T00:00:00Z ++ Scope: local ++ Driver: host ++ EnableIPv4: false ++ EnableIPv6: false ++ Internal: false ++ Attachable: false ++ Ingress: false ++ IPAM: ++ Driver: default ++ Config: [] ++ Containers: {} ++ Options: {} ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + JSON encoded value of the filters (a `map[string][]string`) to process + on the networks list. +@@ -11750,315 +4282,365 @@ + - `name=` Matches all or part of a network name. + - `scope=["swarm"|"global"|"local"]` Filters networks by scope (`swarm`, `global`, or `local`). + - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. +- type: "string" +- tags: ["Network"] +- ++ schema: ++ type: string ++ tags: ++ - Network + /networks/{id}: + get: +- summary: "Inspect a network" +- operationId: "NetworkInspect" +- produces: +- - "application/json" +- responses: +- 200: +- description: "No error" +- schema: +- $ref: "#/definitions/NetworkInspect" +- 404: +- description: "Network not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "Network ID or name" +- required: true +- type: "string" +- - name: "verbose" +- in: "query" +- description: "Detailed inspect output for troubleshooting" +- type: "boolean" +- default: false +- - name: "scope" +- in: "query" +- description: "Filter the network by scope (swarm, global, or local)" +- type: "string" +- tags: ["Network"] +- +- delete: +- summary: "Remove a network" +- operationId: "NetworkDelete" ++ summary: Inspect a network ++ operationId: NetworkInspect + responses: +- 204: +- description: "No error" +- 403: +- description: "operation not supported for pre-defined networks" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such network" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "Network ID or name" ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/NetworkInspect" ++ "404": ++ description: Network not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: Network ID or name + required: true +- type: "string" +- tags: ["Network"] +- +- /networks/create: +- post: +- summary: "Create a network" +- operationId: "NetworkCreate" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- responses: +- 201: +- description: "Network created successfully" +- schema: +- $ref: "#/definitions/NetworkCreateResponse" +- 400: +- description: "bad parameter" + schema: +- $ref: "#/definitions/ErrorResponse" +- 403: +- description: | +- Forbidden operation. This happens when trying to create a network named after a pre-defined network, +- or when trying to create an overlay network on a daemon which is not part of a Swarm cluster. +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "plugin not found" ++ type: string ++ - name: verbose ++ in: query ++ description: Detailed inspect output for troubleshooting + schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" ++ type: boolean ++ default: false ++ - name: scope ++ in: query ++ description: Filter the network by scope (swarm, global, or local) + schema: +- $ref: "#/definitions/ErrorResponse" ++ type: string ++ tags: ++ - Network ++ description: Inspect a network. ++ delete: ++ summary: Remove a network ++ operationId: NetworkDelete ++ responses: ++ "204": ++ description: No error ++ "403": ++ description: operation not supported for pre-defined networks ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such network ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "networkConfig" +- in: "body" +- description: "Network configuration" ++ - name: id ++ in: path ++ description: Network ID or name + required: true + schema: +- type: "object" +- title: "NetworkCreateRequest" +- required: ["Name"] +- properties: +- Name: +- description: "The network's name." +- type: "string" +- example: "my_network" +- Driver: +- description: "Name of the network driver plugin to use." +- type: "string" +- default: "bridge" +- example: "bridge" +- Scope: +- description: | +- The level at which the network exists (e.g. `swarm` for cluster-wide +- or `local` for machine level). +- type: "string" +- Internal: +- description: "Restrict external access to the network." +- type: "boolean" +- Attachable: +- description: | +- Globally scoped network is manually attachable by regular +- containers from workers in swarm mode. +- type: "boolean" +- example: true +- Ingress: +- description: | +- Ingress network is the network which provides the routing-mesh +- in swarm mode. +- type: "boolean" +- example: false +- ConfigOnly: +- description: | +- Creates a config-only network. Config-only networks are placeholder +- networks for network configurations to be used by other networks. +- Config-only networks cannot be used directly to run containers +- or services. +- type: "boolean" +- default: false +- example: false +- ConfigFrom: +- description: | +- Specifies the source which will provide the configuration for +- this network. The specified network must be an existing +- config-only network; see ConfigOnly. +- $ref: "#/definitions/ConfigReference" +- IPAM: +- description: "Optional custom IP scheme for the network." +- $ref: "#/definitions/IPAM" +- EnableIPv4: +- description: "Enable IPv4 on the network." +- type: "boolean" +- example: true +- EnableIPv6: +- description: "Enable IPv6 on the network." +- type: "boolean" +- example: true +- Options: +- description: "Network specific options to be used by the drivers." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.docker.network.bridge.default_bridge: "true" +- com.docker.network.bridge.enable_icc: "true" +- com.docker.network.bridge.enable_ip_masquerade: "true" +- com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" +- com.docker.network.bridge.name: "docker0" +- com.docker.network.driver.mtu: "1500" +- Labels: +- description: "User-defined key/value metadata." +- type: "object" +- additionalProperties: +- type: "string" +- example: +- com.example.some-label: "some-value" +- com.example.some-other-label: "some-other-value" +- tags: ["Network"] +- ++ type: string ++ tags: ++ - Network ++ description: Remove a network. ++ /networks/create: ++ post: ++ summary: Create a network ++ operationId: NetworkCreate ++ responses: ++ "201": ++ description: Network created successfully ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/NetworkCreateResponse" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "403": ++ description: | ++ Forbidden operation. This happens when trying to create a network named after a pre-defined network, ++ or when trying to create an overlay network on a daemon which is not part of a Swarm cluster. ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: plugin not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: NetworkCreateRequest ++ required: ++ - Name ++ properties: ++ Name: ++ description: The network's name. ++ type: string ++ example: my_network ++ Driver: ++ description: Name of the network driver plugin to use. ++ type: string ++ default: bridge ++ example: bridge ++ Scope: ++ description: | ++ The level at which the network exists (e.g. `swarm` for cluster-wide ++ or `local` for machine level). ++ type: string ++ Internal: ++ description: Restrict external access to the network. ++ type: boolean ++ Attachable: ++ description: | ++ Globally scoped network is manually attachable by regular ++ containers from workers in swarm mode. ++ type: boolean ++ example: true ++ Ingress: ++ description: | ++ Ingress network is the network which provides the routing-mesh ++ in swarm mode. ++ type: boolean ++ example: false ++ ConfigOnly: ++ description: | ++ Creates a config-only network. Config-only networks are placeholder ++ networks for network configurations to be used by other networks. ++ Config-only networks cannot be used directly to run containers ++ or services. ++ type: boolean ++ default: false ++ example: false ++ ConfigFrom: ++ allOf: ++ - $ref: "#/components/schemas/ConfigReference" ++ - description: | ++ Specifies the source which will provide the configuration for ++ this network. The specified network must be an existing ++ config-only network; see ConfigOnly. ++ IPAM: ++ allOf: ++ - $ref: "#/components/schemas/IPAM" ++ - description: Optional custom IP scheme for the network. ++ EnableIPv4: ++ description: Enable IPv4 on the network. ++ type: boolean ++ example: true ++ EnableIPv6: ++ description: Enable IPv6 on the network. ++ type: boolean ++ example: true ++ Options: ++ description: Network specific options to be used by the drivers. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.docker.network.bridge.default_bridge: "true" ++ com.docker.network.bridge.enable_icc: "true" ++ com.docker.network.bridge.enable_ip_masquerade: "true" ++ com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 ++ com.docker.network.bridge.name: docker0 ++ com.docker.network.driver.mtu: "1500" ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ description: Network configuration ++ required: true ++ tags: ++ - Network ++ description: Create a network. + /networks/{id}/connect: + post: +- summary: "Connect a container to a network" +- description: "The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container" +- operationId: "NetworkConnect" +- consumes: +- - "application/json" +- responses: +- 200: +- description: "No error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 403: +- description: "Operation forbidden" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "Network or container not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "Network ID or name" +- required: true +- type: "string" +- - name: "container" +- in: "body" ++ summary: Connect a container to a network ++ description: The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container ++ operationId: NetworkConnect ++ responses: ++ "200": ++ description: No error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "403": ++ description: Operation forbidden ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: Network or container not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: Network ID or name + required: true + schema: +- $ref: "#/definitions/NetworkConnectRequest" +- tags: ["Network"] +- ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/NetworkConnectRequest" ++ required: true ++ tags: ++ - Network + /networks/{id}/disconnect: + post: +- summary: "Disconnect a container from a network" +- operationId: "NetworkDisconnect" +- consumes: +- - "application/json" ++ summary: Disconnect a container from a network ++ operationId: NetworkDisconnect + responses: +- 200: +- description: "No error" +- 403: +- description: "Operation not supported for swarm scoped networks" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "Network or container not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: No error ++ "403": ++ description: Operation not supported for swarm scoped networks ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: Network or container not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" +- description: "Network ID or name" +- required: true +- type: "string" +- - name: "container" +- in: "body" ++ - name: id ++ in: path ++ description: Network ID or name + required: true + schema: +- $ref: "#/definitions/NetworkDisconnectRequest" +- tags: ["Network"] ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/NetworkDisconnectRequest" ++ required: true ++ tags: ++ - Network ++ description: Disconnect a container from a network. + /networks/prune: + post: +- summary: "Delete unused networks" +- produces: +- - "application/json" +- operationId: "NetworkPrune" ++ summary: Delete unused networks ++ operationId: NetworkPrune + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels. +- type: "string" +- responses: +- 200: +- description: "No error" + schema: +- type: "object" +- title: "NetworkPruneResponse" +- properties: +- NetworksDeleted: +- description: "Networks that were deleted" +- type: "array" +- items: +- type: "string" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Network"] ++ type: string ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: NetworkPruneResponse ++ properties: ++ NetworksDeleted: ++ description: Networks that were deleted ++ type: array ++ items: ++ type: string ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Network ++ description: Delete unused networks. + /plugins: + get: +- summary: "List plugins" +- operationId: "PluginList" +- description: "Returns information about installed plugins." +- produces: ["application/json"] +- responses: +- 200: +- description: "No error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Plugin" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "filters" +- in: "query" +- type: "string" ++ summary: List plugins ++ operationId: PluginList ++ description: Returns information about installed plugins. ++ responses: ++ "200": ++ description: No error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Plugin" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the plugin list. +@@ -12067,396 +4649,469 @@ + + - `capability=` + - `enable=|` +- tags: ["Plugin"] +- ++ schema: ++ type: string ++ tags: ++ - Plugin + /plugins/privileges: + get: +- summary: "Get plugin privileges" +- operationId: "GetPluginPrivileges" ++ summary: Get plugin privileges ++ operationId: GetPluginPrivileges + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/PluginPrivilege" +- example: +- - Name: "network" +- Description: "" +- Value: +- - "host" +- - Name: "mount" +- Description: "" +- Value: +- - "/data" +- - Name: "device" +- Description: "" +- Value: +- - "/dev/cpu_dma_latency" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginPrivilege" ++ example: ++ - Name: network ++ Description: "" ++ Value: ++ - host ++ - Name: mount ++ Description: "" ++ Value: ++ - /data ++ - Name: device ++ Description: "" ++ Value: ++ - /dev/cpu_dma_latency ++ text/plain: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginPrivilege" ++ example: ++ - Name: network ++ Description: "" ++ Value: ++ - host ++ - Name: mount ++ Description: "" ++ Value: ++ - /data ++ - Name: device ++ Description: "" ++ Value: ++ - /dev/cpu_dma_latency ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "remote" +- in: "query" ++ - name: remote ++ in: query + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" ++ schema: ++ type: string + tags: +- - "Plugin" +- ++ - Plugin ++ description: Get plugin privileges. + /plugins/pull: + post: +- summary: "Install a plugin" +- operationId: "PluginPull" ++ summary: Install a plugin ++ operationId: PluginPull + description: | + Pulls and installs a plugin. After the plugin is installed, it can be + enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable). +- produces: +- - "application/json" + responses: +- 204: +- description: "no error" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "204": ++ description: no error ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "remote" +- in: "query" ++ - name: remote ++ in: query + description: | + Remote reference for plugin to install. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true +- type: "string" +- - name: "name" +- in: "query" ++ schema: ++ type: string ++ - name: name ++ in: query + description: | + Local name for the pulled plugin. + + The `:latest` tag is optional, and is used as the default if omitted. + required: false +- type: "string" +- - name: "X-Registry-Auth" +- in: "header" ++ schema: ++ type: string ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" +- - name: "body" +- in: "body" + schema: +- type: "array" +- items: +- $ref: "#/definitions/PluginPrivilege" +- example: +- - Name: "network" +- Description: "" +- Value: +- - "host" +- - Name: "mount" +- Description: "" +- Value: +- - "/data" +- - Name: "device" +- Description: "" +- Value: +- - "/dev/cpu_dma_latency" +- tags: ["Plugin"] ++ type: string ++ requestBody: ++ $ref: "#/components/requestBodies/PluginPrivilegeArray" ++ tags: ++ - Plugin + /plugins/{name}/json: + get: +- summary: "Inspect a plugin" +- operationId: "PluginInspect" ++ summary: Inspect a plugin ++ operationId: PluginInspect + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Plugin" +- 404: +- description: "plugin is not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Plugin" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/Plugin" ++ "404": ++ description: plugin is not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- tags: ["Plugin"] ++ schema: ++ type: string ++ tags: ++ - Plugin ++ description: Inspect a plugin. + /plugins/{name}: + delete: +- summary: "Remove a plugin" +- operationId: "PluginDelete" ++ summary: Remove a plugin ++ operationId: PluginDelete + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Plugin" +- 404: +- description: "plugin is not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Plugin" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/Plugin" ++ "404": ++ description: plugin is not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "force" +- in: "query" ++ schema: ++ type: string ++ - name: force ++ in: query + description: | + Disable the plugin before removing. This may result in issues if the + plugin is in use by a container. +- type: "boolean" +- default: false +- tags: ["Plugin"] ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Plugin ++ description: Remove a plugin. + /plugins/{name}/enable: + post: +- summary: "Enable a plugin" +- operationId: "PluginEnable" ++ summary: Enable a plugin ++ operationId: PluginEnable + responses: +- 200: +- description: "no error" +- 404: +- description: "plugin is not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ "404": ++ description: plugin is not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "timeout" +- in: "query" +- description: "Set the HTTP client timeout (in seconds)" +- type: "integer" +- default: 0 +- tags: ["Plugin"] ++ schema: ++ type: string ++ - name: timeout ++ in: query ++ description: Set the HTTP client timeout (in seconds) ++ schema: ++ type: integer ++ default: 0 ++ tags: ++ - Plugin ++ description: Enable a plugin. + /plugins/{name}/disable: + post: +- summary: "Disable a plugin" +- operationId: "PluginDisable" ++ summary: Disable a plugin ++ operationId: PluginDisable + responses: +- 200: +- description: "no error" +- 404: +- description: "plugin is not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ "404": ++ description: plugin is not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "force" +- in: "query" ++ schema: ++ type: string ++ - name: force ++ in: query + description: | + Force disable a plugin even if still in use. + required: false +- type: "boolean" +- tags: ["Plugin"] ++ schema: ++ type: boolean ++ tags: ++ - Plugin ++ description: Disable a plugin. + /plugins/{name}/upgrade: + post: +- summary: "Upgrade a plugin" +- operationId: "PluginUpgrade" ++ summary: Upgrade a plugin ++ operationId: PluginUpgrade + responses: +- 204: +- description: "no error" +- 404: +- description: "plugin not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "204": ++ description: no error ++ "404": ++ description: plugin not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "remote" +- in: "query" ++ schema: ++ type: string ++ - name: remote ++ in: query + description: | + Remote reference to upgrade to. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true +- type: "string" +- - name: "X-Registry-Auth" +- in: "header" ++ schema: ++ type: string ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" +- - name: "body" +- in: "body" + schema: +- type: "array" +- items: +- $ref: "#/definitions/PluginPrivilege" +- example: +- - Name: "network" +- Description: "" +- Value: +- - "host" +- - Name: "mount" +- Description: "" +- Value: +- - "/data" +- - Name: "device" +- Description: "" +- Value: +- - "/dev/cpu_dma_latency" +- tags: ["Plugin"] ++ type: string ++ requestBody: ++ $ref: "#/components/requestBodies/PluginPrivilegeArray" ++ tags: ++ - Plugin ++ description: Upgrade a plugin. + /plugins/create: + post: +- summary: "Create a plugin" +- operationId: "PluginCreate" +- consumes: +- - "application/x-tar" +- responses: +- 204: +- description: "no error" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ summary: Create a plugin ++ operationId: PluginCreate ++ responses: ++ "204": ++ description: no error ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "query" ++ - name: name ++ in: query + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "tarContext" +- in: "body" +- description: "Path to tar containing plugin rootfs and manifest" +- schema: +- type: "string" +- format: "binary" +- tags: ["Plugin"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/x-tar: ++ schema: ++ type: string ++ format: binary ++ description: Path to tar containing plugin rootfs and manifest ++ tags: ++ - Plugin ++ description: Create a plugin. + /plugins/{name}/push: + post: +- summary: "Push a plugin" +- operationId: "PluginPush" ++ summary: Push a plugin ++ operationId: PluginPush + description: | + Push a plugin to the registry. + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- responses: +- 200: +- description: "no error" +- 404: +- description: "plugin not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Plugin"] ++ type: string ++ responses: ++ "200": ++ description: no error ++ "404": ++ description: plugin not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Plugin + /plugins/{name}/set: + post: +- summary: "Configure a plugin" +- operationId: "PluginSet" +- consumes: +- - "application/json" ++ summary: Configure a plugin ++ operationId: PluginSet + parameters: +- - name: "name" +- in: "path" ++ - name: name ++ in: path + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true +- type: "string" +- - name: "body" +- in: "body" +- schema: +- type: "array" +- items: +- type: "string" +- example: ["DEBUG=1"] +- responses: +- 204: +- description: "No error" +- 404: +- description: "Plugin not installed" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "Server error" + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Plugin"] ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ type: string ++ example: ++ - DEBUG=1 ++ responses: ++ "204": ++ description: No error ++ "404": ++ description: Plugin not installed ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Plugin ++ description: Configure a plugin. + /nodes: + get: +- summary: "List nodes" +- operationId: "NodeList" ++ summary: List nodes ++ operationId: NodeList + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Node" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Node" ++ text/plain: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Node" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "filters" +- in: "query" ++ - name: filters ++ in: query + description: | + Filters to process on the nodes list, encoded as JSON (a `map[string][]string`). + +@@ -12467,468 +5122,736 @@ + - `name=` + - `node.label=` + - `role=`(`manager`|`worker`)` +- type: "string" +- tags: ["Node"] ++ schema: ++ type: string ++ tags: ++ - Node ++ description: List nodes. + /nodes/{id}: + get: +- summary: "Inspect a node" +- operationId: "NodeInspect" ++ summary: Inspect a node ++ operationId: NodeInspect + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Node" +- 404: +- description: "no such node" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Node" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/Node" ++ "404": ++ description: no such node ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" +- description: "The ID or name of the node" +- type: "string" ++ - name: id ++ in: path ++ description: The ID or name of the node + required: true +- tags: ["Node"] ++ schema: ++ type: string ++ tags: ++ - Node ++ description: Inspect a node. + delete: +- summary: "Delete a node" +- operationId: "NodeDelete" ++ summary: Delete a node ++ operationId: NodeDelete + responses: +- 200: +- description: "no error" +- 404: +- description: "no such node" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "The ID or name of the node" +- type: "string" +- required: true +- - name: "force" +- in: "query" +- description: "Force remove a node from the swarm" +- default: false +- type: "boolean" +- tags: ["Node"] ++ "200": ++ description: no error ++ "404": ++ description: no such node ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: The ID or name of the node ++ required: true ++ schema: ++ type: string ++ - name: force ++ in: query ++ description: Force remove a node from the swarm ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Node ++ description: Delete a node. + /nodes/{id}/update: + post: +- summary: "Update a node" +- operationId: "NodeUpdate" ++ summary: Update a node ++ operationId: NodeUpdate + responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such node" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "The ID of the node" +- type: "string" +- required: true +- - name: "body" +- in: "body" +- schema: +- $ref: "#/definitions/NodeSpec" +- - name: "version" +- in: "query" ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such node ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: The ID of the node ++ required: true ++ schema: ++ type: string ++ - name: version ++ in: query + description: | + The version number of the node object being updated. This is required + to avoid conflicting writes. +- type: "integer" +- format: "int64" + required: true +- tags: ["Node"] ++ schema: ++ type: integer ++ format: int64 ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/NodeSpec" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/NodeSpec" ++ tags: ++ - Node ++ description: Update a node. + /swarm: + get: +- summary: "Inspect swarm" +- operationId: "SwarmInspect" ++ summary: Inspect swarm ++ operationId: SwarmInspect + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Swarm" +- 404: +- description: "no such swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Swarm"] ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Swarm" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/Swarm" ++ "404": ++ description: no such swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Swarm ++ description: Inspect swarm. + /swarm/init: + post: +- summary: "Initialize a new swarm" +- operationId: "SwarmInit" +- produces: +- - "application/json" +- - "text/plain" ++ summary: Initialize a new swarm ++ operationId: SwarmInit + responses: +- 200: +- description: "no error" +- schema: +- description: "The node ID" +- type: "string" +- example: "7v2t30z9blmxuhnyo6s4cpenp" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is already part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "body" +- in: "body" +- required: true +- schema: +- type: "object" +- title: "SwarmInitRequest" +- properties: +- ListenAddr: +- description: | +- Listen address used for inter-manager communication, as well +- as determining the networking interface used for the VXLAN +- Tunnel Endpoint (VTEP). This can either be an address/port +- combination in the form `192.168.1.1:4567`, or an interface +- followed by a port number, like `eth0:4567`. If the port number +- is omitted, the default swarm listening port is used. +- type: "string" +- AdvertiseAddr: +- description: | +- Externally reachable address advertised to other nodes. This +- can either be an address/port combination in the form +- `192.168.1.1:4567`, or an interface followed by a port number, +- like `eth0:4567`. If the port number is omitted, the port +- number from the listen address is used. If `AdvertiseAddr` is +- not specified, it will be automatically detected when possible. +- type: "string" +- DataPathAddr: +- description: | +- Address or interface to use for data path traffic (format: +- ``), for example, `192.168.1.1`, or an interface, +- like `eth0`. If `DataPathAddr` is unspecified, the same address +- as `AdvertiseAddr` is used. +- +- The `DataPathAddr` specifies the address that global scope +- network drivers will publish towards other nodes in order to +- reach the containers running on this node. Using this parameter +- it is possible to separate the container data traffic from the +- management traffic of the cluster. +- type: "string" +- DataPathPort: +- description: | +- DataPathPort specifies the data path port number for data traffic. +- Acceptable port range is 1024 to 49151. +- if no port is set or is set to 0, default port 4789 will be used. +- type: "integer" +- format: "uint32" +- DefaultAddrPool: +- description: | +- Default Address Pool specifies default subnet pools for global +- scope networks. +- type: "array" +- items: +- type: "string" +- example: ["10.10.0.0/16", "20.20.0.0/16"] +- ForceNewCluster: +- description: "Force creation of a new swarm." +- type: "boolean" +- SubnetSize: +- description: | +- SubnetSize specifies the subnet size of the networks created +- from the default subnet pool. +- type: "integer" +- format: "uint32" +- Spec: +- $ref: "#/definitions/SwarmSpec" +- example: +- ListenAddr: "0.0.0.0:2377" +- AdvertiseAddr: "192.168.1.1:2377" +- DataPathPort: 4789 +- DefaultAddrPool: ["10.10.0.0/8", "20.20.0.0/8"] +- SubnetSize: 24 +- ForceNewCluster: false +- Spec: +- Orchestration: {} +- Raft: {} +- Dispatcher: {} +- CAConfig: {} +- EncryptionConfig: +- AutoLockManagers: false +- tags: ["Swarm"] ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ description: The node ID ++ type: string ++ example: 7v2t30z9blmxuhnyo6s4cpenp ++ text/plain: ++ schema: ++ description: The node ID ++ type: string ++ example: 7v2t30z9blmxuhnyo6s4cpenp ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is already part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: SwarmInitRequest ++ properties: ++ ListenAddr: ++ description: | ++ Listen address used for inter-manager communication, as well ++ as determining the networking interface used for the VXLAN ++ Tunnel Endpoint (VTEP). This can either be an address/port ++ combination in the form `192.168.1.1:4567`, or an interface ++ followed by a port number, like `eth0:4567`. If the port number ++ is omitted, the default swarm listening port is used. ++ type: string ++ AdvertiseAddr: ++ description: | ++ Externally reachable address advertised to other nodes. This ++ can either be an address/port combination in the form ++ `192.168.1.1:4567`, or an interface followed by a port number, ++ like `eth0:4567`. If the port number is omitted, the port ++ number from the listen address is used. If `AdvertiseAddr` is ++ not specified, it will be automatically detected when possible. ++ type: string ++ DataPathAddr: ++ description: | ++ Address or interface to use for data path traffic (format: ++ ``), for example, `192.168.1.1`, or an interface, ++ like `eth0`. If `DataPathAddr` is unspecified, the same address ++ as `AdvertiseAddr` is used. ++ ++ The `DataPathAddr` specifies the address that global scope ++ network drivers will publish towards other nodes in order to ++ reach the containers running on this node. Using this parameter ++ it is possible to separate the container data traffic from the ++ management traffic of the cluster. ++ type: string ++ DataPathPort: ++ description: | ++ DataPathPort specifies the data path port number for data traffic. ++ Acceptable port range is 1024 to 49151. ++ if no port is set or is set to 0, default port 4789 will be used. ++ type: integer ++ format: uint32 ++ DefaultAddrPool: ++ description: | ++ Default Address Pool specifies default subnet pools for global ++ scope networks. ++ type: array ++ items: ++ type: string ++ example: ++ - 10.10.0.0/16 ++ - 20.20.0.0/16 ++ ForceNewCluster: ++ description: Force creation of a new swarm. ++ type: boolean ++ SubnetSize: ++ description: | ++ SubnetSize specifies the subnet size of the networks created ++ from the default subnet pool. ++ type: integer ++ format: uint32 ++ Spec: ++ $ref: "#/components/schemas/SwarmSpec" ++ example: ++ ListenAddr: 0.0.0.0:2377 ++ AdvertiseAddr: 192.168.1.1:2377 ++ DataPathPort: 4789 ++ DefaultAddrPool: ++ - 10.10.0.0/8 ++ - 20.20.0.0/8 ++ SubnetSize: 24 ++ ForceNewCluster: false ++ Spec: ++ Orchestration: {} ++ Raft: {} ++ Dispatcher: {} ++ CAConfig: {} ++ EncryptionConfig: ++ AutoLockManagers: false ++ text/plain: ++ schema: ++ type: object ++ title: SwarmInitRequest ++ properties: ++ ListenAddr: ++ description: | ++ Listen address used for inter-manager communication, as well ++ as determining the networking interface used for the VXLAN ++ Tunnel Endpoint (VTEP). This can either be an address/port ++ combination in the form `192.168.1.1:4567`, or an interface ++ followed by a port number, like `eth0:4567`. If the port number ++ is omitted, the default swarm listening port is used. ++ type: string ++ AdvertiseAddr: ++ description: | ++ Externally reachable address advertised to other nodes. This ++ can either be an address/port combination in the form ++ `192.168.1.1:4567`, or an interface followed by a port number, ++ like `eth0:4567`. If the port number is omitted, the port ++ number from the listen address is used. If `AdvertiseAddr` is ++ not specified, it will be automatically detected when possible. ++ type: string ++ DataPathAddr: ++ description: | ++ Address or interface to use for data path traffic (format: ++ ``), for example, `192.168.1.1`, or an interface, ++ like `eth0`. If `DataPathAddr` is unspecified, the same address ++ as `AdvertiseAddr` is used. ++ ++ The `DataPathAddr` specifies the address that global scope ++ network drivers will publish towards other nodes in order to ++ reach the containers running on this node. Using this parameter ++ it is possible to separate the container data traffic from the ++ management traffic of the cluster. ++ type: string ++ DataPathPort: ++ description: | ++ DataPathPort specifies the data path port number for data traffic. ++ Acceptable port range is 1024 to 49151. ++ if no port is set or is set to 0, default port 4789 will be used. ++ type: integer ++ format: uint32 ++ DefaultAddrPool: ++ description: | ++ Default Address Pool specifies default subnet pools for global ++ scope networks. ++ type: array ++ items: ++ type: string ++ example: ++ - 10.10.0.0/16 ++ - 20.20.0.0/16 ++ ForceNewCluster: ++ description: Force creation of a new swarm. ++ type: boolean ++ SubnetSize: ++ description: | ++ SubnetSize specifies the subnet size of the networks created ++ from the default subnet pool. ++ type: integer ++ format: uint32 ++ Spec: ++ $ref: "#/components/schemas/SwarmSpec" ++ example: ++ ListenAddr: 0.0.0.0:2377 ++ AdvertiseAddr: 192.168.1.1:2377 ++ DataPathPort: 4789 ++ DefaultAddrPool: ++ - 10.10.0.0/8 ++ - 20.20.0.0/8 ++ SubnetSize: 24 ++ ForceNewCluster: false ++ Spec: ++ Orchestration: {} ++ Raft: {} ++ Dispatcher: {} ++ CAConfig: {} ++ EncryptionConfig: ++ AutoLockManagers: false ++ required: true ++ tags: ++ - Swarm ++ description: Initialize a new swarm. + /swarm/join: + post: +- summary: "Join an existing swarm" +- operationId: "SwarmJoin" ++ summary: Join an existing swarm ++ operationId: SwarmJoin + responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is already part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "body" +- in: "body" +- required: true +- schema: +- type: "object" +- title: "SwarmJoinRequest" +- properties: +- ListenAddr: +- description: | +- Listen address used for inter-manager communication if the node +- gets promoted to manager, as well as determining the networking +- interface used for the VXLAN Tunnel Endpoint (VTEP). This is +- required for joining a swarm. If the port number is omitted, +- the default swarm listening port is used. +- type: "string" +- AdvertiseAddr: +- description: | +- Externally reachable address advertised to other nodes. This +- can either be an address/port combination in the form +- `192.168.1.1:4567`, or an interface followed by a port number, +- like `eth0:4567`. If the port number is omitted, the port +- number from the listen address is used. If `AdvertiseAddr` is +- not specified, it will be automatically detected when possible. +- type: "string" +- DataPathAddr: +- description: | +- Address or interface to use for data path traffic (format: +- ``), for example, `192.168.1.1`, or an interface, +- like `eth0`. If `DataPathAddr` is unspecified, the same address +- as `AdvertiseAddr` is used. +- +- The `DataPathAddr` specifies the address that global scope +- network drivers will publish towards other nodes in order to +- reach the containers running on this node. Using this parameter +- it is possible to separate the container data traffic from the +- management traffic of the cluster. +- +- type: "string" +- RemoteAddrs: +- description: | +- Addresses of manager nodes already participating in the swarm. +- type: "array" +- items: +- type: "string" +- JoinToken: +- description: "Secret token for joining this swarm." +- type: "string" +- required: [ListenAddr, RemoteAddrs, JoinToken] +- example: +- ListenAddr: "0.0.0.0:2377" +- AdvertiseAddr: "192.168.1.1:2377" +- DataPathAddr: "192.168.1.1" +- RemoteAddrs: +- - "node1:2377" +- JoinToken: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" +- tags: ["Swarm"] ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is already part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: SwarmJoinRequest ++ properties: ++ ListenAddr: ++ description: | ++ Listen address used for inter-manager communication if the node ++ gets promoted to manager, as well as determining the networking ++ interface used for the VXLAN Tunnel Endpoint (VTEP). This is ++ required for joining a swarm. If the port number is omitted, ++ the default swarm listening port is used. ++ type: string ++ AdvertiseAddr: ++ description: | ++ Externally reachable address advertised to other nodes. This ++ can either be an address/port combination in the form ++ `192.168.1.1:4567`, or an interface followed by a port number, ++ like `eth0:4567`. If the port number is omitted, the port ++ number from the listen address is used. If `AdvertiseAddr` is ++ not specified, it will be automatically detected when possible. ++ type: string ++ DataPathAddr: ++ description: | ++ Address or interface to use for data path traffic (format: ++ ``), for example, `192.168.1.1`, or an interface, ++ like `eth0`. If `DataPathAddr` is unspecified, the same address ++ as `AdvertiseAddr` is used. ++ ++ The `DataPathAddr` specifies the address that global scope ++ network drivers will publish towards other nodes in order to ++ reach the containers running on this node. Using this parameter ++ it is possible to separate the container data traffic from the ++ management traffic of the cluster. ++ type: string ++ RemoteAddrs: ++ description: | ++ Addresses of manager nodes already participating in the swarm. ++ type: array ++ items: ++ type: string ++ JoinToken: ++ description: Secret token for joining this swarm. ++ type: string ++ required: ++ - ListenAddr ++ - RemoteAddrs ++ - JoinToken ++ example: ++ ListenAddr: 0.0.0.0:2377 ++ AdvertiseAddr: 192.168.1.1:2377 ++ DataPathAddr: 192.168.1.1 ++ RemoteAddrs: ++ - node1:2377 ++ JoinToken: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 ++ text/plain: ++ schema: ++ type: object ++ title: SwarmJoinRequest ++ properties: ++ ListenAddr: ++ description: | ++ Listen address used for inter-manager communication if the node ++ gets promoted to manager, as well as determining the networking ++ interface used for the VXLAN Tunnel Endpoint (VTEP). This is ++ required for joining a swarm. If the port number is omitted, ++ the default swarm listening port is used. ++ type: string ++ AdvertiseAddr: ++ description: | ++ Externally reachable address advertised to other nodes. This ++ can either be an address/port combination in the form ++ `192.168.1.1:4567`, or an interface followed by a port number, ++ like `eth0:4567`. If the port number is omitted, the port ++ number from the listen address is used. If `AdvertiseAddr` is ++ not specified, it will be automatically detected when possible. ++ type: string ++ DataPathAddr: ++ description: | ++ Address or interface to use for data path traffic (format: ++ ``), for example, `192.168.1.1`, or an interface, ++ like `eth0`. If `DataPathAddr` is unspecified, the same address ++ as `AdvertiseAddr` is used. ++ ++ The `DataPathAddr` specifies the address that global scope ++ network drivers will publish towards other nodes in order to ++ reach the containers running on this node. Using this parameter ++ it is possible to separate the container data traffic from the ++ management traffic of the cluster. ++ type: string ++ RemoteAddrs: ++ description: | ++ Addresses of manager nodes already participating in the swarm. ++ type: array ++ items: ++ type: string ++ JoinToken: ++ description: Secret token for joining this swarm. ++ type: string ++ required: ++ - ListenAddr ++ - RemoteAddrs ++ - JoinToken ++ example: ++ ListenAddr: 0.0.0.0:2377 ++ AdvertiseAddr: 192.168.1.1:2377 ++ DataPathAddr: 192.168.1.1 ++ RemoteAddrs: ++ - node1:2377 ++ JoinToken: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 ++ required: true ++ tags: ++ - Swarm ++ description: Join an existing swarm. + /swarm/leave: + post: +- summary: "Leave a swarm" +- operationId: "SwarmLeave" ++ summary: Leave a swarm ++ operationId: SwarmLeave + responses: +- 200: +- description: "no error" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "force" ++ - name: force + description: | + Force leave swarm, even if this is the last manager or that it will + break the cluster. +- in: "query" +- type: "boolean" +- default: false +- tags: ["Swarm"] ++ in: query ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Swarm ++ description: Leave a swarm. + /swarm/update: + post: +- summary: "Update a swarm" +- operationId: "SwarmUpdate" ++ summary: Update a swarm ++ operationId: SwarmUpdate + responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "body" +- in: "body" +- required: true +- schema: +- $ref: "#/definitions/SwarmSpec" +- - name: "version" +- in: "query" ++ - name: version ++ in: query + description: | + The version number of the swarm object being updated. This is + required to avoid conflicting writes. +- type: "integer" +- format: "int64" + required: true +- - name: "rotateWorkerToken" +- in: "query" +- description: "Rotate the worker join token." +- type: "boolean" +- default: false +- - name: "rotateManagerToken" +- in: "query" +- description: "Rotate the manager join token." +- type: "boolean" +- default: false +- - name: "rotateManagerUnlockKey" +- in: "query" +- description: "Rotate the manager unlock key." +- type: "boolean" +- default: false +- tags: ["Swarm"] ++ schema: ++ type: integer ++ format: int64 ++ - name: rotateWorkerToken ++ in: query ++ description: Rotate the worker join token. ++ schema: ++ type: boolean ++ default: false ++ - name: rotateManagerToken ++ in: query ++ description: Rotate the manager join token. ++ schema: ++ type: boolean ++ default: false ++ - name: rotateManagerUnlockKey ++ in: query ++ description: Rotate the manager unlock key. ++ schema: ++ type: boolean ++ default: false ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/SwarmSpec" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/SwarmSpec" ++ required: true ++ tags: ++ - Swarm ++ description: Update a swarm. + /swarm/unlockkey: + get: +- summary: "Get the unlock key" +- operationId: "SwarmUnlockkey" +- consumes: +- - "application/json" ++ summary: Get the unlock key ++ operationId: SwarmUnlockkey + responses: +- 200: +- description: "no error" +- schema: +- type: "object" +- title: "UnlockKeyResponse" +- properties: +- UnlockKey: +- description: "The swarm's unlock key." +- type: "string" +- example: +- UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Swarm"] ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: object ++ title: UnlockKeyResponse ++ properties: ++ UnlockKey: ++ description: The swarm's unlock key. ++ type: string ++ example: ++ UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 ++ text/plain: ++ schema: ++ type: object ++ title: UnlockKeyResponse ++ properties: ++ UnlockKey: ++ description: The swarm's unlock key. ++ type: string ++ example: ++ UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Swarm ++ description: Get the unlock key. + /swarm/unlock: + post: +- summary: "Unlock a locked manager" +- operationId: "SwarmUnlock" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- parameters: +- - name: "body" +- in: "body" +- required: true +- schema: +- type: "object" +- title: "SwarmUnlockRequest" +- properties: +- UnlockKey: +- description: "The swarm's unlock key." +- type: "string" +- example: +- UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" +- responses: +- 200: +- description: "no error" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Swarm"] ++ summary: Unlock a locked manager ++ operationId: SwarmUnlock ++ requestBody: ++ content: ++ application/json: ++ schema: ++ type: object ++ title: SwarmUnlockRequest ++ properties: ++ UnlockKey: ++ description: The swarm's unlock key. ++ type: string ++ example: ++ UnlockKey: SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8 ++ required: true ++ responses: ++ "200": ++ description: no error ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Swarm ++ description: Unlock a locked manager. + /services: + get: +- summary: "List services" +- operationId: "ServiceList" ++ summary: List services ++ operationId: ServiceList + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Service" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "filters" +- in: "query" +- type: "string" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Service" ++ text/plain: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Service" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the services list. +@@ -12939,265 +5862,276 @@ + - `label=` + - `mode=["replicated"|"global"]` + - `name=` +- - name: "status" +- in: "query" +- type: "boolean" ++ schema: ++ type: string ++ - name: status ++ in: query + description: | + Include service status, with count of running and desired tasks. +- tags: ["Service"] ++ schema: ++ type: boolean ++ tags: ++ - Service ++ description: List services. + /services/create: + post: +- summary: "Create a service" +- operationId: "ServiceCreate" +- consumes: +- - "application/json" +- produces: +- - "application/json" ++ summary: Create a service ++ operationId: ServiceCreate + responses: +- 201: +- description: "no error" +- schema: +- $ref: "#/definitions/ServiceCreateResponse" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 403: +- description: "network is not eligible for services" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 409: +- description: "name conflicts with an existing service" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "201": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ServiceCreateResponse" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "403": ++ description: network is not eligible for services ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "409": ++ description: name conflicts with an existing service ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "body" +- in: "body" +- required: true +- schema: +- allOf: +- - $ref: "#/definitions/ServiceSpec" +- - type: "object" +- example: +- Name: "web" +- TaskTemplate: +- ContainerSpec: +- Image: "nginx:alpine" +- Mounts: +- - +- ReadOnly: true +- Source: "web-data" +- Target: "/usr/share/nginx/html" +- Type: "volume" +- VolumeOptions: +- DriverConfig: {} +- Labels: +- com.example.something: "something-value" +- Hosts: ["10.10.10.10 host1", "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2"] +- User: "33" +- DNSConfig: +- Nameservers: ["8.8.8.8"] +- Search: ["example.org"] +- Options: ["timeout:3"] +- Secrets: +- - +- File: +- Name: "www.example.org.key" +- UID: "33" +- GID: "33" +- Mode: 384 +- SecretID: "fpjqlhnwb19zds35k8wn80lq9" +- SecretName: "example_org_domain_key" +- OomScoreAdj: 0 +- LogDriver: +- Name: "json-file" +- Options: +- max-file: "3" +- max-size: "10M" +- Placement: {} +- Resources: +- Limits: +- MemoryBytes: 104857600 +- Reservations: {} +- RestartPolicy: +- Condition: "on-failure" +- Delay: 10000000000 +- MaxAttempts: 10 +- Mode: +- Replicated: +- Replicas: 4 +- UpdateConfig: +- Parallelism: 2 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- RollbackConfig: +- Parallelism: 1 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- EndpointSpec: +- Ports: +- - +- Protocol: "tcp" +- PublishedPort: 8080 +- TargetPort: 80 +- Labels: +- foo: "bar" +- - name: "X-Registry-Auth" +- in: "header" ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" +- tags: ["Service"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/ServiceSpec" ++ - type: object ++ example: ++ Name: web ++ TaskTemplate: ++ ContainerSpec: ++ Image: nginx:alpine ++ Mounts: ++ - ReadOnly: true ++ Source: web-data ++ Target: /usr/share/nginx/html ++ Type: volume ++ VolumeOptions: ++ DriverConfig: {} ++ Labels: ++ com.example.something: something-value ++ Hosts: ++ - 10.10.10.10 host1 ++ - ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2 ++ User: "33" ++ DNSConfig: ++ Nameservers: ++ - 8.8.8.8 ++ Search: ++ - example.org ++ Options: ++ - timeout:3 ++ Secrets: ++ - File: ++ Name: www.example.org.key ++ UID: "33" ++ GID: "33" ++ Mode: 384 ++ SecretID: fpjqlhnwb19zds35k8wn80lq9 ++ SecretName: example_org_domain_key ++ OomScoreAdj: 0 ++ LogDriver: ++ Name: json-file ++ Options: ++ max-file: "3" ++ max-size: 10M ++ Placement: {} ++ Resources: ++ Limits: ++ MemoryBytes: 104857600 ++ Reservations: {} ++ RestartPolicy: ++ Condition: on-failure ++ Delay: 10000000000 ++ MaxAttempts: 10 ++ Mode: ++ Replicated: ++ Replicas: 4 ++ UpdateConfig: ++ Parallelism: 2 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ RollbackConfig: ++ Parallelism: 1 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ EndpointSpec: ++ Ports: ++ - Protocol: tcp ++ PublishedPort: 8080 ++ TargetPort: 80 ++ Labels: ++ foo: bar ++ required: true ++ tags: ++ - Service ++ description: Create a service. + /services/{id}: + get: +- summary: "Inspect a service" +- operationId: "ServiceInspect" ++ summary: Inspect a service ++ operationId: ServiceInspect + responses: +- 200: +- description: "no error" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Service" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/Service" ++ "404": ++ description: no such service ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: ID or name of service. ++ required: true + schema: +- $ref: "#/definitions/Service" +- 404: +- description: "no such service" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "ID or name of service." +- required: true +- type: "string" +- - name: "insertDefaults" +- in: "query" +- description: "Fill empty fields with default values." +- type: "boolean" +- default: false +- tags: ["Service"] ++ type: string ++ - name: insertDefaults ++ in: query ++ description: Fill empty fields with default values. ++ schema: ++ type: boolean ++ default: false ++ tags: ++ - Service ++ description: Inspect a service. + delete: +- summary: "Delete a service" +- operationId: "ServiceDelete" ++ summary: Delete a service ++ operationId: ServiceDelete + responses: +- 200: +- description: "no error" +- 404: +- description: "no such service" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "ID or name of service." ++ "200": ++ description: no error ++ "404": ++ description: no such service ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: ID or name of service. + required: true +- type: "string" +- tags: ["Service"] ++ schema: ++ type: string ++ tags: ++ - Service ++ description: Delete a service. + /services/{id}/update: + post: +- summary: "Update a service" +- operationId: "ServiceUpdate" +- consumes: ["application/json"] +- produces: ["application/json"] ++ summary: Update a service ++ operationId: ServiceUpdate + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/ServiceUpdateResponse" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such service" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ServiceUpdateResponse" ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such service ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" +- description: "ID or name of service." +- required: true +- type: "string" +- - name: "body" +- in: "body" ++ - name: id ++ in: path ++ description: ID or name of service. + required: true + schema: +- allOf: +- - $ref: "#/definitions/ServiceSpec" +- - type: "object" +- example: +- Name: "top" +- TaskTemplate: +- ContainerSpec: +- Image: "busybox" +- Args: +- - "top" +- OomScoreAdj: 0 +- Resources: +- Limits: {} +- Reservations: {} +- RestartPolicy: +- Condition: "any" +- MaxAttempts: 0 +- Placement: {} +- ForceUpdate: 0 +- Mode: +- Replicated: +- Replicas: 1 +- UpdateConfig: +- Parallelism: 2 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- RollbackConfig: +- Parallelism: 1 +- Delay: 1000000000 +- FailureAction: "pause" +- Monitor: 15000000000 +- MaxFailureRatio: 0.15 +- EndpointSpec: +- Mode: "vip" +- +- - name: "version" +- in: "query" ++ type: string ++ - name: version ++ in: query + description: | + The version number of the service object being updated. This is + required to avoid conflicting writes. +@@ -13205,247 +6139,321 @@ + service *before* the update. You can find the current version by + calling `GET /services/{id}` + required: true +- type: "integer" +- - name: "registryAuthFrom" +- in: "query" ++ schema: ++ type: integer ++ - name: registryAuthFrom ++ in: query + description: | + If the `X-Registry-Auth` header is not specified, this parameter + indicates where to find registry authorization credentials. +- type: "string" +- enum: ["spec", "previous-spec"] +- default: "spec" +- - name: "rollback" +- in: "query" ++ schema: ++ type: string ++ enum: ++ - spec ++ - previous-spec ++ default: spec ++ - name: rollback ++ in: query + description: | + Set to this parameter to `previous` to cause a server-side rollback + to the previous service spec. The supplied spec will be ignored in + this case. +- type: "string" +- - name: "X-Registry-Auth" +- in: "header" ++ schema: ++ type: string ++ - name: X-Registry-Auth ++ in: header + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. +- type: "string" +- +- tags: ["Service"] ++ schema: ++ type: string ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/ServiceSpec" ++ - type: object ++ example: ++ Name: top ++ TaskTemplate: ++ ContainerSpec: ++ Image: busybox ++ Args: ++ - top ++ OomScoreAdj: 0 ++ Resources: ++ Limits: {} ++ Reservations: {} ++ RestartPolicy: ++ Condition: any ++ MaxAttempts: 0 ++ Placement: {} ++ ForceUpdate: 0 ++ Mode: ++ Replicated: ++ Replicas: 1 ++ UpdateConfig: ++ Parallelism: 2 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ RollbackConfig: ++ Parallelism: 1 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ EndpointSpec: ++ Mode: vip ++ required: true ++ tags: ++ - Service ++ description: Update a service. + /services/{id}/logs: + get: +- summary: "Get service logs" ++ summary: Get service logs + description: | + Get `stdout` and `stderr` logs from a service. See also + [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. +- produces: +- - "application/vnd.docker.raw-stream" +- - "application/vnd.docker.multiplexed-stream" +- operationId: "ServiceLogs" +- responses: +- 200: +- description: "logs returned as a stream in response body" +- schema: +- type: "string" +- format: "binary" +- 404: +- description: "no such service" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such service: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID or name of the service" +- type: "string" +- - name: "details" +- in: "query" +- description: "Show service context and extra details provided to logs." +- type: "boolean" +- default: false +- - name: "follow" +- in: "query" +- description: "Keep connection after returning logs." +- type: "boolean" +- default: false +- - name: "stdout" +- in: "query" +- description: "Return logs from `stdout`" +- type: "boolean" +- default: false +- - name: "stderr" +- in: "query" +- description: "Return logs from `stderr`" +- type: "boolean" +- default: false +- - name: "since" +- in: "query" +- description: "Only return logs since this time, as a UNIX timestamp" +- type: "integer" +- default: 0 +- - name: "timestamps" +- in: "query" +- description: "Add timestamps to every log line" +- type: "boolean" +- default: false +- - name: "tail" +- in: "query" ++ operationId: ServiceLogs ++ responses: ++ "200": ++ description: logs returned as a stream in response body ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ type: string ++ format: binary ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ type: string ++ format: binary ++ "404": ++ description: no such service ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such service: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID or name of the service ++ schema: ++ type: string ++ - name: details ++ in: query ++ description: Show service context and extra details provided to logs. ++ schema: ++ type: boolean ++ default: false ++ - name: follow ++ in: query ++ description: Keep connection after returning logs. ++ schema: ++ type: boolean ++ default: false ++ - name: stdout ++ in: query ++ description: Return logs from `stdout` ++ schema: ++ type: boolean ++ default: false ++ - name: stderr ++ in: query ++ description: Return logs from `stderr` ++ schema: ++ type: boolean ++ default: false ++ - name: since ++ in: query ++ description: Only return logs since this time, as a UNIX timestamp ++ schema: ++ type: integer ++ default: 0 ++ - name: timestamps ++ in: query ++ description: Add timestamps to every log line ++ schema: ++ type: boolean ++ default: false ++ - name: tail ++ in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. +- type: "string" +- default: "all" +- tags: ["Service"] ++ schema: ++ type: string ++ default: all ++ tags: ++ - Service + /tasks: + get: +- summary: "List tasks" +- operationId: "TaskList" +- produces: +- - "application/json" ++ summary: List tasks ++ operationId: TaskList + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Task" +- example: +- - ID: "0kzzo1i0y4jz6027t0k7aezc7" +- Version: +- Index: 71 +- CreatedAt: "2016-06-07T21:07:31.171892745Z" +- UpdatedAt: "2016-06-07T21:07:31.376370513Z" +- Spec: +- ContainerSpec: +- Image: "redis" +- Resources: +- Limits: {} +- Reservations: {} +- RestartPolicy: +- Condition: "any" +- MaxAttempts: 0 +- Placement: {} +- ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" +- Slot: 1 +- NodeID: "60gvrl6tm78dmak4yl7srz94v" +- Status: +- Timestamp: "2016-06-07T21:07:31.290032978Z" +- State: "running" +- Message: "started" +- ContainerStatus: +- ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035" +- PID: 677 +- DesiredState: "running" +- NetworksAttachments: +- - Network: +- ID: "4qvuz4ko70xaltuqbt8956gd1" +- Version: +- Index: 18 +- CreatedAt: "2016-06-07T20:31:11.912919752Z" +- UpdatedAt: "2016-06-07T21:07:29.955277358Z" +- Spec: +- Name: "ingress" +- Labels: +- com.docker.swarm.internal: "true" +- DriverConfiguration: {} +- IPAMOptions: +- Driver: {} +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- DriverState: +- Name: "overlay" +- Options: +- com.docker.network.driver.overlay.vxlanid_list: "256" +- IPAMOptions: +- Driver: +- Name: "default" +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- Addresses: +- - "10.255.0.10/16" +- - ID: "1yljwbmlr8er2waf8orvqpwms" +- Version: +- Index: 30 +- CreatedAt: "2016-06-07T21:07:30.019104782Z" +- UpdatedAt: "2016-06-07T21:07:30.231958098Z" +- Name: "hopeful_cori" +- Spec: +- ContainerSpec: +- Image: "redis" +- Resources: +- Limits: {} +- Reservations: {} +- RestartPolicy: +- Condition: "any" +- MaxAttempts: 0 +- Placement: {} +- ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" +- Slot: 1 +- NodeID: "60gvrl6tm78dmak4yl7srz94v" +- Status: +- Timestamp: "2016-06-07T21:07:30.202183143Z" +- State: "shutdown" +- Message: "shutdown" +- ContainerStatus: +- ContainerID: "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" +- DesiredState: "shutdown" +- NetworksAttachments: +- - Network: +- ID: "4qvuz4ko70xaltuqbt8956gd1" +- Version: +- Index: 18 +- CreatedAt: "2016-06-07T20:31:11.912919752Z" +- UpdatedAt: "2016-06-07T21:07:29.955277358Z" +- Spec: +- Name: "ingress" +- Labels: +- com.docker.swarm.internal: "true" +- DriverConfiguration: {} +- IPAMOptions: +- Driver: {} +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- DriverState: +- Name: "overlay" +- Options: +- com.docker.network.driver.overlay.vxlanid_list: "256" +- IPAMOptions: +- Driver: +- Name: "default" +- Configs: +- - Subnet: "10.255.0.0/16" +- Gateway: "10.255.0.1" +- Addresses: +- - "10.255.0.5/16" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "filters" +- in: "query" +- type: "string" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Task" ++ example: ++ - ID: 0kzzo1i0y4jz6027t0k7aezc7 ++ Version: ++ Index: 71 ++ CreatedAt: 2016-06-07T21:07:31.171892745Z ++ UpdatedAt: 2016-06-07T21:07:31.376370513Z ++ Spec: ++ ContainerSpec: ++ Image: redis ++ Resources: ++ Limits: {} ++ Reservations: {} ++ RestartPolicy: ++ Condition: any ++ MaxAttempts: 0 ++ Placement: {} ++ ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz ++ Slot: 1 ++ NodeID: 60gvrl6tm78dmak4yl7srz94v ++ Status: ++ Timestamp: 2016-06-07T21:07:31.290032978Z ++ State: running ++ Message: started ++ ContainerStatus: ++ ContainerID: e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035 ++ PID: 677 ++ DesiredState: running ++ NetworksAttachments: ++ - Network: ++ ID: 4qvuz4ko70xaltuqbt8956gd1 ++ Version: ++ Index: 18 ++ CreatedAt: 2016-06-07T20:31:11.912919752Z ++ UpdatedAt: 2016-06-07T21:07:29.955277358Z ++ Spec: ++ Name: ingress ++ Labels: ++ com.docker.swarm.internal: "true" ++ DriverConfiguration: {} ++ IPAMOptions: ++ Driver: {} ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ DriverState: ++ Name: overlay ++ Options: ++ com.docker.network.driver.overlay.vxlanid_list: "256" ++ IPAMOptions: ++ Driver: ++ Name: default ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ Addresses: ++ - 10.255.0.10/16 ++ - ID: 1yljwbmlr8er2waf8orvqpwms ++ Version: ++ Index: 30 ++ CreatedAt: 2016-06-07T21:07:30.019104782Z ++ UpdatedAt: 2016-06-07T21:07:30.231958098Z ++ Name: hopeful_cori ++ Spec: ++ ContainerSpec: ++ Image: redis ++ Resources: ++ Limits: {} ++ Reservations: {} ++ RestartPolicy: ++ Condition: any ++ MaxAttempts: 0 ++ Placement: {} ++ ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz ++ Slot: 1 ++ NodeID: 60gvrl6tm78dmak4yl7srz94v ++ Status: ++ Timestamp: 2016-06-07T21:07:30.202183143Z ++ State: shutdown ++ Message: shutdown ++ ContainerStatus: ++ ContainerID: 1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213 ++ DesiredState: shutdown ++ NetworksAttachments: ++ - Network: ++ ID: 4qvuz4ko70xaltuqbt8956gd1 ++ Version: ++ Index: 18 ++ CreatedAt: 2016-06-07T20:31:11.912919752Z ++ UpdatedAt: 2016-06-07T21:07:29.955277358Z ++ Spec: ++ Name: ingress ++ Labels: ++ com.docker.swarm.internal: "true" ++ DriverConfiguration: {} ++ IPAMOptions: ++ Driver: {} ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ DriverState: ++ Name: overlay ++ Options: ++ com.docker.network.driver.overlay.vxlanid_list: "256" ++ IPAMOptions: ++ Driver: ++ Name: default ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ Addresses: ++ - 10.255.0.5/16 ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the tasks list. +@@ -13458,164 +6466,203 @@ + - `name=` + - `node=` + - `service=` +- tags: ["Task"] ++ schema: ++ type: string ++ tags: ++ - Task ++ description: List tasks. + /tasks/{id}: + get: +- summary: "Inspect a task" +- operationId: "TaskInspect" +- produces: +- - "application/json" +- responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Task" +- 404: +- description: "no such task" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "ID of the task" ++ summary: Inspect a task ++ operationId: TaskInspect ++ responses: ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/Task" ++ "404": ++ description: no such task ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: ID of the task + required: true +- type: "string" +- tags: ["Task"] ++ schema: ++ type: string ++ tags: ++ - Task ++ description: Inspect a task. + /tasks/{id}/logs: + get: +- summary: "Get task logs" ++ summary: Get task logs + description: | + Get `stdout` and `stderr` logs from a task. + See also [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. +- operationId: "TaskLogs" +- produces: +- - "application/vnd.docker.raw-stream" +- - "application/vnd.docker.multiplexed-stream" +- responses: +- 200: +- description: "logs returned as a stream in response body" +- schema: +- type: "string" +- format: "binary" +- 404: +- description: "no such task" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: +- application/json: +- message: "No such task: c2ada9df5af8" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- description: "ID of the task" +- type: "string" +- - name: "details" +- in: "query" +- description: "Show task context and extra details provided to logs." +- type: "boolean" +- default: false +- - name: "follow" +- in: "query" +- description: "Keep connection after returning logs." +- type: "boolean" +- default: false +- - name: "stdout" +- in: "query" +- description: "Return logs from `stdout`" +- type: "boolean" +- default: false +- - name: "stderr" +- in: "query" +- description: "Return logs from `stderr`" +- type: "boolean" +- default: false +- - name: "since" +- in: "query" +- description: "Only return logs since this time, as a UNIX timestamp" +- type: "integer" +- default: 0 +- - name: "timestamps" +- in: "query" +- description: "Add timestamps to every log line" +- type: "boolean" +- default: false +- - name: "tail" +- in: "query" ++ operationId: TaskLogs ++ responses: ++ "200": ++ description: logs returned as a stream in response body ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ type: string ++ format: binary ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ type: string ++ format: binary ++ "404": ++ description: no such task ++ content: ++ application/vnd.docker.raw-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/vnd.docker.multiplexed-stream: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ application/json: ++ examples: ++ response: ++ value: ++ message: "No such task: c2ada9df5af8" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID of the task ++ schema: ++ type: string ++ - name: details ++ in: query ++ description: Show task context and extra details provided to logs. ++ schema: ++ type: boolean ++ default: false ++ - name: follow ++ in: query ++ description: Keep connection after returning logs. ++ schema: ++ type: boolean ++ default: false ++ - name: stdout ++ in: query ++ description: Return logs from `stdout` ++ schema: ++ type: boolean ++ default: false ++ - name: stderr ++ in: query ++ description: Return logs from `stderr` ++ schema: ++ type: boolean ++ default: false ++ - name: since ++ in: query ++ description: Only return logs since this time, as a UNIX timestamp ++ schema: ++ type: integer ++ default: 0 ++ - name: timestamps ++ in: query ++ description: Add timestamps to every log line ++ schema: ++ type: boolean ++ default: false ++ - name: tail ++ in: query + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. +- type: "string" +- default: "all" +- tags: ["Task"] ++ schema: ++ type: string ++ default: all ++ tags: ++ - Task + /secrets: + get: +- summary: "List secrets" +- operationId: "SecretList" +- produces: +- - "application/json" ++ summary: List secrets ++ operationId: SecretList + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Secret" +- example: +- - ID: "blt1owaxmitz71s9v5zh81zun" +- Version: +- Index: 85 +- CreatedAt: "2017-07-20T13:55:28.678958722Z" +- UpdatedAt: "2017-07-20T13:55:28.678958722Z" +- Spec: +- Name: "mysql-passwd" +- Labels: +- some.label: "some.value" +- Driver: +- Name: "secret-bucket" +- Options: +- OptionA: "value for driver option A" +- OptionB: "value for driver option B" +- - ID: "ktnbjxoalbkvbvedmg1urrz8h" +- Version: +- Index: 11 +- CreatedAt: "2016-11-05T01:20:17.327670065Z" +- UpdatedAt: "2016-11-05T01:20:17.327670065Z" +- Spec: +- Name: "app-dev.crt" +- Labels: +- foo: "bar" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "filters" +- in: "query" +- type: "string" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Secret" ++ example: ++ - ID: blt1owaxmitz71s9v5zh81zun ++ Version: ++ Index: 85 ++ CreatedAt: 2017-07-20T13:55:28.678958722Z ++ UpdatedAt: 2017-07-20T13:55:28.678958722Z ++ Spec: ++ Name: mysql-passwd ++ Labels: ++ some.label: some.value ++ Driver: ++ Name: secret-bucket ++ Options: ++ OptionA: value for driver option A ++ OptionB: value for driver option B ++ - ID: ktnbjxoalbkvbvedmg1urrz8h ++ Version: ++ Index: 11 ++ CreatedAt: 2016-11-05T01:20:17.327670065Z ++ UpdatedAt: 2016-11-05T01:20:17.327670065Z ++ Spec: ++ Name: app-dev.crt ++ Labels: ++ foo: bar ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the secrets list. +@@ -13626,203 +6673,248 @@ + - `label= or label==value` + - `name=` matches all or part of a secret name (prefix match) + - `names=` matches a secret name (exact match) +- tags: ["Secret"] ++ schema: ++ type: string ++ tags: ++ - Secret ++ description: List secrets. + /secrets/create: + post: +- summary: "Create a secret" +- operationId: "SecretCreate" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- responses: +- 201: +- description: "no error" +- schema: +- $ref: "#/definitions/IDResponse" +- 409: +- description: "name conflicts with an existing object" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "body" +- in: "body" +- schema: +- allOf: +- - $ref: "#/definitions/SecretSpec" +- - type: "object" +- example: +- Name: "app-key.crt" +- Labels: +- foo: "bar" +- Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" +- Driver: +- Name: "secret-bucket" +- Options: +- OptionA: "value for driver option A" +- OptionB: "value for driver option B" +- tags: ["Secret"] ++ summary: Create a secret ++ operationId: SecretCreate ++ responses: ++ "201": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/IDResponse" ++ "409": ++ description: name conflicts with an existing object ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/SecretSpec" ++ - type: object ++ example: ++ Name: app-key.crt ++ Labels: ++ foo: bar ++ Data: VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg== ++ Driver: ++ Name: secret-bucket ++ Options: ++ OptionA: value for driver option A ++ OptionB: value for driver option B ++ tags: ++ - Secret ++ description: Create a secret. + /secrets/{id}: + get: +- summary: "Inspect a secret" +- operationId: "SecretInspect" +- produces: +- - "application/json" ++ summary: Inspect a secret ++ operationId: SecretInspect + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Secret" +- examples: ++ "200": ++ description: no error ++ content: + application/json: +- ID: "ktnbjxoalbkvbvedmg1urrz8h" +- Version: +- Index: 11 +- CreatedAt: "2016-11-05T01:20:17.327670065Z" +- UpdatedAt: "2016-11-05T01:20:17.327670065Z" +- Spec: +- Name: "app-dev.crt" +- Labels: +- foo: "bar" +- Driver: +- Name: "secret-bucket" +- Options: +- OptionA: "value for driver option A" +- OptionB: "value for driver option B" +- +- 404: +- description: "secret not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/Secret" ++ examples: ++ response: ++ value: ++ ID: ktnbjxoalbkvbvedmg1urrz8h ++ Version: ++ Index: 11 ++ CreatedAt: 2016-11-05T01:20:17.327670065Z ++ UpdatedAt: 2016-11-05T01:20:17.327670065Z ++ Spec: ++ Name: app-dev.crt ++ Labels: ++ foo: bar ++ Driver: ++ Name: secret-bucket ++ Options: ++ OptionA: value for driver option A ++ OptionB: value for driver option B ++ "404": ++ description: secret not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "id" +- in: "path" ++ - name: id ++ in: path + required: true +- type: "string" +- description: "ID of the secret" +- tags: ["Secret"] ++ description: ID of the secret ++ schema: ++ type: string ++ tags: ++ - Secret ++ description: Inspect a secret. + delete: +- summary: "Delete a secret" +- operationId: "SecretDelete" +- produces: +- - "application/json" +- responses: +- 204: +- description: "no error" +- 404: +- description: "secret not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- type: "string" +- description: "ID of the secret" +- tags: ["Secret"] ++ summary: Delete a secret ++ operationId: SecretDelete ++ responses: ++ "204": ++ description: no error ++ "404": ++ description: secret not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID of the secret ++ schema: ++ type: string ++ tags: ++ - Secret ++ description: Delete a secret. + /secrets/{id}/update: + post: +- summary: "Update a Secret" +- operationId: "SecretUpdate" ++ summary: Update a Secret ++ operationId: SecretUpdate + responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such secret" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "The ID or name of the secret" +- type: "string" +- required: true +- - name: "body" +- in: "body" +- schema: +- $ref: "#/definitions/SecretSpec" +- description: | +- The spec of the secret to update. Currently, only the Labels field +- can be updated. All other fields must remain unchanged from the +- [SecretInspect endpoint](#operation/SecretInspect) response values. +- - name: "version" +- in: "query" ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such secret ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: The ID or name of the secret ++ required: true ++ schema: ++ type: string ++ - name: version ++ in: query + description: | + The version number of the secret object being updated. This is + required to avoid conflicting writes. +- type: "integer" +- format: "int64" + required: true +- tags: ["Secret"] ++ schema: ++ type: integer ++ format: int64 ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/SecretSpec" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/SecretSpec" ++ description: | ++ The spec of the secret to update. Currently, only the Labels field ++ can be updated. All other fields must remain unchanged from the ++ [SecretInspect endpoint](#operation/SecretInspect) response values. ++ tags: ++ - Secret ++ description: Update a Secret. + /configs: + get: +- summary: "List configs" +- operationId: "ConfigList" +- produces: +- - "application/json" ++ summary: List configs ++ operationId: ConfigList + responses: +- 200: +- description: "no error" +- schema: +- type: "array" +- items: +- $ref: "#/definitions/Config" +- example: +- - ID: "ktnbjxoalbkvbvedmg1urrz8h" +- Version: +- Index: 11 +- CreatedAt: "2016-11-05T01:20:17.327670065Z" +- UpdatedAt: "2016-11-05T01:20:17.327670065Z" +- Spec: +- Name: "server.conf" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "filters" +- in: "query" +- type: "string" ++ "200": ++ description: no error ++ content: ++ application/json: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/Config" ++ example: ++ - ID: ktnbjxoalbkvbvedmg1urrz8h ++ Version: ++ Index: 11 ++ CreatedAt: 2016-11-05T01:20:17.327670065Z ++ UpdatedAt: 2016-11-05T01:20:17.327670065Z ++ Spec: ++ Name: server.conf ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: filters ++ in: query + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the configs list. +@@ -13832,191 +6924,241 @@ + - `id=` + - `label= or label==value` + - `name=` matches all or part of a config name (prefix match) +- tags: ["Config"] ++ schema: ++ type: string ++ tags: ++ - Config ++ description: List configs. + /configs/create: + post: +- summary: "Create a config" +- operationId: "ConfigCreate" +- consumes: +- - "application/json" +- produces: +- - "application/json" +- responses: +- 201: +- description: "no error" +- schema: +- $ref: "#/definitions/IDResponse" +- 409: +- description: "name conflicts with an existing object" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "body" +- in: "body" +- schema: +- allOf: +- - $ref: "#/definitions/ConfigSpec" +- - type: "object" +- example: +- Name: "server.conf" +- Labels: +- foo: "bar" +- Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" +- tags: ["Config"] ++ summary: Create a config ++ operationId: ConfigCreate ++ responses: ++ "201": ++ description: no error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/IDResponse" ++ "409": ++ description: name conflicts with an existing object ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ requestBody: ++ content: ++ application/json: ++ schema: ++ allOf: ++ - $ref: "#/components/schemas/ConfigSpec" ++ - type: object ++ example: ++ Name: server.conf ++ Labels: ++ foo: bar ++ Data: VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg== ++ tags: ++ - Config ++ description: Create a config. + /configs/{id}: + get: +- summary: "Inspect a config" +- operationId: "ConfigInspect" +- produces: +- - "application/json" ++ summary: Inspect a config ++ operationId: ConfigInspect + responses: +- 200: +- description: "no error" +- schema: +- $ref: "#/definitions/Config" +- examples: ++ "200": ++ description: no error ++ content: + application/json: +- ID: "ktnbjxoalbkvbvedmg1urrz8h" +- Version: +- Index: 11 +- CreatedAt: "2016-11-05T01:20:17.327670065Z" +- UpdatedAt: "2016-11-05T01:20:17.327670065Z" +- Spec: +- Name: "app-dev.crt" +- 404: +- description: "config not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- type: "string" +- description: "ID of the config" +- tags: ["Config"] ++ schema: ++ $ref: "#/components/schemas/Config" ++ examples: ++ response: ++ value: ++ ID: ktnbjxoalbkvbvedmg1urrz8h ++ Version: ++ Index: 11 ++ CreatedAt: 2016-11-05T01:20:17.327670065Z ++ UpdatedAt: 2016-11-05T01:20:17.327670065Z ++ Spec: ++ Name: app-dev.crt ++ "404": ++ description: config not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID of the config ++ schema: ++ type: string ++ tags: ++ - Config ++ description: Inspect a config. + delete: +- summary: "Delete a config" +- operationId: "ConfigDelete" +- produces: +- - "application/json" +- responses: +- 204: +- description: "no error" +- 404: +- description: "config not found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- required: true +- type: "string" +- description: "ID of the config" +- tags: ["Config"] ++ summary: Delete a config ++ operationId: ConfigDelete ++ responses: ++ "204": ++ description: no error ++ "404": ++ description: config not found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ required: true ++ description: ID of the config ++ schema: ++ type: string ++ tags: ++ - Config ++ description: Delete a config. + /configs/{id}/update: + post: +- summary: "Update a Config" +- operationId: "ConfigUpdate" ++ summary: Update a Config ++ operationId: ConfigUpdate + responses: +- 200: +- description: "no error" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 404: +- description: "no such config" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 503: +- description: "node is not part of a swarm" +- schema: +- $ref: "#/definitions/ErrorResponse" +- parameters: +- - name: "id" +- in: "path" +- description: "The ID or name of the config" +- type: "string" +- required: true +- - name: "body" +- in: "body" +- schema: +- $ref: "#/definitions/ConfigSpec" +- description: | +- The spec of the config to update. Currently, only the Labels field +- can be updated. All other fields must remain unchanged from the +- [ConfigInspect endpoint](#operation/ConfigInspect) response values. +- - name: "version" +- in: "query" ++ "200": ++ description: no error ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "404": ++ description: no such config ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "503": ++ description: node is not part of a swarm ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ parameters: ++ - name: id ++ in: path ++ description: The ID or name of the config ++ required: true ++ schema: ++ type: string ++ - name: version ++ in: query + description: | + The version number of the config object being updated. This is + required to avoid conflicting writes. +- type: "integer" +- format: "int64" + required: true +- tags: ["Config"] ++ schema: ++ type: integer ++ format: int64 ++ requestBody: ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ConfigSpec" ++ text/plain: ++ schema: ++ $ref: "#/components/schemas/ConfigSpec" ++ description: | ++ The spec of the config to update. Currently, only the Labels field ++ can be updated. All other fields must remain unchanged from the ++ [ConfigInspect endpoint](#operation/ConfigInspect) response values. ++ tags: ++ - Config ++ description: Update a Config. + /distribution/{name}/json: + get: +- summary: "Get image information from the registry" ++ summary: Get image information from the registry + description: | + Return image digest and platform information by contacting the registry. +- operationId: "DistributionInspect" +- produces: +- - "application/json" ++ operationId: DistributionInspect + responses: +- 200: +- description: "descriptor and platform information" +- schema: +- $ref: "#/definitions/DistributionInspect" +- 401: +- description: "Failed authentication or no image found" +- schema: +- $ref: "#/definitions/ErrorResponse" +- examples: ++ "200": ++ description: descriptor and platform information ++ content: + application/json: +- message: "No such image: someimage (tag: latest)" +- 500: +- description: "Server error" +- schema: +- $ref: "#/definitions/ErrorResponse" ++ schema: ++ $ref: "#/components/schemas/DistributionInspect" ++ "401": ++ description: Failed authentication or no image found ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ examples: ++ response: ++ value: ++ message: "No such image: someimage (tag: latest)" ++ "500": ++ description: Server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" + parameters: +- - name: "name" +- in: "path" +- description: "Image name or id" +- type: "string" ++ - name: name ++ in: path ++ description: Image name or id + required: true +- tags: ["Distribution"] ++ schema: ++ type: string ++ tags: ++ - Distribution + /session: + post: +- summary: "Initialize interactive session" ++ summary: Initialize interactive session + description: | + Start a new interactive session with a server. Session allows server to + call back to the client for advanced capabilities. +@@ -14045,18 +7187,8238 @@ + Connection: Upgrade + Upgrade: h2c + ``` +- operationId: "Session" +- produces: +- - "application/vnd.docker.raw-stream" +- responses: +- 101: +- description: "no error, hijacking successful" +- 400: +- description: "bad parameter" +- schema: +- $ref: "#/definitions/ErrorResponse" +- 500: +- description: "server error" ++ operationId: Session ++ responses: ++ "101": ++ description: no error, hijacking successful ++ "400": ++ description: bad parameter ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ "500": ++ description: server error ++ content: ++ application/json: ++ schema: ++ $ref: "#/components/schemas/ErrorResponse" ++ tags: ++ - Session ++servers: ++ - url: /v1.56 ++components: ++ requestBodies: ++ PluginPrivilegeArray: ++ content: ++ application/json: + schema: +- $ref: "#/definitions/ErrorResponse" +- tags: ["Session"] ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginPrivilege" ++ example: ++ - Name: network ++ Description: "" ++ Value: ++ - host ++ - Name: mount ++ Description: "" ++ Value: ++ - /data ++ - Name: device ++ Description: "" ++ Value: ++ - /dev/cpu_dma_latency ++ text/plain: ++ schema: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginPrivilege" ++ example: ++ - Name: network ++ Description: "" ++ Value: ++ - host ++ - Name: mount ++ Description: "" ++ Value: ++ - /data ++ - Name: device ++ Description: "" ++ Value: ++ - /dev/cpu_dma_latency ++ schemas: ++ ImageHistoryResponseItem: ++ type: object ++ x-go-name: HistoryResponseItem ++ title: HistoryResponseItem ++ description: individual image layer information in response to ImageHistory operation ++ required: ++ - Id ++ - Created ++ - CreatedBy ++ - Tags ++ - Size ++ - Comment ++ properties: ++ Id: ++ type: string ++ Created: ++ type: integer ++ format: int64 ++ CreatedBy: ++ type: string ++ Tags: ++ type: array ++ items: ++ type: string ++ Size: ++ type: integer ++ format: int64 ++ Comment: ++ type: string ++ PortSummary: ++ type: object ++ description: | ++ Describes a port-mapping between the container and the host. ++ required: ++ - PrivatePort ++ - Type ++ properties: ++ IP: ++ type: string ++ format: ip-address ++ description: Host IP address that the container's port is mapped to ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ PrivatePort: ++ type: integer ++ format: uint16 ++ description: Port on the container ++ PublicPort: ++ type: integer ++ format: uint16 ++ description: Port exposed on the host ++ Type: ++ type: string ++ enum: ++ - tcp ++ - udp ++ - sctp ++ example: ++ PrivatePort: 8080 ++ PublicPort: 80 ++ Type: tcp ++ MountType: ++ description: |- ++ The mount type. Available types: ++ ++ - `bind` a mount of a file or directory from the host into the container. ++ - `cluster` a Swarm cluster volume. ++ - `image` an OCI image. ++ - `npipe` a named pipe from the host into the container. ++ - `tmpfs` a `tmpfs`. ++ - `volume` a docker volume with the given `Name`. ++ type: string ++ enum: ++ - bind ++ - cluster ++ - image ++ - npipe ++ - tmpfs ++ - volume ++ example: volume ++ MountPoint: ++ type: object ++ description: | ++ MountPoint represents a mount point configuration inside the container. ++ This is used for reporting the mountpoints in use by a container. ++ properties: ++ Type: ++ description: | ++ The mount type: ++ ++ - `bind` a mount of a file or directory from the host into the container. ++ - `cluster` a Swarm cluster volume. ++ - `image` an OCI image. ++ - `npipe` a named pipe from the host into the container. ++ - `tmpfs` a `tmpfs`. ++ - `volume` a docker volume with the given `Name`. ++ allOf: ++ - $ref: "#/components/schemas/MountType" ++ example: volume ++ Name: ++ description: | ++ Name is the name reference to the underlying data defined by `Source` ++ e.g., the volume name. ++ type: string ++ example: myvolume ++ Source: ++ description: | ++ Source location of the mount. ++ ++ For volumes, this contains the storage location of the volume (within ++ `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains ++ the source (host) part of the bind-mount. For `tmpfs` mount points, this ++ field is empty. ++ type: string ++ example: /var/lib/docker/volumes/myvolume/_data ++ Destination: ++ description: | ++ Destination is the path relative to the container root (`/`) where ++ the `Source` is mounted inside the container. ++ type: string ++ example: /usr/share/nginx/html/ ++ Driver: ++ description: | ++ Driver is the volume driver used to create the volume (if it is a volume). ++ type: string ++ example: local ++ Mode: ++ description: | ++ Mode is a comma separated list of options supplied by the user when ++ creating the bind/volume mount. ++ ++ The default is platform-specific (`"z"` on Linux, empty on Windows). ++ type: string ++ example: z ++ RW: ++ description: | ++ Whether the mount is mounted writable (read-write). ++ type: boolean ++ example: true ++ Propagation: ++ description: | ++ Propagation describes how mounts are propagated from the host into the ++ mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) ++ for details. This field is not used on Windows. ++ type: string ++ example: "" ++ DeviceMapping: ++ type: object ++ description: A device mapping between the host and container ++ properties: ++ PathOnHost: ++ type: string ++ PathInContainer: ++ type: string ++ CgroupPermissions: ++ type: string ++ example: ++ PathOnHost: /dev/deviceName ++ PathInContainer: /dev/deviceName ++ CgroupPermissions: mrw ++ DeviceRequest: ++ type: object ++ description: A request for devices to be sent to device drivers ++ properties: ++ Driver: ++ description: | ++ The name of the device driver to use for this request. ++ ++ Note that if this is specified the capabilities are ignored when ++ selecting a device driver. ++ type: string ++ example: nvidia ++ Count: ++ type: integer ++ example: -1 ++ DeviceIDs: ++ type: array ++ items: ++ type: string ++ example: ++ - "0" ++ - "1" ++ - GPU-fef8089b-4820-abfc-e83e-94318197576e ++ Capabilities: ++ description: | ++ A list of capabilities; an OR list of AND lists of capabilities. ++ ++ Note that if a driver is specified the capabilities have no effect on ++ selecting a driver as the driver name is used directly. ++ ++ Note that if no driver is specified the capabilities are used to ++ select a driver with the required capabilities. ++ type: array ++ items: ++ type: array ++ items: ++ type: string ++ example: ++ - - gpu ++ - nvidia ++ - compute ++ Options: ++ description: | ++ Driver-specific options, specified as a key/value pairs. These options ++ are passed directly to the driver. ++ type: object ++ additionalProperties: ++ type: string ++ ThrottleDevice: ++ type: object ++ properties: ++ Path: ++ description: Device path ++ type: string ++ Rate: ++ description: Rate ++ type: integer ++ format: int64 ++ minimum: 0 ++ Mount: ++ type: object ++ properties: ++ Target: ++ description: Container path. ++ type: string ++ Source: ++ description: |- ++ Mount source (e.g. a volume name, a host path). The source cannot be ++ specified when using `Type=tmpfs`. For `Type=bind`, the source path ++ must either exist, or the `CreateMountpoint` must be set to `true` to ++ create the source path on the host if missing. ++ ++ For `Type=npipe`, the pipe must exist prior to creating the container. ++ type: string ++ Type: ++ description: | ++ The mount type. Available types: ++ ++ - `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container. ++ - `cluster` a Swarm cluster volume ++ - `image` Mounts an image. ++ - `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container. ++ - `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs. ++ - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. ++ allOf: ++ - $ref: "#/components/schemas/MountType" ++ ReadOnly: ++ description: Whether the mount should be read-only. ++ type: boolean ++ Consistency: ++ description: "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." ++ type: string ++ BindOptions: ++ description: Optional configuration for the `bind` type. ++ type: object ++ properties: ++ Propagation: ++ description: A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`. ++ type: string ++ enum: ++ - private ++ - rprivate ++ - shared ++ - rshared ++ - slave ++ - rslave ++ NonRecursive: ++ description: Disable recursive bind mount. ++ type: boolean ++ default: false ++ CreateMountpoint: ++ description: Create mount point on host if missing ++ type: boolean ++ default: false ++ ReadOnlyNonRecursive: ++ description: | ++ Make the mount non-recursively read-only, but still leave the mount recursive ++ (unless NonRecursive is set to `true` in conjunction). ++ ++ Added in v1.44, before that version all read-only mounts were ++ non-recursive by default. To match the previous behaviour this ++ will default to `true` for clients on versions prior to v1.44. ++ type: boolean ++ default: false ++ ReadOnlyForceRecursive: ++ description: Raise an error if the mount cannot be made recursively read-only. ++ type: boolean ++ default: false ++ VolumeOptions: ++ description: Optional configuration for the `volume` type. ++ type: object ++ properties: ++ NoCopy: ++ description: Populate volume with data from the target. ++ type: boolean ++ default: false ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ DriverConfig: ++ description: Map of driver specific options ++ type: object ++ properties: ++ Name: ++ description: Name of the driver to use to create the volume. ++ type: string ++ Options: ++ description: key/value map of driver specific options. ++ type: object ++ additionalProperties: ++ type: string ++ Subpath: ++ description: Source path inside the volume. Must be relative without any back traversals. ++ type: string ++ example: dir-inside-volume/subdirectory ++ ImageOptions: ++ description: Optional configuration for the `image` type. ++ type: object ++ properties: ++ Subpath: ++ description: Source path inside the image. Must be relative without any back traversals. ++ type: string ++ example: dir-inside-image/subdirectory ++ TmpfsOptions: ++ description: Optional configuration for the `tmpfs` type. ++ type: object ++ properties: ++ SizeBytes: ++ description: The size for the tmpfs mount in bytes. ++ type: integer ++ format: int64 ++ Mode: ++ description: | ++ The permission mode for the tmpfs mount in an integer. ++ The value must not be in octal format (e.g. 755) but rather ++ the decimal representation of the octal value (e.g. 493). ++ type: integer ++ Options: ++ description: | ++ The options to be passed to the tmpfs mount. An array of arrays. ++ Flag options should be provided as 1-length arrays. Other types ++ should be provided as as 2-length arrays, where the first item is ++ the key and the second the value. ++ type: array ++ items: ++ type: array ++ minItems: 1 ++ maxItems: 2 ++ items: ++ type: string ++ example: ++ - - noexec ++ RestartPolicy: ++ description: | ++ The behavior to apply when the container exits. The default is not to ++ restart. ++ ++ An ever increasing delay (double the previous delay, starting at 100ms) is ++ added before each restart to prevent flooding the server. ++ type: object ++ properties: ++ Name: ++ type: string ++ description: | ++ - Empty string means not to restart ++ - `no` Do not automatically restart ++ - `always` Always restart ++ - `unless-stopped` Restart always except when the user has manually stopped the container ++ - `on-failure` Restart only when the container exit code is non-zero ++ enum: ++ - "" ++ - no ++ - always ++ - unless-stopped ++ - on-failure ++ MaximumRetryCount: ++ type: integer ++ description: | ++ If `on-failure` is used, the number of times to retry before giving up. ++ Resources: ++ description: A container's resources (cgroups config, ulimits, etc) ++ type: object ++ properties: ++ CpuShares: ++ description: | ++ An integer value representing this container's relative CPU weight ++ versus other containers. ++ type: integer ++ Memory: ++ description: Memory limit in bytes. ++ type: integer ++ format: int64 ++ default: 0 ++ CgroupParent: ++ description: | ++ Path to `cgroups` under which the container's `cgroup` is created. If ++ the path is not absolute, the path is considered to be relative to the ++ `cgroups` path of the init process. Cgroups are created if they do not ++ already exist. ++ type: string ++ BlkioWeight: ++ description: Block IO weight (relative weight). ++ type: integer ++ minimum: 0 ++ maximum: 1000 ++ BlkioWeightDevice: ++ description: | ++ Block IO weight (relative device weight) in the form: ++ ++ ``` ++ [{"Path": "device_path", "Weight": weight}] ++ ``` ++ type: array ++ items: ++ type: object ++ properties: ++ Path: ++ type: string ++ Weight: ++ type: integer ++ minimum: 0 ++ BlkioDeviceReadBps: ++ description: | ++ Limit read rate (bytes per second) from a device, in the form: ++ ++ ``` ++ [{"Path": "device_path", "Rate": rate}] ++ ``` ++ type: array ++ items: ++ $ref: "#/components/schemas/ThrottleDevice" ++ BlkioDeviceWriteBps: ++ description: | ++ Limit write rate (bytes per second) to a device, in the form: ++ ++ ``` ++ [{"Path": "device_path", "Rate": rate}] ++ ``` ++ type: array ++ items: ++ $ref: "#/components/schemas/ThrottleDevice" ++ BlkioDeviceReadIOps: ++ description: | ++ Limit read rate (IO per second) from a device, in the form: ++ ++ ``` ++ [{"Path": "device_path", "Rate": rate}] ++ ``` ++ type: array ++ items: ++ $ref: "#/components/schemas/ThrottleDevice" ++ BlkioDeviceWriteIOps: ++ description: | ++ Limit write rate (IO per second) to a device, in the form: ++ ++ ``` ++ [{"Path": "device_path", "Rate": rate}] ++ ``` ++ type: array ++ items: ++ $ref: "#/components/schemas/ThrottleDevice" ++ CpuPeriod: ++ description: The length of a CPU period in microseconds. ++ type: integer ++ format: int64 ++ CpuQuota: ++ description: | ++ Microseconds of CPU time that the container can get in a CPU period. ++ type: integer ++ format: int64 ++ CpuRealtimePeriod: ++ description: | ++ The length of a CPU real-time period in microseconds. Set to 0 to ++ allocate no time allocated to real-time tasks. ++ type: integer ++ format: int64 ++ CpuRealtimeRuntime: ++ description: | ++ The length of a CPU real-time runtime in microseconds. Set to 0 to ++ allocate no time allocated to real-time tasks. ++ type: integer ++ format: int64 ++ CpusetCpus: ++ description: | ++ CPUs in which to allow execution (e.g., `0-3`, `0,1`). ++ type: string ++ example: 0-3 ++ CpusetMems: ++ description: | ++ Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only ++ effective on NUMA systems. ++ type: string ++ Devices: ++ description: A list of devices to add to the container. ++ type: array ++ items: ++ $ref: "#/components/schemas/DeviceMapping" ++ DeviceCgroupRules: ++ description: a list of cgroup rules to apply to the container ++ type: array ++ items: ++ type: string ++ example: c 13:* rwm ++ DeviceRequests: ++ description: | ++ A list of requests for devices to be sent to device drivers. ++ type: array ++ items: ++ $ref: "#/components/schemas/DeviceRequest" ++ MemoryReservation: ++ description: Memory soft limit in bytes. ++ type: integer ++ format: int64 ++ MemorySwap: ++ description: | ++ Total memory limit (memory + swap). Set as `-1` to enable unlimited ++ swap. ++ type: integer ++ format: int64 ++ MemorySwappiness: ++ description: | ++ Tune a container's memory swappiness behavior. Accepts an integer ++ between 0 and 100. ++ type: integer ++ format: int64 ++ minimum: 0 ++ maximum: 100 ++ NanoCpus: ++ description: CPU quota in units of 10-9 CPUs. ++ type: integer ++ format: int64 ++ OomKillDisable: ++ description: Disable OOM Killer for the container. ++ type: boolean ++ Init: ++ description: | ++ Run an init inside the container that forwards signals and reaps ++ processes. This field is omitted if empty, and the default (as ++ configured on the daemon) is used. ++ type: ++ - boolean ++ - "null" ++ PidsLimit: ++ description: | ++ Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` ++ to not change. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ Ulimits: ++ description: | ++ A list of resource limits to set in the container. For example: ++ ++ ``` ++ {"Name": "nofile", "Soft": 1024, "Hard": 2048} ++ ``` ++ type: array ++ items: ++ type: object ++ properties: ++ Name: ++ description: Name of ulimit ++ type: string ++ Soft: ++ description: Soft limit ++ type: integer ++ Hard: ++ description: Hard limit ++ type: integer ++ CpuCount: ++ description: | ++ The number of usable CPUs (Windows only). ++ ++ On Windows Server containers, the processor resource controls are ++ mutually exclusive. The order of precedence is `CPUCount` first, then ++ `CPUShares`, and `CPUPercent` last. ++ type: integer ++ format: int64 ++ CpuPercent: ++ description: | ++ The usable percentage of the available CPUs (Windows only). ++ ++ On Windows Server containers, the processor resource controls are ++ mutually exclusive. The order of precedence is `CPUCount` first, then ++ `CPUShares`, and `CPUPercent` last. ++ type: integer ++ format: int64 ++ IOMaximumIOps: ++ description: Maximum IOps for the container system drive (Windows only) ++ type: integer ++ format: int64 ++ IOMaximumBandwidth: ++ description: | ++ Maximum IO in bytes per second for the container system drive ++ (Windows only). ++ type: integer ++ format: int64 ++ Limit: ++ description: | ++ An object describing a limit on resources which can be requested by a task. ++ type: object ++ properties: ++ NanoCPUs: ++ type: integer ++ format: int64 ++ example: 4000000000 ++ MemoryBytes: ++ type: integer ++ format: int64 ++ example: 8272408576 ++ Pids: ++ description: | ++ Limits the maximum number of PIDs in the container. Set `0` for unlimited. ++ type: integer ++ format: int64 ++ default: 0 ++ example: 100 ++ ResourceObject: ++ description: | ++ An object describing the resources which can be advertised by a node and ++ requested by a task. ++ type: object ++ properties: ++ NanoCPUs: ++ type: integer ++ format: int64 ++ example: 4000000000 ++ MemoryBytes: ++ type: integer ++ format: int64 ++ example: 8272408576 ++ GenericResources: ++ $ref: "#/components/schemas/GenericResources" ++ GenericResources: ++ description: | ++ User-defined resources can be either Integer resources (e.g, `SSD=3`) or ++ String resources (e.g, `GPU=UUID1`). ++ type: array ++ items: ++ type: object ++ properties: ++ NamedResourceSpec: ++ type: object ++ properties: ++ Kind: ++ type: string ++ Value: ++ type: string ++ DiscreteResourceSpec: ++ type: object ++ properties: ++ Kind: ++ type: string ++ Value: ++ type: integer ++ format: int64 ++ example: ++ - DiscreteResourceSpec: ++ Kind: SSD ++ Value: 3 ++ - NamedResourceSpec: ++ Kind: GPU ++ Value: UUID1 ++ - NamedResourceSpec: ++ Kind: GPU ++ Value: UUID2 ++ HealthConfig: ++ description: | ++ A test to perform to check that the container is healthy. ++ Healthcheck commands should be side-effect free. ++ type: object ++ properties: ++ Test: ++ description: | ++ The test to perform. Possible values are: ++ ++ - `[]` inherit healthcheck from image or parent image ++ - `["NONE"]` disable healthcheck ++ - `["CMD", args...]` exec arguments directly ++ - `["CMD-SHELL", command]` run command with system's default shell ++ ++ A non-zero exit code indicates a failed healthcheck: ++ - `0` healthy ++ - `1` unhealthy ++ - `2` reserved (treated as unhealthy) ++ - other values: error running probe ++ type: array ++ items: ++ type: string ++ Interval: ++ description: | ++ The time to wait between checks in nanoseconds. It should be 0 or at ++ least 1000000 (1 ms). 0 means inherit. ++ type: integer ++ format: int64 ++ Timeout: ++ description: | ++ The time to wait before considering the check to have hung. It should ++ be 0 or at least 1000000 (1 ms). 0 means inherit. ++ ++ If the health check command does not complete within this timeout, ++ the check is considered failed and the health check process is ++ forcibly terminated without a graceful shutdown. ++ type: integer ++ format: int64 ++ Retries: ++ description: | ++ The number of consecutive failures needed to consider a container as ++ unhealthy. 0 means inherit. ++ type: integer ++ StartPeriod: ++ description: | ++ Start period for the container to initialize before starting ++ health-retries countdown in nanoseconds. It should be 0 or at least ++ 1000000 (1 ms). 0 means inherit. ++ type: integer ++ format: int64 ++ StartInterval: ++ description: | ++ The time to wait between checks in nanoseconds during the start period. ++ It should be 0 or at least 1000000 (1 ms). 0 means inherit. ++ type: integer ++ format: int64 ++ Health: ++ description: | ++ Health stores information about the container's healthcheck results. ++ type: ++ - object ++ - "null" ++ properties: ++ Status: ++ description: | ++ Status is one of `none`, `starting`, `healthy` or `unhealthy` ++ ++ - "none" Indicates there is no healthcheck ++ - "starting" Starting indicates that the container is not yet ready ++ - "healthy" Healthy indicates that the container is running correctly ++ - "unhealthy" Unhealthy indicates that the container has a problem ++ type: string ++ enum: ++ - none ++ - starting ++ - healthy ++ - unhealthy ++ example: healthy ++ FailingStreak: ++ description: FailingStreak is the number of consecutive failures ++ type: integer ++ example: 0 ++ Log: ++ type: array ++ description: | ++ Log contains the last few results (oldest first) ++ items: ++ $ref: "#/components/schemas/HealthcheckResult" ++ HealthcheckResult: ++ description: | ++ HealthcheckResult stores information about a single run of a healthcheck probe ++ type: ++ - object ++ - "null" ++ properties: ++ Start: ++ description: | ++ Date and time at which this check started in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: date-time ++ example: 2020-01-04T10:44:24.496525531Z ++ End: ++ description: | ++ Date and time at which this check ended in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2020-01-04T10:45:21.364524523Z ++ ExitCode: ++ description: | ++ ExitCode meanings: ++ ++ - `0` healthy ++ - `1` unhealthy ++ - `2` reserved (considered unhealthy) ++ - other values: error running probe ++ type: integer ++ example: 0 ++ Output: ++ description: Output from last check ++ type: string ++ HostConfig: ++ description: Container configuration that depends on the host we are running on ++ allOf: ++ - $ref: "#/components/schemas/Resources" ++ - type: object ++ properties: ++ Binds: ++ type: array ++ description: | ++ A list of volume bindings for this container. Each volume binding ++ is a string in one of these forms: ++ ++ - `host-src:container-dest[:options]` to bind-mount a host path ++ into the container. Both `host-src`, and `container-dest` must ++ be an _absolute_ path. ++ - `volume-name:container-dest[:options]` to bind-mount a volume ++ managed by a volume driver into the container. `container-dest` ++ must be an _absolute_ path. ++ ++ `options` is an optional, comma-delimited list of: ++ ++ - `nocopy` disables automatic copying of data from the container ++ path to the volume. The `nocopy` flag only applies to named volumes. ++ - `[ro|rw]` mounts a volume read-only or read-write, respectively. ++ If omitted or set to `rw`, volumes are mounted read-write. ++ - `[z|Z]` applies SELinux labels to allow or deny multiple containers ++ to read and write to the same volume. ++ - `z`: a _shared_ content label is applied to the content. This ++ label indicates that multiple containers can share the volume ++ content, for both reading and writing. ++ - `Z`: a _private unshared_ label is applied to the content. ++ This label indicates that only the current container can use ++ a private volume. Labeling systems such as SELinux require ++ proper labels to be placed on volume content that is mounted ++ into a container. Without a label, the security system can ++ prevent a container's processes from using the content. By ++ default, the labels set by the host operating system are not ++ modified. ++ - `[[r]shared|[r]slave|[r]private]` specifies mount ++ [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). ++ This only applies to bind-mounted volumes, not internal volumes ++ or named volumes. Mount propagation requires the source mount ++ point (the location where the source directory is mounted in the ++ host operating system) to have the correct propagation properties. ++ For shared volumes, the source mount point must be set to `shared`. ++ For slave volumes, the mount must be set to either `shared` or ++ `slave`. ++ items: ++ type: string ++ ContainerIDFile: ++ type: string ++ description: Path to a file where the container ID is written ++ example: "" ++ LogConfig: ++ type: object ++ description: The logging configuration for this container ++ properties: ++ Type: ++ description: |- ++ Name of the logging driver used for the container or "none" ++ if logging is disabled. ++ type: string ++ enum: ++ - local ++ - json-file ++ - syslog ++ - journald ++ - gelf ++ - fluentd ++ - awslogs ++ - splunk ++ - etwlogs ++ - none ++ Config: ++ description: Driver-specific configuration options for the logging driver. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ max-file: "5" ++ max-size: 10m ++ NetworkMode: ++ type: string ++ description: | ++ Network mode to use for this container. Supported standard values ++ are: `bridge`, `host`, `none`, and `container:`. Any ++ other value is taken as a custom network's name to which this ++ container should connect to. ++ PortBindings: ++ $ref: "#/components/schemas/PortMap" ++ RestartPolicy: ++ $ref: "#/components/schemas/RestartPolicy" ++ AutoRemove: ++ type: boolean ++ description: | ++ Automatically remove the container when the container's process ++ exits. This has no effect if `RestartPolicy` is set. ++ VolumeDriver: ++ type: string ++ description: Driver that this container uses to mount volumes. ++ VolumesFrom: ++ type: array ++ description: | ++ A list of volumes to inherit from another container, specified in ++ the form `[:]`. ++ items: ++ type: string ++ Mounts: ++ description: | ++ Specification for mounts to be added to the container. ++ type: array ++ items: ++ $ref: "#/components/schemas/Mount" ++ ConsoleSize: ++ type: ++ - array ++ - "null" ++ description: | ++ Initial console size, as an `[height, width]` array. ++ minItems: 2 ++ maxItems: 2 ++ items: ++ type: integer ++ minimum: 0 ++ example: ++ - 80 ++ - 64 ++ Annotations: ++ type: object ++ description: | ++ Arbitrary non-identifying metadata attached to container and ++ provided to the runtime when the container is started. ++ additionalProperties: ++ type: string ++ CapAdd: ++ type: array ++ description: | ++ A list of kernel capabilities to add to the container. Conflicts ++ with option 'Capabilities'. ++ items: ++ type: string ++ CapDrop: ++ type: array ++ description: | ++ A list of kernel capabilities to drop from the container. Conflicts ++ with option 'Capabilities'. ++ items: ++ type: string ++ CgroupnsMode: ++ type: string ++ enum: ++ - private ++ - host ++ description: | ++ cgroup namespace mode for the container. Possible values are: ++ ++ - `"private"`: the container runs in its own private cgroup namespace ++ - `"host"`: use the host system's cgroup namespace ++ ++ If not specified, the daemon default is used, which can either be `"private"` ++ or `"host"`, depending on daemon version, kernel support and configuration. ++ Dns: ++ type: array ++ description: A list of DNS servers for the container to use. ++ items: ++ type: string ++ format: ip-address ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ DnsOptions: ++ type: array ++ description: A list of DNS options. ++ items: ++ type: string ++ DnsSearch: ++ type: array ++ description: A list of DNS search domains. ++ items: ++ type: string ++ ExtraHosts: ++ type: array ++ description: | ++ A list of hostnames/IP mappings to add to the container's `/etc/hosts` ++ file. Specified in the form `["hostname:IP"]`. ++ items: ++ type: string ++ GroupAdd: ++ type: array ++ description: | ++ A list of additional groups that the container process will run as. ++ items: ++ type: string ++ IpcMode: ++ type: string ++ description: | ++ IPC sharing mode for the container. Possible values are: ++ ++ - `"none"`: own private IPC namespace, with /dev/shm not mounted ++ - `"private"`: own private IPC namespace ++ - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers ++ - `"container:"`: join another (shareable) container's IPC namespace ++ - `"host"`: use the host system's IPC namespace ++ ++ If not specified, daemon default is used, which can either be `"private"` ++ or `"shareable"`, depending on daemon version and configuration. ++ Cgroup: ++ type: string ++ description: Cgroup to use for the container. ++ Links: ++ type: array ++ description: | ++ A list of links for the container in the form `container_name:alias`. ++ items: ++ type: string ++ OomScoreAdj: ++ type: integer ++ description: | ++ An integer value containing the score given to the container in ++ order to tune OOM killer preferences. ++ example: 500 ++ PidMode: ++ type: string ++ description: | ++ Set the PID (Process) Namespace mode for the container. It can be ++ either: ++ ++ - `"container:"`: joins another container's PID namespace ++ - `"host"`: use the host's PID namespace inside the container ++ Privileged: ++ type: boolean ++ description: Gives the container full access to the host. ++ PublishAllPorts: ++ type: boolean ++ description: | ++ Allocates an ephemeral host port for all of a container's ++ exposed ports. ++ ++ Ports are de-allocated when the container stops and allocated when ++ the container starts. The allocated port might be changed when ++ restarting the container. ++ ++ The port is selected from the ephemeral port range that depends on ++ the kernel. For example, on Linux the range is defined by ++ `/proc/sys/net/ipv4/ip_local_port_range`. ++ ReadonlyRootfs: ++ type: boolean ++ description: Mount the container's root filesystem as read only. ++ SecurityOpt: ++ type: array ++ description: | ++ A list of string values to customize labels for MLS systems, such ++ as SELinux. ++ items: ++ type: string ++ StorageOpt: ++ type: object ++ description: | ++ Storage driver options for this container, in the form `{"size": "120G"}`. ++ additionalProperties: ++ type: string ++ Tmpfs: ++ type: object ++ description: | ++ A map of container directories which should be replaced by tmpfs ++ mounts, and their corresponding mount options. For example: ++ ++ ``` ++ { "/run": "rw,noexec,nosuid,size=65536k" } ++ ``` ++ additionalProperties: ++ type: string ++ UTSMode: ++ type: string ++ description: UTS namespace to use for the container. ++ UsernsMode: ++ type: string ++ description: | ++ Sets the usernamespace mode for the container when usernamespace ++ remapping option is enabled. ++ ShmSize: ++ type: integer ++ format: int64 ++ description: | ++ Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. ++ minimum: 0 ++ Sysctls: ++ type: ++ - object ++ - "null" ++ description: |- ++ A list of kernel parameters (sysctls) to set in the container. ++ ++ This field is omitted if not set. ++ additionalProperties: ++ type: string ++ example: ++ net.ipv4.ip_forward: "1" ++ Runtime: ++ type: ++ - string ++ - "null" ++ description: Runtime to use with this container. ++ Umask: ++ type: ++ - integer ++ - "null" ++ format: uint32 ++ description: |- ++ Set the initial umask for a Unix container. ++ ++ If omitted, the daemon does not set a umask in the OCI process ++ specification, and the runtime's default behavior applies. ++ ++ JSON integers are decimal. For example, use `18` for the octal ++ umask `0022`, and `511` for the octal umask `0777`. ++ Isolation: ++ type: string ++ description: | ++ Isolation technology of the container. (Windows only) ++ enum: ++ - default ++ - process ++ - hyperv ++ - "" ++ MaskedPaths: ++ type: array ++ description: | ++ The list of paths to be masked inside the container (this overrides ++ the default set of paths). ++ items: ++ type: string ++ example: ++ - /proc/asound ++ - /proc/acpi ++ - /proc/kcore ++ - /proc/keys ++ - /proc/latency_stats ++ - /proc/timer_list ++ - /proc/timer_stats ++ - /proc/sched_debug ++ - /proc/scsi ++ - /sys/firmware ++ - /sys/devices/virtual/powercap ++ ReadonlyPaths: ++ type: array ++ description: | ++ The list of paths to be set as read-only inside the container ++ (this overrides the default set of paths). ++ items: ++ type: string ++ example: ++ - /proc/bus ++ - /proc/fs ++ - /proc/irq ++ - /proc/sys ++ - /proc/sysrq-trigger ++ ContainerConfig: ++ description: | ++ Configuration for a container that is portable between hosts. ++ type: object ++ properties: ++ Hostname: ++ description: | ++ The hostname to use for the container, as a valid RFC 1123 hostname. ++ type: string ++ example: 439f4e91bd1d ++ Domainname: ++ description: | ++ The domain name to use for the container. ++ type: string ++ User: ++ description: |- ++ Commands run as this user inside the container. If omitted, commands ++ run as the user specified in the image the container was started from. ++ ++ Can be either user-name or UID, and optional group-name or GID, ++ separated by a colon (`[<:group-name|GID>]`). ++ type: string ++ example: 123:456 ++ AttachStdin: ++ description: Whether to attach to `stdin`. ++ type: boolean ++ default: false ++ AttachStdout: ++ description: Whether to attach to `stdout`. ++ type: boolean ++ default: true ++ AttachStderr: ++ description: Whether to attach to `stderr`. ++ type: boolean ++ default: true ++ ExposedPorts: ++ description: | ++ An object mapping ports to an empty object in the form: ++ ++ `{"/": {}}` ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: object ++ enum: ++ - {} ++ default: {} ++ example: ++ 80/tcp: {} ++ 443/tcp: {} ++ Tty: ++ description: | ++ Attach standard streams to a TTY, including `stdin` if it is not closed. ++ type: boolean ++ default: false ++ OpenStdin: ++ description: Open `stdin` ++ type: boolean ++ default: false ++ StdinOnce: ++ description: Close `stdin` after one attached client disconnects ++ type: boolean ++ default: false ++ Env: ++ description: | ++ A list of environment variables to set inside the container in the ++ form `["VAR=value", ...]`. A variable without `=` is removed from the ++ environment, rather than to have an empty value. ++ type: array ++ items: ++ type: string ++ example: ++ - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ++ Cmd: ++ description: | ++ Command to run specified as a string or an array of strings. ++ type: array ++ items: ++ type: string ++ example: ++ - /bin/sh ++ Healthcheck: ++ $ref: "#/components/schemas/HealthConfig" ++ ArgsEscaped: ++ description: Command is already escaped (Windows only) ++ type: ++ - boolean ++ - "null" ++ default: false ++ example: false ++ Image: ++ description: | ++ The name (or reference) of the image to use when creating the container, ++ or which was used when the container was created. ++ type: string ++ example: example-image:1.0 ++ Volumes: ++ description: | ++ An object mapping mount point paths inside the container to empty ++ objects. ++ type: object ++ additionalProperties: ++ type: object ++ enum: ++ - {} ++ default: {} ++ WorkingDir: ++ description: The working directory for commands to run in. ++ type: string ++ example: /public/ ++ Entrypoint: ++ description: | ++ The entry point for the container as a string or an array of strings. ++ ++ If the array consists of exactly one empty string (`[""]`) then the ++ entry point is reset to system default (i.e., the entry point used by ++ docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). ++ type: array ++ items: ++ type: string ++ example: [] ++ NetworkDisabled: ++ description: Disable networking for the container. ++ type: ++ - boolean ++ - "null" ++ OnBuild: ++ description: | ++ `ONBUILD` metadata that were defined in the image's `Dockerfile`. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: [] ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ StopSignal: ++ description: | ++ Signal to stop a container as a string or unsigned integer. ++ type: ++ - string ++ - "null" ++ example: SIGTERM ++ StopTimeout: ++ description: | ++ Timeout to stop a container in seconds. If omitted, the daemon-wide ++ default (`default-stop-timeout`) is used. ++ type: ++ - integer ++ - "null" ++ Shell: ++ description: | ++ Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - /bin/sh ++ - -c ++ ImageConfig: ++ description: | ++ Configuration of the image. These fields are used as defaults ++ when starting a container from the image. ++ type: object ++ properties: ++ User: ++ description: The user that commands are run as inside the container. ++ type: string ++ example: web:web ++ ExposedPorts: ++ description: | ++ An object mapping ports to an empty object in the form: ++ ++ `{"/": {}}` ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: object ++ enum: ++ - {} ++ default: {} ++ example: ++ 80/tcp: {} ++ 443/tcp: {} ++ Env: ++ description: | ++ A list of environment variables to set inside the container in the ++ form `["VAR=value", ...]`. A variable without `=` is removed from the ++ environment, rather than to have an empty value. ++ type: array ++ items: ++ type: string ++ example: ++ - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ++ Cmd: ++ description: | ++ Command to run specified as a string or an array of strings. ++ type: array ++ items: ++ type: string ++ example: ++ - /bin/sh ++ Healthcheck: ++ $ref: "#/components/schemas/HealthConfig" ++ ArgsEscaped: ++ description: Command is already escaped (Windows only) ++ type: ++ - boolean ++ - "null" ++ default: false ++ example: false ++ Volumes: ++ description: | ++ An object mapping mount point paths inside the container to empty ++ objects. ++ type: object ++ additionalProperties: ++ type: object ++ enum: ++ - {} ++ default: {} ++ example: ++ /app/data: {} ++ /app/config: {} ++ WorkingDir: ++ description: The working directory for commands to run in. ++ type: string ++ example: /public/ ++ Entrypoint: ++ description: | ++ The entry point for the container as a string or an array of strings. ++ ++ If the array consists of exactly one empty string (`[""]`) then the ++ entry point is reset to system default (i.e., the entry point used by ++ docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). ++ type: array ++ items: ++ type: string ++ example: [] ++ OnBuild: ++ description: | ++ `ONBUILD` metadata that were defined in the image's `Dockerfile`. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: [] ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ StopSignal: ++ description: | ++ Signal to stop a container as a string or unsigned integer. ++ type: ++ - string ++ - "null" ++ example: SIGTERM ++ Shell: ++ description: | ++ Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - /bin/sh ++ - -c ++ NetworkingConfig: ++ description: | ++ NetworkingConfig represents the container's networking configuration for ++ each of its interfaces. ++ It is used for the networking configs specified in the `docker create` ++ and `docker network connect` commands. ++ type: object ++ properties: ++ EndpointsConfig: ++ description: | ++ A mapping of network name to endpoint configuration for that network. ++ The endpoint configuration can be left empty to connect to that ++ network with no particular endpoint configuration. ++ type: object ++ additionalProperties: ++ $ref: "#/components/schemas/EndpointSettings" ++ example: ++ EndpointsConfig: ++ isolated_nw: ++ IPAMConfig: ++ IPv4Address: 172.20.30.33 ++ IPv6Address: 2001:db8:abcd::3033 ++ LinkLocalIPs: ++ - 169.254.34.68 ++ - fe80::3468 ++ MacAddress: 02:42:ac:12:05:02 ++ Links: ++ - container_1 ++ - container_2 ++ Aliases: ++ - server_x ++ - server_y ++ database_nw: {} ++ NetworkSettings: ++ description: NetworkSettings exposes the network settings in the API ++ type: object ++ properties: ++ SandboxID: ++ description: SandboxID uniquely represents a container's network stack. ++ type: string ++ example: 9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3 ++ SandboxKey: ++ description: SandboxKey is the full path of the netns handle ++ type: string ++ example: /var/run/docker/netns/8ab54b426c38 ++ Ports: ++ $ref: "#/components/schemas/PortMap" ++ Networks: ++ description: | ++ Information about all networks that the container is connected to. ++ type: object ++ additionalProperties: ++ $ref: "#/components/schemas/EndpointSettings" ++ Address: ++ description: Address represents an IPv4 or IPv6 IP address. ++ type: object ++ properties: ++ Addr: ++ description: IP address. ++ type: string ++ PrefixLen: ++ description: Mask length of the IP address. ++ type: integer ++ PortMap: ++ description: | ++ PortMap describes the mapping of container ports to host ports, using the ++ container's port-number and protocol as key in the format `/`, ++ for example, `80/udp`. ++ ++ If a container's port is mapped for multiple protocols, separate entries ++ are added to the mapping table. ++ type: object ++ additionalProperties: ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/PortBinding" ++ example: ++ 443/tcp: ++ - HostIp: 127.0.0.1 ++ HostPort: "4443" ++ 80/tcp: ++ - HostIp: 0.0.0.0 ++ HostPort: "80" ++ - HostIp: 0.0.0.0 ++ HostPort: "8080" ++ 80/udp: ++ - HostIp: 0.0.0.0 ++ HostPort: "80" ++ 53/udp: ++ - HostIp: 0.0.0.0 ++ HostPort: "53" ++ 2377/tcp: null ++ PortBinding: ++ description: | ++ PortBinding represents a binding between a host IP address and a host ++ port. ++ type: object ++ properties: ++ HostIp: ++ description: Host IP address that the container's port is mapped to. ++ type: string ++ example: 127.0.0.1 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ HostPort: ++ description: Host port number that the container's port is mapped to. ++ type: string ++ example: "4443" ++ DriverData: ++ description: | ++ Information about the storage driver used to store the container's and ++ image's filesystem. ++ type: object ++ required: ++ - Name ++ - Data ++ properties: ++ Name: ++ description: Name of the storage driver. ++ type: string ++ example: overlay2 ++ Data: ++ description: | ++ Low-level storage metadata, provided as key/value pairs. ++ ++ This information is driver-specific, and depends on the storage-driver ++ in use, and should be used for informational purposes only. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ MergedDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged ++ UpperDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff ++ WorkDir: /var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work ++ Storage: ++ description: | ++ Information about the storage used by the container. ++ type: object ++ properties: ++ RootFS: ++ allOf: ++ - $ref: "#/components/schemas/RootFSStorage" ++ - anyOf: ++ - description: | ++ Information about the storage used for the container's root filesystem. ++ type: object ++ - type: "null" ++ RootFSStorage: ++ description: | ++ Information about the storage used for the container's root filesystem. ++ type: object ++ x-go-name: RootFSStorage ++ properties: ++ Snapshot: ++ allOf: ++ - $ref: "#/components/schemas/RootFSStorageSnapshot" ++ - anyOf: ++ - description: | ++ Information about the snapshot used for the container's root filesystem. ++ type: object ++ - type: "null" ++ RootFSStorageSnapshot: ++ description: | ++ Information about a snapshot backend of the container's root filesystem. ++ type: object ++ x-go-name: RootFSStorageSnapshot ++ properties: ++ Name: ++ description: Name of the snapshotter. ++ type: string ++ FilesystemChange: ++ description: | ++ Change in the container's filesystem. ++ type: object ++ required: ++ - Path ++ - Kind ++ properties: ++ Path: ++ description: | ++ Path to file or directory that has changed. ++ type: string ++ Kind: ++ $ref: "#/components/schemas/ChangeType" ++ ChangeType: ++ description: | ++ Kind of change ++ ++ Can be one of: ++ ++ - `0`: Modified ("C") ++ - `1`: Added ("A") ++ - `2`: Deleted ("D") ++ type: integer ++ format: uint8 ++ enum: ++ - 0 ++ - 1 ++ - 2 ++ ImageInspect: ++ description: | ++ Information about an image in the local image cache. ++ type: object ++ properties: ++ Id: ++ description: | ++ ID is the content-addressable ID of an image. ++ ++ This identifier is a content-addressable digest calculated from the ++ image's configuration (which includes the digests of layers used by ++ the image). ++ ++ Note that this digest differs from the `RepoDigests` below, which ++ holds digests of image manifests that reference the image. ++ type: string ++ example: sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710 ++ Descriptor: ++ allOf: ++ - $ref: "#/components/schemas/OCIDescriptor" ++ - anyOf: ++ - description: | ++ Descriptor is an OCI descriptor of the image target. ++ In case of a multi-platform image, this descriptor points to the OCI index ++ or a manifest list. ++ ++ This field is only present if the daemon provides a multi-platform image store. ++ ++ WARNING: This is experimental and may change at any time without any backward ++ compatibility. ++ - type: "null" ++ Manifests: ++ description: | ++ Manifests is a list of image manifests available in this image. It ++ provides a more detailed view of the platform-specific image manifests or ++ other image-attached data like build attestations. ++ ++ Only available if the daemon provides a multi-platform image store ++ and the `manifests` option is set in the inspect request. ++ ++ WARNING: This is experimental and may change at any time without any backward ++ compatibility. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ImageManifestSummary" ++ Identity: ++ allOf: ++ - $ref: "#/components/schemas/Identity" ++ - anyOf: ++ - description: |- ++ Identity holds information about the identity and origin of the image. ++ This is trusted information verified by the daemon and cannot be modified ++ by tagging an image to a different name. ++ - type: "null" ++ RepoTags: ++ description: | ++ List of image names/tags in the local image cache that reference this ++ image. ++ ++ Multiple image tags can refer to the same image, and this list may be ++ empty if no tags reference the image, in which case the image is ++ "untagged", in which case it can still be referenced by its ID. ++ type: array ++ items: ++ type: string ++ example: ++ - example:1.0 ++ - example:latest ++ - example:stable ++ - internal.registry.example.com:5000/example:1.0 ++ RepoDigests: ++ description: | ++ List of content-addressable digests of locally available image manifests ++ that the image is referenced from. Multiple manifests can refer to the ++ same image. ++ ++ These digests are usually only available if the image was either pulled ++ from a registry, or if the image was pushed to a registry, which is when ++ the manifest is generated and its digest calculated. ++ type: array ++ items: ++ type: string ++ example: ++ - example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb ++ - internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578 ++ Comment: ++ description: | ++ Optional message that was set when committing or importing the image. ++ type: ++ - string ++ - "null" ++ example: "" ++ Created: ++ description: | ++ Date and time at which the image was created, formatted in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ ++ This information is only available if present in the image, ++ and omitted otherwise. ++ type: ++ - string ++ - "null" ++ format: dateTime ++ example: 2022-02-04T21:20:12.497794809Z ++ Author: ++ description: | ++ Name of the author that was specified when committing the image, or as ++ specified through MAINTAINER (deprecated) in the Dockerfile. ++ type: ++ - string ++ - "null" ++ example: "" ++ Config: ++ $ref: "#/components/schemas/ImageConfig" ++ Architecture: ++ description: | ++ Hardware CPU architecture that the image runs on. ++ type: string ++ example: arm ++ Variant: ++ description: | ++ CPU architecture variant (presently ARM-only). ++ type: ++ - string ++ - "null" ++ example: v7 ++ Os: ++ description: | ++ Operating System the image is built to run on. ++ type: string ++ example: linux ++ OsVersion: ++ description: | ++ Operating System version the image is built to run on (especially ++ for Windows). ++ type: ++ - string ++ - "null" ++ example: "" ++ Size: ++ description: | ++ Total size of the image variant, including all layers it is composed of. ++ ++ For multi-platform images, this is the size of the platform variant ++ selected by the `platform` query parameter. If no platform is specified, ++ the daemon selects a platform as described in the `platform` parameter. ++ ++ When using the containerd image store, this includes both the image content ++ that's present locally and the unpacked snapshot data for the selected ++ variant. ++ ++ Image data may be shared between images, so this size does not indicate ++ how much space would be reclaimed by deleting the image. ++ type: integer ++ format: int64 ++ example: 1239828 ++ GraphDriver: ++ allOf: ++ - $ref: "#/components/schemas/DriverData" ++ - anyOf: ++ - {} ++ - type: "null" ++ RootFS: ++ description: | ++ Information about the image's RootFS, including the layer IDs. ++ type: object ++ required: ++ - Type ++ properties: ++ Type: ++ type: string ++ example: layers ++ Layers: ++ type: array ++ items: ++ type: string ++ example: ++ - sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6 ++ - sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef ++ Metadata: ++ description: | ++ Additional metadata of the image in the local cache. This information ++ is local to the daemon, and not part of the image itself. ++ type: object ++ properties: ++ LastTagTime: ++ description: | ++ Date and time at which the image was last tagged in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ ++ This information is only available if the image was tagged locally, ++ and omitted otherwise. ++ type: ++ - string ++ - "null" ++ format: dateTime ++ example: 2022-02-28T14:40:02.623929178Z ++ Identity: ++ description: |- ++ Identity holds information about the identity and origin of the image. ++ This is trusted information verified by the daemon and cannot be modified ++ by tagging an image to a different name. ++ type: object ++ properties: ++ Signature: ++ description: Signature contains the properties of verified signatures for the image. ++ type: array ++ items: ++ $ref: "#/components/schemas/SignatureIdentity" ++ Pull: ++ description: |- ++ Pull contains remote location information if image was created via pull. ++ If image was pulled via mirror, this contains the original repository location. ++ After successful push this images also contains the pushed repository location. ++ type: array ++ items: ++ $ref: "#/components/schemas/PullIdentity" ++ Build: ++ description: Build contains build reference information if image was created via build. ++ type: array ++ items: ++ $ref: "#/components/schemas/BuildIdentity" ++ BuildIdentity: ++ description: BuildIdentity contains build reference information if image was created via build. ++ type: object ++ properties: ++ Ref: ++ description: |- ++ Ref is the identifier for the build request. This reference can be used to ++ look up the build details in BuildKit history API. ++ type: string ++ CreatedAt: ++ description: CreatedAt is the time when the build ran. ++ type: string ++ format: date-time ++ PullIdentity: ++ description: |- ++ PullIdentity contains remote location information if image was created via pull. ++ If image was pulled via mirror, this contains the original repository location. ++ type: object ++ properties: ++ Repository: ++ description: Repository is the remote repository location the image was pulled from. ++ type: string ++ SignatureIdentity: ++ description: SignatureIdentity contains the properties of verified signatures for the image. ++ type: object ++ properties: ++ Name: ++ description: Name is a textual description summarizing the type of signature. ++ type: string ++ Timestamps: ++ description: Timestamps contains a list of verified signed timestamps for the signature. ++ type: array ++ items: ++ $ref: "#/components/schemas/SignatureTimestamp" ++ KnownSigner: ++ allOf: ++ - $ref: "#/components/schemas/KnownSignerIdentity" ++ - description: KnownSigner is an identifier for a special signer identity that is known to the implementation. ++ DockerReference: ++ description: |- ++ DockerReference is the Docker image reference associated with the signature. ++ This is an optional field only present in older hashedrecord signatures. ++ type: string ++ Signer: ++ allOf: ++ - $ref: "#/components/schemas/SignerIdentity" ++ - description: Signer contains information about the signer certificate used to sign the image. ++ SignatureType: ++ allOf: ++ - $ref: "#/components/schemas/SignatureType" ++ - description: SignatureType is the type of signature format. E.g. "bundle-v0.3" or "hashedrecord". ++ Error: ++ description: |- ++ Error contains error information if signature verification failed. ++ Other fields will be empty in this case. ++ type: string ++ Warnings: ++ description: |- ++ Warnings contains any warnings that occurred during signature verification. ++ For example, if there was no internet connectivity and cached trust roots were used. ++ Warning does not indicate a failed verification but may point to configuration issues. ++ type: array ++ items: ++ type: string ++ SignatureTimestamp: ++ description: SignatureTimestamp contains information about a verified signed timestamp for an image signature. ++ type: object ++ properties: ++ Type: ++ $ref: "#/components/schemas/SignatureTimestampType" ++ URI: ++ type: string ++ Timestamp: ++ type: string ++ format: date-time ++ SignatureTimestampType: ++ description: SignatureTimestampType is the type of timestamp used in the signature. ++ type: string ++ enum: ++ - Tlog ++ - TimestampAuthority ++ SignatureType: ++ description: SignatureType is the type of signature format. ++ type: string ++ enum: ++ - bundle-v0.3 ++ - simplesigning-v1 ++ KnownSignerIdentity: ++ description: KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation. ++ type: string ++ enum: ++ - DHI ++ SignerIdentity: ++ description: SignerIdentity contains information about the signer certificate used to sign the image. ++ type: object ++ properties: ++ CertificateIssuer: ++ type: string ++ description: CertificateIssuer is the certificate issuer. ++ SubjectAlternativeName: ++ type: string ++ description: SubjectAlternativeName is the certificate subject alternative name. ++ Issuer: ++ type: string ++ description: |- ++ The OIDC issuer. Should match `iss` claim of ID token or, in the case of ++ a federated login like Dex it should match the issuer URL of the ++ upstream issuer. The issuer is not set the extensions are invalid and ++ will fail to render. ++ BuildSignerURI: ++ type: string ++ description: Reference to specific build instructions that are responsible for signing. ++ BuildSignerDigest: ++ type: string ++ description: Immutable reference to the specific version of the build instructions that is responsible for signing. ++ RunnerEnvironment: ++ type: string ++ description: Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure. ++ SourceRepositoryURI: ++ type: string ++ description: Source repository URL that the build was based on. ++ SourceRepositoryDigest: ++ type: string ++ description: Immutable reference to a specific version of the source code that the build was based upon. ++ SourceRepositoryRef: ++ type: string ++ description: Source Repository Ref that the build run was based upon. ++ SourceRepositoryIdentifier: ++ type: string ++ description: Immutable identifier for the source repository the workflow was based upon. ++ SourceRepositoryOwnerURI: ++ type: string ++ description: Source repository owner URL of the owner of the source repository that the build was based on. ++ SourceRepositoryOwnerIdentifier: ++ type: string ++ description: Immutable identifier for the owner of the source repository that the workflow was based upon. ++ BuildConfigURI: ++ type: string ++ description: Build Config URL to the top-level/initiating build instructions. ++ BuildConfigDigest: ++ type: string ++ description: Immutable reference to the specific version of the top-level/initiating build instructions. ++ BuildTrigger: ++ type: string ++ description: Event or action that initiated the build. ++ RunInvocationURI: ++ type: string ++ description: Run Invocation URL to uniquely identify the build execution. ++ SourceRepositoryVisibilityAtSigning: ++ type: string ++ description: Source repository visibility at the time of signing the certificate. ++ ImageSummary: ++ type: object ++ x-go-name: Summary ++ required: ++ - Id ++ - ParentId ++ - RepoTags ++ - RepoDigests ++ - Created ++ - Size ++ - SharedSize ++ - Labels ++ - Containers ++ properties: ++ Id: ++ description: | ++ ID is the content-addressable ID of an image. ++ ++ This identifier is a content-addressable digest calculated from the ++ image's configuration (which includes the digests of layers used by ++ the image). ++ ++ Note that this digest differs from the `RepoDigests` below, which ++ holds digests of image manifests that reference the image. ++ type: string ++ example: sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710 ++ ParentId: ++ description: | ++ ID of the parent image. ++ ++ Depending on how the image was created, this field may be empty and ++ is only set for images that were built/created locally. This field ++ is empty if the image was pulled from an image registry. ++ type: string ++ example: "" ++ RepoTags: ++ description: | ++ List of image names/tags in the local image cache that reference this ++ image. ++ ++ Multiple image tags can refer to the same image, and this list may be ++ empty if no tags reference the image, in which case the image is ++ "untagged", in which case it can still be referenced by its ID. ++ type: array ++ items: ++ type: string ++ example: ++ - example:1.0 ++ - example:latest ++ - example:stable ++ - internal.registry.example.com:5000/example:1.0 ++ RepoDigests: ++ description: | ++ List of content-addressable digests of locally available image manifests ++ that the image is referenced from. Multiple manifests can refer to the ++ same image. ++ ++ These digests are usually only available if the image was either pulled ++ from a registry, or if the image was pushed to a registry, which is when ++ the manifest is generated and its digest calculated. ++ type: array ++ items: ++ type: string ++ example: ++ - example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb ++ - internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578 ++ Created: ++ description: | ++ Date and time at which the image was created as a Unix timestamp ++ (number of seconds since EPOCH). ++ type: integer ++ example: "1644009612" ++ Size: ++ description: | ++ Total size of the image including all layers it is composed of. ++ type: integer ++ format: int64 ++ example: 172064416 ++ SharedSize: ++ description: | ++ Total size of image layers that are shared between this image and other ++ images. ++ ++ This size is not calculated by default. `-1` indicates that the value ++ has not been set / calculated. ++ type: integer ++ format: int64 ++ example: 1239828 ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ Containers: ++ description: | ++ Number of containers using this image. Includes both stopped and running ++ containers. ++ ++ `-1` indicates that the value has not been set / calculated. ++ type: integer ++ example: 2 ++ Manifests: ++ description: | ++ Manifests is a list of manifests available in this image. ++ It provides a more detailed view of the platform-specific image manifests ++ or other image-attached data like build attestations. ++ ++ WARNING: This is experimental and may change at any time without any backward ++ compatibility. ++ type: array ++ x-omitempty: true ++ items: ++ $ref: "#/components/schemas/ImageManifestSummary" ++ Descriptor: ++ allOf: ++ - $ref: "#/components/schemas/OCIDescriptor" ++ - anyOf: ++ - description: | ++ Descriptor is an OCI descriptor of the image target. ++ In case of a multi-platform image, this descriptor points to the OCI index ++ or a manifest list. ++ ++ This field is only present if the daemon provides a multi-platform image store. ++ ++ WARNING: This is experimental and may change at any time without any backward ++ compatibility. ++ - type: "null" ++ ImagesDiskUsage: ++ type: object ++ x-go-name: DiskUsage ++ x-go-package: github.com/moby/moby/api/types/image ++ description: | ++ represents system data usage for image resources. ++ properties: ++ ActiveCount: ++ description: | ++ Count of active images. ++ type: integer ++ format: int64 ++ example: 1 ++ TotalCount: ++ description: | ++ Count of all images. ++ type: integer ++ format: int64 ++ example: 4 ++ Reclaimable: ++ description: | ++ Disk space that can be reclaimed by removing unused images. ++ type: integer ++ format: int64 ++ example: 12345678 ++ TotalSize: ++ description: | ++ Disk space in use by images. ++ type: integer ++ format: int64 ++ example: 98765432 ++ Items: ++ description: | ++ List of image summaries. ++ type: array ++ x-omitempty: true ++ items: ++ x-go-type: ++ type: Summary ++ AuthConfig: ++ type: object ++ properties: ++ username: ++ type: string ++ password: ++ type: string ++ serveraddress: ++ type: string ++ example: ++ username: hannibal ++ password: xxxx ++ serveraddress: https://index.docker.io/v1/ ++ AuthResponse: ++ description: | ++ An identity token was generated successfully. ++ type: object ++ required: ++ - Status ++ properties: ++ Status: ++ description: The status of the authentication ++ type: string ++ example: Login Succeeded ++ IdentityToken: ++ description: An opaque token used to authenticate a user after a successful login ++ type: string ++ example: 9cbaf023786cd7... ++ ProcessConfig: ++ type: object ++ properties: ++ privileged: ++ type: boolean ++ user: ++ type: string ++ tty: ++ type: boolean ++ entrypoint: ++ type: string ++ arguments: ++ type: array ++ items: ++ type: string ++ Volume: ++ type: object ++ required: ++ - Name ++ - Driver ++ - Mountpoint ++ - Labels ++ - Scope ++ - Options ++ properties: ++ Name: ++ type: string ++ description: Name of the volume. ++ example: tardis ++ Driver: ++ type: string ++ description: Name of the volume driver used by the volume. ++ example: custom ++ Mountpoint: ++ type: string ++ description: Mount path of the volume on the host. ++ example: /var/lib/docker/volumes/tardis ++ CreatedAt: ++ type: string ++ format: dateTime ++ description: Date/Time the volume was created. ++ example: 2016-06-07T20:31:11.853781916Z ++ Status: ++ type: object ++ description: | ++ Low-level details about the volume, provided by the volume driver. ++ Details are returned as a map with key/value pairs: ++ `{"key":"value","key2":"value2"}`. ++ ++ The `Status` field is optional, and is omitted if the volume driver ++ does not support this feature. ++ additionalProperties: ++ type: object ++ example: ++ hello: world ++ Labels: ++ type: object ++ description: User-defined key/value metadata. ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ Scope: ++ type: string ++ description: | ++ The level at which the volume exists. Either `global` for cluster-wide, ++ or `local` for machine level. ++ default: local ++ enum: ++ - local ++ - global ++ example: local ++ ClusterVolume: ++ $ref: "#/components/schemas/ClusterVolume" ++ Options: ++ type: object ++ description: | ++ The driver specific options used when creating the volume. ++ additionalProperties: ++ type: string ++ example: ++ device: tmpfs ++ o: size=100m,uid=1000 ++ type: tmpfs ++ UsageData: ++ type: ++ - object ++ - "null" ++ x-go-name: UsageData ++ required: ++ - Size ++ - RefCount ++ description: | ++ Usage details about the volume. This information is used by the ++ `GET /system/df` endpoint, and omitted in other endpoints. ++ properties: ++ Size: ++ type: integer ++ format: int64 ++ default: -1 ++ description: | ++ Amount of disk space used by the volume (in bytes). This information ++ is only available for volumes created with the `"local"` volume ++ driver. For volumes created with other volume drivers, this field ++ is set to `-1` ("not available") ++ RefCount: ++ type: integer ++ format: int64 ++ default: -1 ++ description: | ++ The number of containers referencing this volume. This field ++ is set to `-1` if the reference-count is not available. ++ VolumesDiskUsage: ++ type: object ++ x-go-name: DiskUsage ++ x-go-package: github.com/moby/moby/api/types/volume ++ description: | ++ represents system data usage for volume resources. ++ properties: ++ ActiveCount: ++ description: | ++ Count of active volumes. ++ type: integer ++ format: int64 ++ example: 1 ++ TotalCount: ++ description: | ++ Count of all volumes. ++ type: integer ++ format: int64 ++ example: 4 ++ Reclaimable: ++ description: | ++ Disk space that can be reclaimed by removing inactive volumes. ++ type: integer ++ format: int64 ++ example: 12345678 ++ TotalSize: ++ description: | ++ Disk space in use by volumes. ++ type: integer ++ format: int64 ++ example: 98765432 ++ Items: ++ description: | ++ List of volumes. ++ type: array ++ x-omitempty: true ++ items: ++ x-go-type: ++ type: Volume ++ VolumeCreateRequest: ++ description: Volume configuration ++ type: object ++ title: VolumeConfig ++ x-go-name: CreateRequest ++ properties: ++ Name: ++ description: | ++ The new volume's name. If not specified, Docker generates a name. ++ type: string ++ example: tardis ++ Driver: ++ description: Name of the volume driver to use. ++ type: string ++ default: local ++ example: custom ++ DriverOpts: ++ description: | ++ A mapping of driver options and values. These options are ++ passed directly to the driver and are driver specific. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ device: tmpfs ++ o: size=100m,uid=1000 ++ type: tmpfs ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ ClusterVolumeSpec: ++ $ref: "#/components/schemas/ClusterVolumeSpec" ++ VolumeListResponse: ++ type: object ++ title: VolumeListResponse ++ x-go-name: ListResponse ++ description: Volume list response ++ properties: ++ Volumes: ++ type: array ++ description: List of volumes ++ items: ++ $ref: "#/components/schemas/Volume" ++ Warnings: ++ type: array ++ description: | ++ Warnings that occurred when fetching the list of volumes. ++ items: ++ type: string ++ example: [] ++ Network: ++ type: object ++ properties: ++ Name: ++ description: | ++ Name of the network. ++ type: string ++ example: my_network ++ x-omitempty: false ++ Id: ++ description: | ++ ID that uniquely identifies a network on a single machine. ++ type: string ++ x-go-name: ID ++ x-omitempty: false ++ example: 7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99 ++ Created: ++ description: | ++ Date and time at which the network was created in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ x-omitempty: false ++ x-go-type: ++ type: Time ++ import: ++ package: time ++ hints: ++ nullable: false ++ example: 2016-10-19T04:33:30.360899459Z ++ Scope: ++ description: | ++ The level at which the network exists (e.g. `swarm` for cluster-wide ++ or `local` for machine level) ++ type: string ++ x-omitempty: false ++ example: local ++ Driver: ++ description: | ++ The name of the driver used to create the network (e.g. `bridge`, ++ `overlay`). ++ type: string ++ x-omitempty: false ++ example: overlay ++ EnableIPv4: ++ description: | ++ Whether the network was created with IPv4 enabled. ++ type: boolean ++ x-omitempty: false ++ example: true ++ EnableIPv6: ++ description: | ++ Whether the network was created with IPv6 enabled. ++ type: boolean ++ x-omitempty: false ++ example: false ++ IPAM: ++ allOf: ++ - $ref: "#/components/schemas/IPAM" ++ - description: | ++ The network's IP Address Management. ++ x-nullable: false ++ x-omitempty: false ++ Internal: ++ description: | ++ Whether the network is created to only allow internal networking ++ connectivity. ++ type: boolean ++ x-omitempty: false ++ default: false ++ example: false ++ Attachable: ++ description: | ++ Whether a global / swarm scope network is manually attachable by regular ++ containers from workers in swarm mode. ++ type: boolean ++ x-omitempty: false ++ default: false ++ example: false ++ Ingress: ++ description: | ++ Whether the network is providing the routing-mesh for the swarm cluster. ++ type: boolean ++ x-omitempty: false ++ default: false ++ example: false ++ ConfigFrom: ++ allOf: ++ - $ref: "#/components/schemas/ConfigReference" ++ - x-nullable: false ++ x-omitempty: false ++ ConfigOnly: ++ description: | ++ Whether the network is a config-only network. Config-only networks are ++ placeholder networks for network configurations to be used by other ++ networks. Config-only networks cannot be used directly to run containers ++ or services. ++ type: boolean ++ x-omitempty: false ++ default: false ++ Options: ++ description: | ++ Network-specific options uses when creating the network. ++ type: object ++ x-omitempty: false ++ additionalProperties: ++ type: string ++ example: ++ com.docker.network.bridge.default_bridge: "true" ++ com.docker.network.bridge.enable_icc: "true" ++ com.docker.network.bridge.enable_ip_masquerade: "true" ++ com.docker.network.bridge.host_binding_ipv4: 0.0.0.0 ++ com.docker.network.bridge.name: docker0 ++ com.docker.network.driver.mtu: "1500" ++ Labels: ++ description: | ++ Metadata specific to the network being created. ++ type: object ++ x-omitempty: false ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ Peers: ++ description: | ++ List of peer nodes for an overlay network. This field is only present ++ for overlay networks, and omitted for other network types. ++ type: array ++ x-omitempty: true ++ items: ++ $ref: "#/components/schemas/PeerInfo" ++ NetworkSummary: ++ description: Network list response item ++ x-go-name: Summary ++ type: object ++ allOf: ++ - $ref: "#/components/schemas/Network" ++ NetworkInspect: ++ description: The body of the "get network" http response message. ++ x-go-name: Inspect ++ type: object ++ allOf: ++ - $ref: "#/components/schemas/Network" ++ properties: ++ Containers: ++ description: | ++ Contains endpoints attached to the network. ++ type: object ++ x-omitempty: false ++ additionalProperties: ++ $ref: "#/components/schemas/EndpointResource" ++ example: ++ 19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c: ++ Name: test ++ EndpointID: 628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a ++ MacAddress: 02:42:ac:13:00:02 ++ IPv4Address: 172.19.0.2/16 ++ IPv6Address: "" ++ Services: ++ description: | ++ List of services using the network. This field is only present for ++ swarm scope networks, and omitted for local scope networks. ++ type: object ++ x-omitempty: true ++ additionalProperties: ++ x-go-type: ++ type: ServiceInfo ++ hints: ++ nullable: false ++ Status: ++ allOf: ++ - $ref: "#/components/schemas/NetworkStatus" ++ - description: | ++ provides runtime information about the network such as the number of allocated IPs. ++ NetworkStatus: ++ description: | ++ provides runtime information about the network such as the number of allocated IPs. ++ type: object ++ x-go-name: Status ++ properties: ++ IPAM: ++ $ref: "#/components/schemas/IPAMStatus" ++ ServiceInfo: ++ x-omitempty: false ++ description: | ++ represents service parameters with the list of service's tasks ++ type: object ++ properties: ++ VIP: ++ type: string ++ x-omitempty: false ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ Ports: ++ type: array ++ x-omitempty: false ++ items: ++ type: string ++ LocalLBIndex: ++ type: integer ++ format: int ++ x-omitempty: false ++ x-go-type: ++ type: int ++ Tasks: ++ type: array ++ x-omitempty: false ++ items: ++ $ref: "#/components/schemas/NetworkTaskInfo" ++ NetworkTaskInfo: ++ x-omitempty: false ++ x-go-name: Task ++ description: | ++ carries the information about one backend task ++ type: object ++ properties: ++ Name: ++ type: string ++ x-omitempty: false ++ EndpointID: ++ type: string ++ x-omitempty: false ++ EndpointIP: ++ type: string ++ x-omitempty: false ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ Info: ++ type: object ++ x-omitempty: false ++ additionalProperties: ++ type: string ++ ConfigReference: ++ x-omitempty: false ++ description: | ++ The config-only network source to provide the configuration for ++ this network. ++ type: object ++ properties: ++ Network: ++ description: | ++ The name of the config-only network that provides the network's ++ configuration. The specified network must be an existing config-only ++ network. Only network names are allowed, not network IDs. ++ type: string ++ x-omitempty: false ++ example: config_only_network_01 ++ IPAM: ++ type: object ++ x-omitempty: false ++ properties: ++ Driver: ++ description: Name of the IPAM driver to use. ++ type: string ++ default: default ++ example: default ++ Config: ++ description: | ++ List of IPAM configuration options, specified as a map: ++ ++ ``` ++ {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } ++ ``` ++ type: array ++ items: ++ $ref: "#/components/schemas/IPAMConfig" ++ Options: ++ description: Driver-specific options, specified as a map. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ foo: bar ++ IPAMConfig: ++ type: object ++ properties: ++ Subnet: ++ type: string ++ example: 172.20.0.0/16 ++ IPRange: ++ type: string ++ example: 172.20.10.0/24 ++ Gateway: ++ type: string ++ example: 172.20.10.11 ++ AuxiliaryAddresses: ++ type: object ++ additionalProperties: ++ type: string ++ IPAMStatus: ++ type: object ++ x-omitempty: false ++ properties: ++ Subnets: ++ type: object ++ additionalProperties: ++ $ref: "#/components/schemas/SubnetStatus" ++ example: ++ 172.16.0.0/16: ++ IPsInUse: 3 ++ DynamicIPsAvailable: 65533 ++ 2001:db8:abcd:0012::0/96: ++ IPsInUse: 5 ++ DynamicIPsAvailable: 4294967291 ++ x-go-type: ++ type: SubnetStatuses ++ kind: map ++ SubnetStatus: ++ type: object ++ x-omitempty: false ++ properties: ++ IPsInUse: ++ description: | ++ Number of IP addresses in the subnet that are in use or reserved and are therefore unavailable for allocation, saturating at 264 - 1. ++ type: integer ++ format: uint64 ++ x-omitempty: false ++ DynamicIPsAvailable: ++ description: | ++ Number of IP addresses within the network's IPRange for the subnet that are available for allocation, saturating at 264 - 1. ++ type: integer ++ format: uint64 ++ x-omitempty: false ++ EndpointResource: ++ type: object ++ description: | ++ contains network resources allocated and used for a container in a network. ++ properties: ++ Name: ++ type: string ++ x-omitempty: false ++ example: container_1 ++ EndpointID: ++ type: string ++ x-omitempty: false ++ example: 628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a ++ MacAddress: ++ type: string ++ x-omitempty: false ++ example: 02:42:ac:13:00:02 ++ x-go-type: ++ type: HardwareAddr ++ IPv4Address: ++ type: string ++ x-omitempty: false ++ example: 172.19.0.2/16 ++ x-go-type: ++ type: Prefix ++ import: ++ package: net/netip ++ IPv6Address: ++ type: string ++ x-omitempty: false ++ example: "" ++ x-go-type: ++ type: Prefix ++ import: ++ package: net/netip ++ PeerInfo: ++ description: | ++ represents one peer of an overlay network. ++ type: object ++ properties: ++ Name: ++ description: ID of the peer-node in the Swarm cluster. ++ type: string ++ x-omitempty: false ++ example: 6869d7c1732b ++ IP: ++ description: IP-address of the peer-node in the Swarm cluster. ++ type: string ++ x-omitempty: false ++ example: 10.133.77.91 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ NetworkCreateResponse: ++ description: OK response to NetworkCreate operation ++ type: object ++ title: NetworkCreateResponse ++ x-go-name: CreateResponse ++ required: ++ - Id ++ - Warning ++ properties: ++ Id: ++ description: The ID of the created network. ++ type: string ++ example: b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d ++ Warning: ++ description: Warnings encountered when creating the container ++ type: string ++ example: "" ++ BuildInfo: ++ type: object ++ properties: ++ id: ++ type: string ++ stream: ++ type: string ++ errorDetail: ++ $ref: "#/components/schemas/ErrorDetail" ++ status: ++ type: string ++ progressDetail: ++ $ref: "#/components/schemas/ProgressDetail" ++ aux: ++ $ref: "#/components/schemas/ImageID" ++ BuildCache: ++ type: object ++ description: | ++ BuildCache contains information about a build cache record. ++ properties: ++ ID: ++ type: string ++ description: | ++ Unique ID of the build cache record. ++ example: ndlpt0hhvkqcdfkputsk4cq9c ++ Parents: ++ description: | ++ List of parent build cache record IDs. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - hw53o5aio51xtltp5xjp8v7fx ++ Type: ++ type: string ++ description: | ++ Cache record type. ++ example: regular ++ enum: ++ - internal ++ - frontend ++ - source.local ++ - source.git.checkout ++ - exec.cachemount ++ - regular ++ Description: ++ type: string ++ description: | ++ Description of the build-step that produced the build cache. ++ example: mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache ++ InUse: ++ type: boolean ++ description: | ++ Indicates if the build cache is in use. ++ example: false ++ Shared: ++ type: boolean ++ description: | ++ Indicates if the build cache is shared. ++ example: true ++ Size: ++ description: | ++ Amount of disk space used by the build cache (in bytes). ++ type: integer ++ example: 51 ++ CreatedAt: ++ description: | ++ Date and time at which the build cache was created in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2016-08-18T10:44:24.496525531Z ++ LastUsedAt: ++ description: | ++ Date and time at which the build cache was last used in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: ++ - string ++ - "null" ++ format: dateTime ++ example: 2017-08-09T07:09:37.632105588Z ++ UsageCount: ++ type: integer ++ example: 26 ++ BuildCacheDiskUsage: ++ type: object ++ x-go-name: DiskUsage ++ x-go-package: github.com/moby/moby/api/types/build ++ description: | ++ represents system data usage for build cache resources. ++ properties: ++ ActiveCount: ++ description: | ++ Count of active build cache records. ++ type: integer ++ format: int64 ++ example: 1 ++ TotalCount: ++ description: | ++ Count of all build cache records. ++ type: integer ++ format: int64 ++ example: 4 ++ Reclaimable: ++ description: | ++ Disk space that can be reclaimed by removing inactive build cache records. ++ type: integer ++ format: int64 ++ example: 12345678 ++ TotalSize: ++ description: | ++ Disk space in use by build cache records. ++ type: integer ++ format: int64 ++ example: 98765432 ++ Items: ++ description: | ++ List of build cache records. ++ type: array ++ x-omitempty: true ++ items: ++ x-go-type: ++ type: CacheRecord ++ ImageID: ++ type: object ++ description: Image ID or Digest ++ properties: ++ ID: ++ type: string ++ example: ++ ID: sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c ++ CreateImageInfo: ++ type: object ++ properties: ++ id: ++ type: string ++ errorDetail: ++ $ref: "#/components/schemas/ErrorDetail" ++ status: ++ type: string ++ progressDetail: ++ $ref: "#/components/schemas/ProgressDetail" ++ PushImageInfo: ++ type: object ++ properties: ++ errorDetail: ++ $ref: "#/components/schemas/ErrorDetail" ++ status: ++ type: string ++ progressDetail: ++ $ref: "#/components/schemas/ProgressDetail" ++ DeviceInfo: ++ type: object ++ description: | ++ DeviceInfo represents a device that can be used by a container. ++ properties: ++ Source: ++ type: string ++ example: cdi ++ description: | ++ The origin device driver. ++ ID: ++ type: string ++ example: vendor.com/gpu=0 ++ description: | ++ The unique identifier for the device within its source driver. ++ For CDI devices, this would be an FQDN like "vendor.com/gpu=0". ++ NRIInfo: ++ description: | ++ Information about the Node Resource Interface (NRI). ++ ++ This field is only present if NRI is enabled. ++ type: ++ - object ++ - "null" ++ properties: ++ Info: ++ description: | ++ Information about NRI, provided as "label" / "value" pairs. ++ ++ ++ ++ ++ ++ ++ > **Note**: The information returned in this field, including the ++ > formatting of values and labels, should not be considered stable, ++ > and may change without notice. ++ type: array ++ items: ++ type: array ++ items: ++ type: string ++ example: ++ - - plugin-path ++ - /opt/docker/nri/plugins ++ ErrorDetail: ++ type: object ++ properties: ++ code: ++ type: integer ++ message: ++ type: string ++ ProgressDetail: ++ type: object ++ properties: ++ current: ++ type: integer ++ total: ++ type: integer ++ ErrorResponse: ++ description: Represents an error. ++ type: object ++ required: ++ - message ++ properties: ++ message: ++ description: The error message. ++ type: string ++ example: ++ message: Something went wrong. ++ IDResponse: ++ description: Response to an API call that returns just an Id ++ type: object ++ x-go-name: IDResponse ++ required: ++ - Id ++ properties: ++ Id: ++ description: The id of the newly created object. ++ type: string ++ NetworkConnectRequest: ++ description: | ++ NetworkConnectRequest represents the data to be used to connect a container to a network. ++ type: object ++ x-go-name: ConnectRequest ++ required: ++ - Container ++ properties: ++ Container: ++ type: string ++ description: The ID or name of the container to connect to the network. ++ example: 3613f73ba0e4 ++ EndpointConfig: ++ allOf: ++ - $ref: "#/components/schemas/EndpointSettings" ++ - anyOf: ++ - {} ++ - type: "null" ++ NetworkDisconnectRequest: ++ description: | ++ NetworkDisconnectRequest represents the data to be used to disconnect a container from a network. ++ type: object ++ x-go-name: DisconnectRequest ++ required: ++ - Container ++ properties: ++ Container: ++ type: string ++ description: The ID or name of the container to disconnect from the network. ++ example: 3613f73ba0e4 ++ Force: ++ type: boolean ++ description: Force the container to disconnect from the network. ++ default: false ++ x-omitempty: false ++ example: false ++ EndpointSettings: ++ description: Configuration for a network endpoint. ++ type: object ++ properties: ++ IPAMConfig: ++ $ref: "#/components/schemas/EndpointIPAMConfig" ++ Links: ++ type: array ++ items: ++ type: string ++ example: ++ - container_1 ++ - container_2 ++ MacAddress: ++ description: | ++ MAC address for the endpoint on this network. The network driver might ignore this parameter. ++ type: string ++ example: 02:42:ac:11:00:04 ++ x-go-type: ++ type: HardwareAddr ++ Aliases: ++ type: array ++ items: ++ type: string ++ example: ++ - server_x ++ - server_y ++ DriverOpts: ++ description: | ++ DriverOpts is a mapping of driver options and values. These options ++ are passed directly to the driver and are driver specific. ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ GwPriority: ++ description: | ++ This property determines which endpoint will provide the default ++ gateway for a container. The endpoint with the highest priority will ++ be used. If multiple endpoints have the same priority, endpoints are ++ lexicographically sorted based on their network name, and the one ++ that sorts first is picked. ++ type: integer ++ format: int64 ++ example: ++ - 10 ++ NetworkID: ++ description: | ++ Unique ID of the network. ++ type: string ++ example: 08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a ++ EndpointID: ++ description: | ++ Unique ID for the service endpoint in a Sandbox. ++ type: string ++ example: b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b ++ Gateway: ++ description: | ++ Gateway address for this network. ++ type: string ++ example: 172.17.0.1 ++ IPAddress: ++ description: | ++ IPv4 address. ++ type: string ++ example: 172.17.0.4 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ IPPrefixLen: ++ description: | ++ Mask length of the IPv4 address. ++ type: integer ++ example: 16 ++ IPv6Gateway: ++ description: | ++ IPv6 gateway address. ++ type: string ++ example: 2001:db8:2::100 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ GlobalIPv6Address: ++ description: | ++ Global IPv6 address. ++ type: string ++ example: 2001:db8::5689 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ GlobalIPv6PrefixLen: ++ description: | ++ Mask length of the global IPv6 address. ++ type: integer ++ format: int64 ++ example: 64 ++ DNSNames: ++ description: | ++ List of all DNS names an endpoint has on a specific network. This ++ list is based on the container name, network aliases, container short ++ ID, and hostname. ++ ++ These DNS names are non-fully qualified but can contain several dots. ++ You can get fully qualified DNS names by appending `.`. ++ For instance, if container name is `my.ctr` and the network is named ++ `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be ++ `my.ctr.testnet`. ++ type: array ++ items: ++ type: string ++ example: ++ - foobar ++ - server_x ++ - server_y ++ - my.ctr ++ EndpointIPAMConfig: ++ description: | ++ EndpointIPAMConfig represents an endpoint's IPAM configuration. ++ type: ++ - object ++ - "null" ++ properties: ++ IPv4Address: ++ type: string ++ example: 172.20.30.33 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ IPv6Address: ++ type: string ++ example: 2001:db8:abcd::3033 ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ LinkLocalIPs: ++ type: array ++ items: ++ type: string ++ x-go-type: ++ type: Addr ++ import: ++ package: net/netip ++ example: ++ - 169.254.34.68 ++ - fe80::3468 ++ PluginMount: ++ type: object ++ x-go-name: Mount ++ required: ++ - Name ++ - Description ++ - Settable ++ - Source ++ - Destination ++ - Type ++ - Options ++ properties: ++ Name: ++ type: string ++ example: some-mount ++ Description: ++ type: string ++ example: This is a mount that's used by the plugin. ++ Settable: ++ type: array ++ items: ++ type: string ++ Source: ++ type: string ++ example: /var/lib/docker/plugins/ ++ Destination: ++ type: string ++ example: /mnt/state ++ Type: ++ type: string ++ example: bind ++ Options: ++ type: array ++ items: ++ type: string ++ example: ++ - rbind ++ - rw ++ PluginDevice: ++ type: object ++ x-go-name: Device ++ required: ++ - Name ++ - Description ++ - Settable ++ - Path ++ properties: ++ Name: ++ type: string ++ Description: ++ type: string ++ Settable: ++ type: array ++ items: ++ type: string ++ Path: ++ type: string ++ example: /dev/fuse ++ PluginEnv: ++ type: object ++ x-go-name: Env ++ required: ++ - Name ++ - Description ++ - Settable ++ - Value ++ properties: ++ Name: ++ type: string ++ Description: ++ type: string ++ Settable: ++ type: array ++ items: ++ type: string ++ Value: ++ type: string ++ PluginPrivilege: ++ description: | ++ Describes a permission the user has to accept upon installing ++ the plugin. ++ type: object ++ x-go-name: Privilege ++ properties: ++ Name: ++ type: string ++ example: network ++ Description: ++ type: string ++ Value: ++ type: array ++ items: ++ type: string ++ example: ++ - host ++ Plugin: ++ description: A plugin for the Engine API ++ type: object ++ x-go-name: Plugin ++ required: ++ - Settings ++ - Enabled ++ - Config ++ - Name ++ properties: ++ Id: ++ type: string ++ example: 5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078 ++ Name: ++ type: string ++ example: tiborvass/sample-volume-plugin ++ Enabled: ++ description: True if the plugin is running. False if the plugin is not running, only installed. ++ type: boolean ++ example: true ++ Settings: ++ description: user-configurable settings for the plugin. ++ type: object ++ x-go-name: Settings ++ required: ++ - Args ++ - Devices ++ - Env ++ - Mounts ++ properties: ++ Mounts: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginMount" ++ Env: ++ type: array ++ items: ++ type: string ++ example: ++ - DEBUG=0 ++ Args: ++ type: array ++ items: ++ type: string ++ Devices: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginDevice" ++ PluginReference: ++ description: plugin remote reference used to push/pull the plugin ++ type: string ++ x-go-name: PluginReference ++ example: localhost:5000/tiborvass/sample-volume-plugin:latest ++ Config: ++ description: The config of a plugin. ++ type: object ++ x-go-name: Config ++ required: ++ - Description ++ - Documentation ++ - Interface ++ - Entrypoint ++ - WorkDir ++ - Network ++ - Linux ++ - PidHost ++ - PropagatedMount ++ - IpcHost ++ - Mounts ++ - Env ++ - Args ++ properties: ++ Description: ++ type: string ++ example: A sample volume plugin for Docker ++ Documentation: ++ type: string ++ example: https://docs.docker.com/engine/extend/plugins/ ++ Interface: ++ description: The interface between Docker and the plugin ++ type: object ++ x-go-name: Interface ++ required: ++ - Types ++ - Socket ++ properties: ++ Types: ++ type: array ++ items: ++ type: string ++ x-go-type: ++ type: CapabilityID ++ example: ++ - docker.volumedriver/1.0 ++ Socket: ++ type: string ++ example: plugins.sock ++ ProtocolScheme: ++ type: string ++ example: some.protocol/v1.0 ++ description: Protocol to use for clients connecting to the plugin. ++ enum: ++ - "" ++ - moby.plugins.http/v1 ++ Entrypoint: ++ type: array ++ items: ++ type: string ++ example: ++ - /usr/bin/sample-volume-plugin ++ - /data ++ WorkDir: ++ type: string ++ example: /bin/ ++ User: ++ type: object ++ x-go-name: User ++ properties: ++ UID: ++ type: integer ++ format: uint32 ++ example: 1000 ++ GID: ++ type: integer ++ format: uint32 ++ example: 1000 ++ Network: ++ type: object ++ x-go-name: NetworkConfig ++ required: ++ - Type ++ properties: ++ Type: ++ type: string ++ example: host ++ Linux: ++ type: object ++ x-go-name: LinuxConfig ++ required: ++ - Capabilities ++ - AllowAllDevices ++ - Devices ++ properties: ++ Capabilities: ++ type: array ++ items: ++ type: string ++ example: ++ - CAP_SYS_ADMIN ++ - CAP_SYSLOG ++ AllowAllDevices: ++ type: boolean ++ example: false ++ Devices: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginDevice" ++ PropagatedMount: ++ type: string ++ example: /mnt/volumes ++ IpcHost: ++ type: boolean ++ example: false ++ PidHost: ++ type: boolean ++ example: false ++ Mounts: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginMount" ++ Env: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginEnv" ++ example: ++ - Name: DEBUG ++ Description: If set, prints debug messages ++ Settable: null ++ Value: "0" ++ Args: ++ type: object ++ x-go-name: Args ++ required: ++ - Name ++ - Description ++ - Settable ++ - Value ++ properties: ++ Name: ++ type: string ++ example: args ++ Description: ++ type: string ++ example: command line arguments ++ Settable: ++ type: array ++ items: ++ type: string ++ Value: ++ type: array ++ items: ++ type: string ++ rootfs: ++ type: object ++ x-go-name: RootFS ++ properties: ++ type: ++ type: string ++ example: layers ++ diff_ids: ++ type: array ++ items: ++ type: string ++ example: ++ - sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887 ++ - sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8 ++ ObjectVersion: ++ description: | ++ The version number of the object such as node, service, etc. This is needed ++ to avoid conflicting writes. The client must send the version number along ++ with the modified specification when updating these objects. ++ ++ This approach ensures safe concurrency and determinism in that the change ++ on the object may not be applied if the version number has changed from the ++ last read. In other words, if two update requests specify the same base ++ version, only one of the requests can succeed. As a result, two separate ++ update requests that happen at the same time will not unintentionally ++ overwrite each other. ++ type: object ++ properties: ++ Index: ++ type: integer ++ format: uint64 ++ example: 373531 ++ NodeSpec: ++ type: object ++ properties: ++ Name: ++ description: Name for the node. ++ type: string ++ example: my-node ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ Role: ++ description: Role of the node. ++ type: string ++ enum: ++ - worker ++ - manager ++ example: manager ++ Availability: ++ description: Availability of the node. ++ type: string ++ enum: ++ - active ++ - pause ++ - drain ++ example: active ++ example: ++ Availability: active ++ Name: node-name ++ Role: manager ++ Labels: ++ foo: bar ++ Node: ++ type: object ++ properties: ++ ID: ++ type: string ++ example: 24ifsmvkjbyhk ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ description: | ++ Date and time at which the node was added to the swarm in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2016-08-18T10:44:24.496525531Z ++ UpdatedAt: ++ description: | ++ Date and time at which the node was last updated in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2017-08-09T07:09:37.632105588Z ++ Spec: ++ $ref: "#/components/schemas/NodeSpec" ++ Description: ++ $ref: "#/components/schemas/NodeDescription" ++ Status: ++ $ref: "#/components/schemas/NodeStatus" ++ ManagerStatus: ++ $ref: "#/components/schemas/ManagerStatus" ++ NodeDescription: ++ description: | ++ NodeDescription encapsulates the properties of the Node as reported by the ++ agent. ++ type: object ++ properties: ++ Hostname: ++ type: string ++ example: bf3067039e47 ++ Platform: ++ $ref: "#/components/schemas/Platform" ++ Resources: ++ $ref: "#/components/schemas/ResourceObject" ++ Engine: ++ $ref: "#/components/schemas/EngineDescription" ++ TLSInfo: ++ $ref: "#/components/schemas/TLSInfo" ++ Platform: ++ description: | ++ Platform represents the platform (Arch/OS). ++ type: object ++ properties: ++ Architecture: ++ description: | ++ Architecture represents the hardware architecture (for example, ++ `x86_64`). ++ type: string ++ example: x86_64 ++ OS: ++ description: | ++ OS represents the Operating System (for example, `linux` or `windows`). ++ type: string ++ example: linux ++ EngineDescription: ++ description: EngineDescription provides information about an engine. ++ type: object ++ properties: ++ EngineVersion: ++ type: string ++ example: 17.06.0 ++ Labels: ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ foo: bar ++ Plugins: ++ type: array ++ items: ++ type: object ++ properties: ++ Type: ++ type: string ++ Name: ++ type: string ++ example: ++ - Type: Log ++ Name: awslogs ++ - Type: Log ++ Name: fluentd ++ - Type: Log ++ Name: gcplogs ++ - Type: Log ++ Name: gelf ++ - Type: Log ++ Name: journald ++ - Type: Log ++ Name: json-file ++ - Type: Log ++ Name: splunk ++ - Type: Log ++ Name: syslog ++ - Type: Network ++ Name: bridge ++ - Type: Network ++ Name: host ++ - Type: Network ++ Name: ipvlan ++ - Type: Network ++ Name: macvlan ++ - Type: Network ++ Name: "null" ++ - Type: Network ++ Name: overlay ++ - Type: Volume ++ Name: local ++ - Type: Volume ++ Name: localhost:5000/vieux/sshfs:latest ++ - Type: Volume ++ Name: vieux/sshfs:latest ++ TLSInfo: ++ description: | ++ Information about the issuer of leaf TLS certificates and the trusted root ++ CA certificate. ++ type: object ++ properties: ++ TrustRoot: ++ description: | ++ The root CA certificate(s) that are used to validate leaf TLS ++ certificates. ++ type: string ++ CertIssuerSubject: ++ description: The base64-url-safe-encoded raw subject bytes of the issuer. ++ type: string ++ CertIssuerPublicKey: ++ description: | ++ The base64-url-safe-encoded raw public key bytes of the issuer. ++ type: string ++ example: ++ TrustRoot: | ++ -----BEGIN CERTIFICATE----- ++ MIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw ++ EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0 ++ MzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH ++ A0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf ++ 3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB ++ Af8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO ++ PQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz ++ pxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H ++ -----END CERTIFICATE----- ++ CertIssuerSubject: MBMxETAPBgNVBAMTCHN3YXJtLWNh ++ CertIssuerPublicKey: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A== ++ NodeStatus: ++ description: | ++ NodeStatus represents the status of a node. ++ ++ It provides the current status of the node, as seen by the manager. ++ type: object ++ properties: ++ State: ++ $ref: "#/components/schemas/NodeState" ++ Message: ++ type: string ++ example: "" ++ Addr: ++ description: IP address of the node. ++ type: string ++ example: 172.17.0.2 ++ NodeState: ++ description: NodeState represents the state of a node. ++ type: string ++ enum: ++ - unknown ++ - down ++ - ready ++ - disconnected ++ example: ready ++ ManagerStatus: ++ description: | ++ ManagerStatus represents the status of a manager. ++ ++ It provides the current status of a node's manager component, if the node ++ is a manager. ++ type: ++ - object ++ - "null" ++ properties: ++ Leader: ++ type: boolean ++ default: false ++ example: true ++ Reachability: ++ $ref: "#/components/schemas/Reachability" ++ Addr: ++ description: | ++ The IP address and port at which the manager is reachable. ++ type: string ++ example: 10.0.0.46:2377 ++ Reachability: ++ description: Reachability represents the reachability of a node. ++ type: string ++ enum: ++ - unknown ++ - unreachable ++ - reachable ++ example: reachable ++ SwarmSpec: ++ description: User modifiable swarm configuration. ++ type: object ++ properties: ++ Name: ++ description: Name of the swarm. ++ type: string ++ example: default ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.corp.type: production ++ com.example.corp.department: engineering ++ Orchestration: ++ description: Orchestration configuration. ++ type: ++ - object ++ - "null" ++ properties: ++ TaskHistoryRetentionLimit: ++ description: | ++ The number of historic tasks to keep per instance or node. If ++ negative, never remove completed or failed tasks. ++ type: integer ++ format: int64 ++ example: 10 ++ Raft: ++ description: Raft configuration. ++ type: object ++ properties: ++ SnapshotInterval: ++ description: The number of log entries between snapshots. ++ type: integer ++ format: uint64 ++ example: 10000 ++ KeepOldSnapshots: ++ description: | ++ The number of snapshots to keep beyond the current snapshot. ++ type: integer ++ format: uint64 ++ LogEntriesForSlowFollowers: ++ description: | ++ The number of log entries to keep around to sync up slow followers ++ after a snapshot is created. ++ type: integer ++ format: uint64 ++ example: 500 ++ ElectionTick: ++ description: | ++ The number of ticks that a follower will wait for a message from ++ the leader before becoming a candidate and starting an election. ++ `ElectionTick` must be greater than `HeartbeatTick`. ++ ++ A tick currently defaults to one second, so these translate ++ directly to seconds currently, but this is NOT guaranteed. ++ type: integer ++ example: 3 ++ HeartbeatTick: ++ description: | ++ The number of ticks between heartbeats. Every HeartbeatTick ticks, ++ the leader will send a heartbeat to the followers. ++ ++ A tick currently defaults to one second, so these translate ++ directly to seconds currently, but this is NOT guaranteed. ++ type: integer ++ example: 1 ++ Dispatcher: ++ description: Dispatcher configuration. ++ type: ++ - object ++ - "null" ++ properties: ++ HeartbeatPeriod: ++ description: | ++ The delay for an agent to send a heartbeat to the dispatcher. ++ type: integer ++ format: int64 ++ example: 5000000000 ++ CAConfig: ++ description: CA configuration. ++ type: ++ - object ++ - "null" ++ properties: ++ NodeCertExpiry: ++ description: The duration node certificates are issued for. ++ type: integer ++ format: int64 ++ example: 7776000000000000 ++ ExternalCAs: ++ description: | ++ Configuration for forwarding signing requests to an external ++ certificate authority. ++ type: array ++ items: ++ type: object ++ properties: ++ Protocol: ++ description: | ++ Protocol for communication with the external CA (currently ++ only `cfssl` is supported). ++ type: string ++ enum: ++ - cfssl ++ default: cfssl ++ URL: ++ description: | ++ URL where certificate signing requests should be sent. ++ type: string ++ Options: ++ description: | ++ An object with key/value pairs that are interpreted as ++ protocol-specific options for the external CA driver. ++ type: object ++ additionalProperties: ++ type: string ++ CACert: ++ description: | ++ The root CA certificate (in PEM format) this external CA uses ++ to issue TLS certificates (assumed to be to the current swarm ++ root CA certificate if not provided). ++ type: string ++ SigningCACert: ++ description: | ++ The desired signing CA certificate for all swarm node TLS leaf ++ certificates, in PEM format. ++ type: string ++ SigningCAKey: ++ description: | ++ The desired signing CA key for all swarm node TLS leaf certificates, ++ in PEM format. ++ type: string ++ ForceRotate: ++ description: | ++ An integer whose purpose is to force swarm to generate a new ++ signing CA certificate and key, if none have been specified in ++ `SigningCACert` and `SigningCAKey` ++ format: uint64 ++ type: integer ++ EncryptionConfig: ++ description: Parameters related to encryption-at-rest. ++ type: object ++ properties: ++ AutoLockManagers: ++ description: | ++ If set, generate a key and use it to lock data stored on the ++ managers. ++ type: boolean ++ example: false ++ TaskDefaults: ++ description: Defaults for creating tasks in this cluster. ++ type: object ++ properties: ++ LogDriver: ++ description: | ++ The log driver to use for tasks created in the orchestrator if ++ unspecified by a service. ++ ++ Updating this value only affects new tasks. Existing tasks continue ++ to use their previously configured log driver until recreated. ++ type: object ++ properties: ++ Name: ++ description: | ++ The log driver to use as a default for new tasks. ++ type: string ++ example: json-file ++ Options: ++ description: | ++ Driver-specific options for the selected log driver, specified ++ as key/value pairs. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ max-file: "10" ++ max-size: 100m ++ ClusterInfo: ++ description: | ++ ClusterInfo represents information about the swarm as is returned by the ++ "/info" endpoint. Join-tokens are not included. ++ type: ++ - object ++ - "null" ++ properties: ++ ID: ++ description: The ID of the swarm. ++ type: string ++ example: abajmipo7b4xz5ip2nrla6b11 ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ description: | ++ Date and time at which the swarm was initialised in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2016-08-18T10:44:24.496525531Z ++ UpdatedAt: ++ description: | ++ Date and time at which the swarm was last updated in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: string ++ format: dateTime ++ example: 2017-08-09T07:09:37.632105588Z ++ Spec: ++ $ref: "#/components/schemas/SwarmSpec" ++ TLSInfo: ++ $ref: "#/components/schemas/TLSInfo" ++ RootRotationInProgress: ++ description: | ++ Whether there is currently a root CA rotation in progress for the swarm ++ type: boolean ++ example: false ++ DataPathPort: ++ description: | ++ DataPathPort specifies the data path port number for data traffic. ++ Acceptable port range is 1024 to 49151. ++ If no port is set or is set to 0, the default port (4789) is used. ++ type: integer ++ format: uint32 ++ default: 4789 ++ example: 4789 ++ DefaultAddrPool: ++ description: | ++ Default Address Pool specifies default subnet pools for global scope ++ networks. ++ type: array ++ items: ++ type: string ++ format: CIDR ++ example: ++ - 10.10.0.0/16 ++ - 20.20.0.0/16 ++ SubnetSize: ++ description: | ++ SubnetSize specifies the subnet size of the networks created from the ++ default subnet pool. ++ type: integer ++ format: uint32 ++ maximum: 29 ++ default: 24 ++ example: 24 ++ JoinTokens: ++ description: | ++ JoinTokens contains the tokens workers and managers need to join the swarm. ++ type: object ++ properties: ++ Worker: ++ description: | ++ The token workers can use to join the swarm. ++ type: string ++ example: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx ++ Manager: ++ description: | ++ The token managers can use to join the swarm. ++ type: string ++ example: SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 ++ Swarm: ++ type: object ++ allOf: ++ - $ref: "#/components/schemas/ClusterInfo" ++ - type: object ++ properties: ++ JoinTokens: ++ $ref: "#/components/schemas/JoinTokens" ++ TaskSpec: ++ description: User modifiable task configuration. ++ type: object ++ properties: ++ PluginSpec: ++ type: object ++ description: | ++ Plugin spec for the service. *(Experimental release only.)* ++ ++ ++ ++ ++ ++ ++ > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are ++ > mutually exclusive. PluginSpec is only used when the Runtime field ++ > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime ++ > field is set to `attachment`. ++ properties: ++ Name: ++ description: The name or 'alias' to use for the plugin. ++ type: string ++ Remote: ++ description: The plugin image reference to use. ++ type: string ++ Disabled: ++ description: Disable the plugin once scheduled. ++ type: boolean ++ PluginPrivilege: ++ type: array ++ items: ++ $ref: "#/components/schemas/PluginPrivilege" ++ ContainerSpec: ++ type: object ++ description: | ++ Container spec for the service. ++ ++ ++ ++ ++ ++ ++ > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are ++ > mutually exclusive. PluginSpec is only used when the Runtime field ++ > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime ++ > field is set to `attachment`. ++ properties: ++ Image: ++ description: The image name to use for the container ++ type: string ++ Labels: ++ description: User-defined key/value data. ++ type: object ++ additionalProperties: ++ type: string ++ Command: ++ description: The command to be run in the image. ++ type: array ++ items: ++ type: string ++ Args: ++ description: Arguments to the command. ++ type: array ++ items: ++ type: string ++ Hostname: ++ description: | ++ The hostname to use for the container, as a valid ++ [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. ++ type: string ++ Env: ++ description: | ++ A list of environment variables in the form `VAR=value`. ++ type: array ++ items: ++ type: string ++ Dir: ++ description: The working directory for commands to run in. ++ type: string ++ User: ++ description: The user inside the container. ++ type: string ++ Groups: ++ type: array ++ description: | ++ A list of additional groups that the container process will run as. ++ items: ++ type: string ++ Privileges: ++ type: object ++ description: Security options for the container ++ properties: ++ CredentialSpec: ++ type: object ++ description: CredentialSpec for managed service account (Windows only) ++ properties: ++ Config: ++ type: string ++ example: 0bt9dmxjvjiqermk6xrop3ekq ++ description: | ++ Load credential spec from a Swarm Config with the given ID. ++ The specified config must also be present in the Configs ++ field with the Runtime property set. ++ ++ ++ ++ ++ ++ ++ ++ > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, ++ > and `CredentialSpec.Config` are mutually exclusive. ++ File: ++ type: string ++ example: spec.json ++ description: | ++ Load credential spec from this file. The file is read by ++ the daemon, and must be present in the `CredentialSpecs` ++ subdirectory in the docker data directory, which defaults ++ to `C:\ProgramData\Docker\` on Windows. ++ ++ For example, specifying `spec.json` loads ++ `C:\ProgramData\Docker\CredentialSpecs\spec.json`. ++ ++ ++ ++ ++ ++ ++ > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, ++ > and `CredentialSpec.Config` are mutually exclusive. ++ Registry: ++ type: string ++ description: | ++ Load credential spec from this value in the Windows ++ registry. The specified registry value must be located in: ++ ++ `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` ++ ++ ++ ++ ++ ++ ++ ++ > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, ++ > and `CredentialSpec.Config` are mutually exclusive. ++ SELinuxContext: ++ type: object ++ description: SELinux labels of the container ++ properties: ++ Disable: ++ type: boolean ++ description: Disable SELinux ++ User: ++ type: string ++ description: SELinux user label ++ Role: ++ type: string ++ description: SELinux role label ++ Type: ++ type: string ++ description: SELinux type label ++ Level: ++ type: string ++ description: SELinux level label ++ Seccomp: ++ type: object ++ description: Options for configuring seccomp on the container ++ properties: ++ Mode: ++ type: string ++ enum: ++ - default ++ - unconfined ++ - custom ++ Profile: ++ description: The custom seccomp profile as a json object ++ type: string ++ AppArmor: ++ type: object ++ description: Options for configuring AppArmor on the container ++ properties: ++ Mode: ++ type: string ++ enum: ++ - default ++ - disabled ++ NoNewPrivileges: ++ type: boolean ++ description: Configuration of the no_new_privs bit in the container ++ TTY: ++ description: Whether a pseudo-TTY should be allocated. ++ type: boolean ++ OpenStdin: ++ description: Open `stdin` ++ type: boolean ++ ReadOnly: ++ description: Mount the container's root filesystem as read only. ++ type: boolean ++ Mounts: ++ description: | ++ Specification for mounts to be added to containers created as part ++ of the service. ++ type: array ++ items: ++ $ref: "#/components/schemas/Mount" ++ StopSignal: ++ description: Signal to stop the container. ++ type: string ++ StopGracePeriod: ++ description: | ++ Amount of time to wait for the container to terminate before ++ forcefully killing it. ++ type: integer ++ format: int64 ++ Healthcheck: ++ $ref: "#/components/schemas/HealthConfig" ++ Hosts: ++ type: array ++ description: | ++ A list of hostname/IP mappings to add to the container's `hosts` ++ file. The format of extra hosts is specified in the ++ [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) ++ man page: ++ ++ IP_address canonical_hostname [aliases...] ++ items: ++ type: string ++ DNSConfig: ++ description: | ++ Specification for DNS related configurations in resolver configuration ++ file (`resolv.conf`). ++ type: object ++ properties: ++ Nameservers: ++ description: The IP addresses of the name servers. ++ type: array ++ items: ++ type: string ++ Search: ++ description: A search list for host-name lookup. ++ type: array ++ items: ++ type: string ++ Options: ++ description: | ++ A list of internal resolver variables to be modified (e.g., ++ `debug`, `ndots:3`, etc.). ++ type: array ++ items: ++ type: string ++ Secrets: ++ description: | ++ Secrets contains references to zero or more secrets that will be ++ exposed to the service. ++ type: array ++ items: ++ type: object ++ properties: ++ File: ++ description: | ++ File represents a specific target that is backed by a file. ++ type: object ++ properties: ++ Name: ++ description: | ++ Name represents the final filename in the filesystem. ++ type: string ++ UID: ++ description: UID represents the file UID. ++ type: string ++ GID: ++ description: GID represents the file GID. ++ type: string ++ Mode: ++ description: Mode represents the FileMode of the file. ++ type: integer ++ format: uint32 ++ SecretID: ++ description: | ++ SecretID represents the ID of the specific secret that we're ++ referencing. ++ type: string ++ SecretName: ++ description: | ++ SecretName is the name of the secret that this references, ++ but this is just provided for lookup/display purposes. The ++ secret in the reference will be identified by its ID. ++ type: string ++ OomScoreAdj: ++ type: integer ++ format: int64 ++ description: | ++ An integer value containing the score given to the container in ++ order to tune OOM killer preferences. ++ example: 0 ++ Configs: ++ description: | ++ Configs contains references to zero or more configs that will be ++ exposed to the service. ++ type: array ++ items: ++ type: object ++ properties: ++ File: ++ description: | ++ File represents a specific target that is backed by a file. ++ ++ ++ ++ ++ ++ ++ > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive ++ type: object ++ properties: ++ Name: ++ description: | ++ Name represents the final filename in the filesystem. ++ type: string ++ UID: ++ description: UID represents the file UID. ++ type: string ++ GID: ++ description: GID represents the file GID. ++ type: string ++ Mode: ++ description: Mode represents the FileMode of the file. ++ type: integer ++ format: uint32 ++ Runtime: ++ description: | ++ Runtime represents a target that is not mounted into the ++ container but is used by the task ++ ++ ++ ++ ++ ++ ++ > **Note**: `Configs.File` and `Configs.Runtime` are mutually ++ > exclusive ++ type: object ++ ConfigID: ++ description: | ++ ConfigID represents the ID of the specific config that we're ++ referencing. ++ type: string ++ ConfigName: ++ description: | ++ ConfigName is the name of the config that this references, ++ but this is just provided for lookup/display purposes. The ++ config in the reference will be identified by its ID. ++ type: string ++ Isolation: ++ type: string ++ description: | ++ Isolation technology of the containers running the service. ++ (Windows only) ++ enum: ++ - default ++ - process ++ - hyperv ++ - "" ++ Init: ++ description: | ++ Run an init inside the container that forwards signals and reaps ++ processes. This field is omitted if empty, and the default (as ++ configured on the daemon) is used. ++ type: ++ - boolean ++ - "null" ++ Sysctls: ++ description: | ++ Set kernel namedspaced parameters (sysctls) in the container. ++ The Sysctls option on services accepts the same sysctls as the ++ are supported on containers. Note that while the same sysctls are ++ supported, no guarantees or checks are made about their ++ suitability for a clustered environment, and it's up to the user ++ to determine whether a given sysctl will work properly in a ++ Service. ++ type: object ++ additionalProperties: ++ type: string ++ CapabilityAdd: ++ type: array ++ description: | ++ A list of kernel capabilities to add to the default set ++ for the container. ++ items: ++ type: string ++ example: ++ - CAP_NET_RAW ++ - CAP_SYS_ADMIN ++ - CAP_SYS_CHROOT ++ - CAP_SYSLOG ++ CapabilityDrop: ++ type: array ++ description: | ++ A list of kernel capabilities to drop from the default set ++ for the container. ++ items: ++ type: string ++ example: ++ - CAP_NET_RAW ++ Ulimits: ++ description: | ++ A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`" ++ type: array ++ items: ++ type: object ++ properties: ++ Name: ++ description: Name of ulimit ++ type: string ++ Soft: ++ description: Soft limit ++ type: integer ++ Hard: ++ description: Hard limit ++ type: integer ++ NetworkAttachmentSpec: ++ description: | ++ Read-only spec type for non-swarm containers attached to swarm overlay ++ networks. ++ ++ ++ ++ ++ ++ ++ > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are ++ > mutually exclusive. PluginSpec is only used when the Runtime field ++ > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime ++ > field is set to `attachment`. ++ type: object ++ properties: ++ ContainerID: ++ description: ID of the container represented by this task ++ type: string ++ Resources: ++ description: | ++ Resource requirements which apply to each individual container created ++ as part of the service. ++ type: object ++ properties: ++ Limits: ++ allOf: ++ - $ref: "#/components/schemas/Limit" ++ - description: Define resources limits. ++ Reservations: ++ allOf: ++ - $ref: "#/components/schemas/ResourceObject" ++ - description: Define resources reservation. ++ SwapBytes: ++ description: | ++ Amount of swap in bytes - can only be used together with a memory limit. ++ If not specified, the default behaviour is to grant a swap space twice ++ as big as the memory limit. ++ Set to -1 to enable unlimited swap. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ minimum: -1 ++ x-omitempty: true ++ MemorySwappiness: ++ description: | ++ Tune the service's containers' memory swappiness (0 to 100). ++ If not specified, defaults to the containers' OS' default, generally 60, ++ or whatever value was predefined in the image. ++ Set to -1 to unset a previously set value. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ minimum: -1 ++ maximum: 100 ++ x-omitempty: true ++ RestartPolicy: ++ description: | ++ Specification for the restart policy which applies to containers ++ created as part of this service. ++ type: object ++ properties: ++ Condition: ++ description: Condition for restart. ++ type: string ++ enum: ++ - none ++ - on-failure ++ - any ++ Delay: ++ description: Delay between restart attempts. ++ type: integer ++ format: int64 ++ MaxAttempts: ++ description: | ++ Maximum attempts to restart a given container before giving up ++ (default value is 0, which is ignored). ++ type: integer ++ format: int64 ++ default: 0 ++ Window: ++ description: | ++ Windows is the time window used to evaluate the restart policy ++ (default value is 0, which is unbounded). ++ type: integer ++ format: int64 ++ default: 0 ++ Placement: ++ type: object ++ properties: ++ Constraints: ++ description: | ++ An array of constraint expressions to limit the set of nodes where ++ a task can be scheduled. Constraint expressions can either use a ++ _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find ++ nodes that satisfy every expression (AND match). Constraints can ++ match node or Docker Engine labels as follows: ++ ++ node attribute | matches | example ++ ---------------------|--------------------------------|----------------------------------------------- ++ `node.id` | Node ID | `node.id==2ivku8v2gvtg4` ++ `node.hostname` | Node hostname | `node.hostname!=node-2` ++ `node.role` | Node role (`manager`/`worker`) | `node.role==manager` ++ `node.platform.os` | Node operating system | `node.platform.os==windows` ++ `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` ++ `node.labels` | User-defined node labels | `node.labels.security==high` ++ `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04` ++ ++ `engine.labels` apply to Docker Engine labels like operating system, ++ drivers, etc. Swarm administrators add `node.labels` for operational ++ purposes by using the [`node update endpoint`](#operation/NodeUpdate). ++ type: array ++ items: ++ type: string ++ example: ++ - node.hostname!=node3.corp.example.com ++ - node.role!=manager ++ - node.labels.type==production ++ - node.platform.os==linux ++ - node.platform.arch==x86_64 ++ Preferences: ++ description: | ++ Preferences provide a way to make the scheduler aware of factors ++ such as topology. They are provided in order from highest to ++ lowest precedence. ++ type: array ++ items: ++ type: object ++ properties: ++ Spread: ++ type: object ++ properties: ++ SpreadDescriptor: ++ description: | ++ label descriptor, such as `engine.labels.az`. ++ type: string ++ example: ++ - Spread: ++ SpreadDescriptor: node.labels.datacenter ++ - Spread: ++ SpreadDescriptor: node.labels.rack ++ MaxReplicas: ++ description: | ++ Maximum number of replicas for per node (default value is 0, which ++ is unlimited) ++ type: integer ++ format: int64 ++ default: 0 ++ Platforms: ++ description: | ++ Platforms stores all the platforms that the service's image can ++ run on. This field is used in the platform filter for scheduling. ++ If empty, then the platform filter is off, meaning there are no ++ scheduling restrictions. ++ type: array ++ items: ++ $ref: "#/components/schemas/Platform" ++ ForceUpdate: ++ description: | ++ A counter that triggers an update even if no relevant parameters have ++ been changed. ++ type: integer ++ format: uint64 ++ Runtime: ++ description: | ++ Runtime is the type of runtime specified for the task executor. ++ type: string ++ Networks: ++ description: Specifies which networks the service should attach to. ++ type: array ++ items: ++ $ref: "#/components/schemas/NetworkAttachmentConfig" ++ LogDriver: ++ description: | ++ Specifies the log driver to use for tasks created from this spec. If ++ not present, the default one for the swarm will be used, finally ++ falling back to the engine default if not specified. ++ type: object ++ properties: ++ Name: ++ type: string ++ Options: ++ type: object ++ additionalProperties: ++ type: string ++ TaskState: ++ type: string ++ enum: ++ - new ++ - allocated ++ - pending ++ - assigned ++ - accepted ++ - preparing ++ - ready ++ - starting ++ - running ++ - complete ++ - shutdown ++ - failed ++ - rejected ++ - remove ++ - orphaned ++ ContainerStatus: ++ type: object ++ description: represents the status of a container. ++ properties: ++ ContainerID: ++ type: string ++ PID: ++ type: integer ++ ExitCode: ++ type: integer ++ PortStatus: ++ type: object ++ description: represents the port status of a task's host ports whose service has published host ports ++ properties: ++ Ports: ++ type: array ++ items: ++ $ref: "#/components/schemas/EndpointPortConfig" ++ TaskStatus: ++ type: object ++ description: represents the status of a task. ++ properties: ++ Timestamp: ++ type: string ++ format: dateTime ++ State: ++ $ref: "#/components/schemas/TaskState" ++ Message: ++ type: string ++ Err: ++ type: string ++ ContainerStatus: ++ $ref: "#/components/schemas/ContainerStatus" ++ PortStatus: ++ $ref: "#/components/schemas/PortStatus" ++ NetworkAttachment: ++ description: | ++ Specifies how a task is attached to a network, and the addresses the ++ task was assigned on that network. ++ type: object ++ properties: ++ Network: ++ $ref: "#/components/schemas/Network" ++ Addresses: ++ description: | ++ The IP addresses (in CIDR notation) assigned to the task on this ++ network. To maintain backward compatibility this field accepts CIDR ++ notation, but only the IP address is used. ++ type: array ++ items: ++ type: string ++ format: cidr ++ example: ++ Network: ++ ID: 4qvuz4ko70xaltuqbt8956gd1 ++ Addresses: ++ - 10.255.0.10/16 ++ Task: ++ type: object ++ properties: ++ ID: ++ description: The ID of the task. ++ type: string ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ type: string ++ format: dateTime ++ UpdatedAt: ++ type: string ++ format: dateTime ++ Name: ++ description: Name of the task. ++ type: string ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ Spec: ++ $ref: "#/components/schemas/TaskSpec" ++ ServiceID: ++ description: The ID of the service this task is part of. ++ type: string ++ Slot: ++ type: integer ++ NodeID: ++ description: The ID of the node that this task is on. ++ type: string ++ AssignedGenericResources: ++ $ref: "#/components/schemas/GenericResources" ++ Status: ++ $ref: "#/components/schemas/TaskStatus" ++ DesiredState: ++ $ref: "#/components/schemas/TaskState" ++ JobIteration: ++ allOf: ++ - $ref: "#/components/schemas/ObjectVersion" ++ - description: | ++ If the Service this Task belongs to is a job-mode service, contains ++ the JobIteration of the Service this Task was created for. Absent if ++ the Task was created for a Replicated or Global Service. ++ NetworksAttachments: ++ description: | ++ The networks that this task is attached to, and the addresses the ++ task was assigned on each of them. ++ type: array ++ items: ++ $ref: "#/components/schemas/NetworkAttachment" ++ example: ++ ID: 0kzzo1i0y4jz6027t0k7aezc7 ++ Version: ++ Index: 71 ++ CreatedAt: 2016-06-07T21:07:31.171892745Z ++ UpdatedAt: 2016-06-07T21:07:31.376370513Z ++ Spec: ++ ContainerSpec: ++ Image: redis ++ Resources: ++ Limits: {} ++ Reservations: {} ++ RestartPolicy: ++ Condition: any ++ MaxAttempts: 0 ++ Placement: {} ++ ServiceID: 9mnpnzenvg8p8tdbtq4wvbkcz ++ Slot: 1 ++ NodeID: 60gvrl6tm78dmak4yl7srz94v ++ Status: ++ Timestamp: 2016-06-07T21:07:31.290032978Z ++ State: running ++ Message: started ++ ContainerStatus: ++ ContainerID: e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035 ++ PID: 677 ++ DesiredState: running ++ NetworksAttachments: ++ - Network: ++ ID: 4qvuz4ko70xaltuqbt8956gd1 ++ Version: ++ Index: 18 ++ CreatedAt: 2016-06-07T20:31:11.912919752Z ++ UpdatedAt: 2016-06-07T21:07:29.955277358Z ++ Spec: ++ Name: ingress ++ Labels: ++ com.docker.swarm.internal: "true" ++ DriverConfiguration: {} ++ IPAMOptions: ++ Driver: {} ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ DriverState: ++ Name: overlay ++ Options: ++ com.docker.network.driver.overlay.vxlanid_list: "256" ++ IPAMOptions: ++ Driver: ++ Name: default ++ Configs: ++ - Subnet: 10.255.0.0/16 ++ Gateway: 10.255.0.1 ++ Addresses: ++ - 10.255.0.10/16 ++ AssignedGenericResources: ++ - DiscreteResourceSpec: ++ Kind: SSD ++ Value: 3 ++ - NamedResourceSpec: ++ Kind: GPU ++ Value: UUID1 ++ - NamedResourceSpec: ++ Kind: GPU ++ Value: UUID2 ++ ServiceSpec: ++ description: User modifiable configuration for a service. ++ type: object ++ properties: ++ Name: ++ description: Name of the service. ++ type: string ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ TaskTemplate: ++ $ref: "#/components/schemas/TaskSpec" ++ Mode: ++ description: Scheduling mode for the service. ++ type: object ++ properties: ++ Replicated: ++ type: object ++ properties: ++ Replicas: ++ type: integer ++ format: int64 ++ Global: ++ type: object ++ ReplicatedJob: ++ description: | ++ The mode used for services with a finite number of tasks that run ++ to a completed state. ++ type: object ++ properties: ++ MaxConcurrent: ++ description: | ++ The maximum number of replicas to run simultaneously. ++ type: integer ++ format: int64 ++ default: 1 ++ TotalCompletions: ++ description: | ++ The total number of replicas desired to reach the Completed ++ state. If unset, will default to the value of `MaxConcurrent` ++ type: integer ++ format: int64 ++ GlobalJob: ++ description: | ++ The mode used for services which run a task to the completed state ++ on each valid node. ++ type: object ++ UpdateConfig: ++ description: Specification for the update strategy of the service. ++ type: object ++ properties: ++ Parallelism: ++ description: | ++ Maximum number of tasks to be updated in one iteration (0 means ++ unlimited parallelism). ++ type: integer ++ format: int64 ++ Delay: ++ description: Amount of time between updates, in nanoseconds. ++ type: integer ++ format: int64 ++ FailureAction: ++ description: | ++ Action to take if an updated task fails to run, or stops running ++ during the update. ++ type: string ++ enum: ++ - continue ++ - pause ++ - rollback ++ Monitor: ++ description: | ++ Amount of time to monitor each updated task for failures, in ++ nanoseconds. ++ type: integer ++ format: int64 ++ MaxFailureRatio: ++ description: | ++ The fraction of tasks that may fail during an update before the ++ failure action is invoked, specified as a floating point number ++ between 0 and 1. ++ type: number ++ default: 0 ++ Order: ++ description: | ++ The order of operations when rolling out an updated task. Either ++ the old task is shut down before the new task is started, or the ++ new task is started before the old task is shut down. ++ type: string ++ enum: ++ - stop-first ++ - start-first ++ RollbackConfig: ++ description: Specification for the rollback strategy of the service. ++ type: object ++ properties: ++ Parallelism: ++ description: | ++ Maximum number of tasks to be rolled back in one iteration (0 means ++ unlimited parallelism). ++ type: integer ++ format: int64 ++ Delay: ++ description: | ++ Amount of time between rollback iterations, in nanoseconds. ++ type: integer ++ format: int64 ++ FailureAction: ++ description: | ++ Action to take if an rolled back task fails to run, or stops ++ running during the rollback. ++ type: string ++ enum: ++ - continue ++ - pause ++ Monitor: ++ description: | ++ Amount of time to monitor each rolled back task for failures, in ++ nanoseconds. ++ type: integer ++ format: int64 ++ MaxFailureRatio: ++ description: | ++ The fraction of tasks that may fail during a rollback before the ++ failure action is invoked, specified as a floating point number ++ between 0 and 1. ++ type: number ++ default: 0 ++ Order: ++ description: | ++ The order of operations when rolling back a task. Either the old ++ task is shut down before the new task is started, or the new task ++ is started before the old task is shut down. ++ type: string ++ enum: ++ - stop-first ++ - start-first ++ Networks: ++ description: | ++ Specifies which networks the service should attach to. ++ ++ Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. ++ type: array ++ items: ++ $ref: "#/components/schemas/NetworkAttachmentConfig" ++ EndpointSpec: ++ $ref: "#/components/schemas/EndpointSpec" ++ EndpointPortConfig: ++ type: object ++ properties: ++ Name: ++ type: string ++ Protocol: ++ type: string ++ enum: ++ - tcp ++ - udp ++ - sctp ++ TargetPort: ++ description: The port inside the container. ++ type: integer ++ PublishedPort: ++ description: The port on the swarm hosts. ++ type: integer ++ PublishMode: ++ description: | ++ The mode in which port is published. ++ ++ ++ ++ ++ ++ ++ - "ingress" makes the target port accessible on every node, ++ regardless of whether there is a task for the service running on ++ that node or not. ++ - "host" bypasses the routing mesh and publish the port directly on ++ the swarm node where that service is running. ++ type: string ++ enum: ++ - ingress ++ - host ++ default: ingress ++ example: ingress ++ EndpointSpec: ++ description: Properties that can be configured to access and load balance a service. ++ type: object ++ properties: ++ Mode: ++ description: | ++ The mode of resolution to use for internal load balancing between tasks. ++ type: string ++ enum: ++ - vip ++ - dnsrr ++ default: vip ++ Ports: ++ description: | ++ List of exposed ports that this service is accessible on from the ++ outside. Ports can only be provided if `vip` resolution mode is used. ++ type: array ++ items: ++ $ref: "#/components/schemas/EndpointPortConfig" ++ Service: ++ type: object ++ properties: ++ ID: ++ type: string ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ type: string ++ format: dateTime ++ UpdatedAt: ++ type: string ++ format: dateTime ++ Spec: ++ $ref: "#/components/schemas/ServiceSpec" ++ Endpoint: ++ type: object ++ properties: ++ Spec: ++ $ref: "#/components/schemas/EndpointSpec" ++ Ports: ++ type: array ++ items: ++ $ref: "#/components/schemas/EndpointPortConfig" ++ VirtualIPs: ++ type: array ++ items: ++ type: object ++ properties: ++ NetworkID: ++ type: string ++ Addr: ++ type: string ++ UpdateStatus: ++ description: The status of a service update. ++ type: object ++ properties: ++ State: ++ type: string ++ enum: ++ - updating ++ - paused ++ - completed ++ StartedAt: ++ type: string ++ format: dateTime ++ CompletedAt: ++ type: string ++ format: dateTime ++ Message: ++ type: string ++ ServiceStatus: ++ description: | ++ The status of the service's tasks. Provided only when requested as ++ part of a ServiceList operation. ++ type: object ++ properties: ++ RunningTasks: ++ description: | ++ The number of tasks for the service currently in the Running state. ++ type: integer ++ format: uint64 ++ example: 7 ++ DesiredTasks: ++ description: | ++ The number of tasks for the service desired to be running. ++ For replicated services, this is the replica count from the ++ service spec. For global services, this is computed by taking ++ count of all tasks for the service with a Desired State other ++ than Shutdown. ++ type: integer ++ format: uint64 ++ example: 10 ++ CompletedTasks: ++ description: | ++ The number of tasks for a job that are in the Completed state. ++ This field must be cross-referenced with the service type, as the ++ value of 0 may mean the service is not in a job mode, or it may ++ mean the job-mode service has no tasks yet Completed. ++ type: integer ++ format: uint64 ++ JobStatus: ++ description: | ++ The status of the service when it is in one of ReplicatedJob or ++ GlobalJob modes. Absent on Replicated and Global mode services. The ++ JobIteration is an ObjectVersion, but unlike the Service's version, ++ does not need to be sent with an update request. ++ type: object ++ properties: ++ JobIteration: ++ allOf: ++ - $ref: "#/components/schemas/ObjectVersion" ++ - description: | ++ JobIteration is a value increased each time a Job is executed, ++ successfully or otherwise. "Executed", in this case, means the ++ job as a whole has been started, not that an individual Task has ++ been launched. A job is "Executed" when its ServiceSpec is ++ updated. JobIteration can be used to disambiguate Tasks belonging ++ to different executions of a job. Though JobIteration will ++ increase with each subsequent execution, it may not necessarily ++ increase by 1, and so JobIteration should not be used to ++ LastExecution: ++ description: | ++ The last time, as observed by the server, that this job was ++ started. ++ type: string ++ format: dateTime ++ example: ++ ID: 9mnpnzenvg8p8tdbtq4wvbkcz ++ Version: ++ Index: 19 ++ CreatedAt: 2016-06-07T21:05:51.880065305Z ++ UpdatedAt: 2016-06-07T21:07:29.962229872Z ++ Spec: ++ Name: hopeful_cori ++ TaskTemplate: ++ ContainerSpec: ++ Image: redis ++ Resources: ++ Limits: {} ++ Reservations: {} ++ RestartPolicy: ++ Condition: any ++ MaxAttempts: 0 ++ Placement: {} ++ ForceUpdate: 0 ++ Mode: ++ Replicated: ++ Replicas: 1 ++ UpdateConfig: ++ Parallelism: 1 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ RollbackConfig: ++ Parallelism: 1 ++ Delay: 1000000000 ++ FailureAction: pause ++ Monitor: 15000000000 ++ MaxFailureRatio: 0.15 ++ EndpointSpec: ++ Mode: vip ++ Ports: ++ - Protocol: tcp ++ TargetPort: 6379 ++ PublishedPort: 30001 ++ Endpoint: ++ Spec: ++ Mode: vip ++ Ports: ++ - Protocol: tcp ++ TargetPort: 6379 ++ PublishedPort: 30001 ++ Ports: ++ - Protocol: tcp ++ TargetPort: 6379 ++ PublishedPort: 30001 ++ VirtualIPs: ++ - NetworkID: 4qvuz4ko70xaltuqbt8956gd1 ++ Addr: 10.255.0.2/16 ++ - NetworkID: 4qvuz4ko70xaltuqbt8956gd1 ++ Addr: 10.255.0.3/16 ++ ImageDeleteResponseItem: ++ type: object ++ x-go-name: DeleteResponse ++ properties: ++ Untagged: ++ description: The image ID of an image that was untagged ++ type: string ++ Deleted: ++ description: The image ID of an image that was deleted ++ type: string ++ ServiceCreateResponse: ++ type: object ++ description: | ++ contains the information returned to a client on the ++ creation of a new service. ++ properties: ++ ID: ++ description: The ID of the created service. ++ type: string ++ example: ak7w3gjqoa3kuz8xcpnyy0pvl ++ Warnings: ++ description: | ++ Optional warning message. ++ ++ FIXME(thaJeztah): this should have "omitempty" in the generated type. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" ++ ServiceUpdateResponse: ++ type: object ++ properties: ++ Warnings: ++ description: Optional warning messages ++ type: array ++ items: ++ type: string ++ example: ++ Warnings: ++ - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" ++ ContainerInspectResponse: ++ type: object ++ title: ContainerInspectResponse ++ x-go-name: InspectResponse ++ properties: ++ Id: ++ description: The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). ++ type: string ++ x-go-name: ID ++ minLength: 64 ++ maxLength: 64 ++ pattern: ^[0-9a-fA-F]{64}$ ++ example: aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf ++ Created: ++ description: |- ++ Date and time at which the container was created, formatted in ++ [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. ++ type: ++ - string ++ - "null" ++ format: dateTime ++ example: 2025-02-17T17:43:39.64001363Z ++ Path: ++ description: The path to the command being run ++ type: string ++ example: /bin/sh ++ Args: ++ description: The arguments to the command being run ++ type: array ++ items: ++ type: string ++ example: ++ - -c ++ - exit 9 ++ State: ++ $ref: "#/components/schemas/ContainerState" ++ Image: ++ description: The ID (digest) of the image that this container was created from. ++ type: string ++ example: sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 ++ ResolvConfPath: ++ description: |- ++ Location of the `/etc/resolv.conf` generated for the container on the ++ host. ++ ++ This file is managed through the docker daemon, and should not be ++ accessed or modified by other tools. ++ type: string ++ example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf ++ HostnamePath: ++ description: |- ++ Location of the `/etc/hostname` generated for the container on the ++ host. ++ ++ This file is managed through the docker daemon, and should not be ++ accessed or modified by other tools. ++ type: string ++ example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname ++ HostsPath: ++ description: |- ++ Location of the `/etc/hosts` generated for the container on the ++ host. ++ ++ This file is managed through the docker daemon, and should not be ++ accessed or modified by other tools. ++ type: string ++ example: /var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts ++ LogPath: ++ description: |- ++ Location of the file used to buffer the container's logs. Depending on ++ the logging-driver used for the container, this field may be omitted. ++ ++ This file is managed through the docker daemon, and should not be ++ accessed or modified by other tools. ++ type: ++ - string ++ - "null" ++ example: /var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log ++ Name: ++ description: |- ++ The name associated with this container. ++ ++ For historic reasons, the name may be prefixed with a forward-slash (`/`). ++ type: string ++ example: /funny_chatelet ++ RestartCount: ++ description: |- ++ Number of times the container was restarted since it was created, ++ or since daemon was started. ++ type: integer ++ example: 0 ++ Driver: ++ description: |- ++ The storage-driver used for the container's filesystem (graph-driver ++ or snapshotter). ++ type: string ++ example: overlayfs ++ Platform: ++ description: |- ++ The platform (operating system) for which the container was created. ++ ++ This field was introduced for the experimental "LCOW" (Linux Containers ++ On Windows) features, which has been removed. In most cases, this field ++ is equal to the host's operating system (`linux` or `windows`). ++ type: string ++ example: linux ++ ImageManifestDescriptor: ++ allOf: ++ - $ref: "#/components/schemas/OCIDescriptor" ++ - description: |- ++ OCI descriptor of the platform-specific manifest of the image ++ the container was created from. ++ ++ Note: Only available if the daemon provides a multi-platform ++ image store. ++ MountLabel: ++ description: SELinux mount label set for the container. ++ type: string ++ example: "" ++ ProcessLabel: ++ description: SELinux process label set for the container. ++ type: string ++ example: "" ++ AppArmorProfile: ++ description: The AppArmor profile set for the container. ++ type: string ++ example: "" ++ ExecIDs: ++ description: IDs of exec instances that are running in the container. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca ++ - 3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4 ++ HostConfig: ++ $ref: "#/components/schemas/HostConfig" ++ GraphDriver: ++ allOf: ++ - $ref: "#/components/schemas/DriverData" ++ - anyOf: ++ - {} ++ - type: "null" ++ Storage: ++ allOf: ++ - $ref: "#/components/schemas/Storage" ++ - anyOf: ++ - {} ++ - type: "null" ++ SizeRw: ++ description: |- ++ The size of files that have been created or changed by this container. ++ ++ This field is omitted by default, and only set when size is requested ++ in the API request. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ example: "122880" ++ SizeRootFs: ++ description: |- ++ The total size of all files in the read-only layers from the image ++ that the container uses. These layers can be shared between containers. ++ ++ This field is omitted by default, and only set when size is requested ++ in the API request. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ example: "1653948416" ++ Mounts: ++ description: List of mounts used by the container. ++ type: array ++ items: ++ $ref: "#/components/schemas/MountPoint" ++ Config: ++ $ref: "#/components/schemas/ContainerConfig" ++ NetworkSettings: ++ $ref: "#/components/schemas/NetworkSettings" ++ ContainerSummary: ++ type: object ++ properties: ++ Id: ++ description: The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). ++ type: string ++ x-go-name: ID ++ minLength: 64 ++ maxLength: 64 ++ pattern: ^[0-9a-fA-F]{64}$ ++ example: aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf ++ Names: ++ description: |- ++ The names associated with this container. Most containers have a single ++ name, but when using legacy "links", the container can have multiple ++ names. ++ ++ For historic reasons, names are prefixed with a forward-slash (`/`). ++ type: array ++ items: ++ type: string ++ example: ++ - /funny_chatelet ++ Image: ++ description: |- ++ The name or ID of the image used to create the container. ++ ++ This field shows the image reference as was specified when creating the container, ++ which can be in its canonical form (e.g., `docker.io/library/ubuntu:latest` ++ or `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`), ++ short form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`). ++ ++ The content of this field can be updated at runtime if the image used to ++ create the container is untagged, in which case the field is updated to ++ contain the the image ID (digest) it was resolved to in its canonical, ++ non-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`). ++ type: string ++ example: docker.io/library/ubuntu:latest ++ ImageID: ++ description: The ID (digest) of the image that this container was created from. ++ type: string ++ example: sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 ++ ImageManifestDescriptor: ++ allOf: ++ - $ref: "#/components/schemas/OCIDescriptor" ++ - anyOf: ++ - description: | ++ OCI descriptor of the platform-specific manifest of the image ++ the container was created from. ++ ++ Note: Only available if the daemon provides a multi-platform ++ image store. ++ ++ This field is not populated in the `GET /system/df` endpoint. ++ - type: "null" ++ Command: ++ description: Command to run when starting the container ++ type: string ++ example: /bin/bash ++ Created: ++ description: |- ++ Date and time at which the container was created as a Unix timestamp ++ (number of seconds since EPOCH). ++ type: integer ++ format: int64 ++ example: "1739811096" ++ Ports: ++ description: Port-mappings for the container. ++ type: array ++ items: ++ $ref: "#/components/schemas/PortSummary" ++ SizeRw: ++ description: |- ++ The size of files that have been created or changed by this container. ++ ++ This field is omitted by default, and only set when size is requested ++ in the API request. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ example: "122880" ++ SizeRootFs: ++ description: |- ++ The total size of all files in the read-only layers from the image ++ that the container uses. These layers can be shared between containers. ++ ++ This field is omitted by default, and only set when size is requested ++ in the API request. ++ type: ++ - integer ++ - "null" ++ format: int64 ++ example: "1653948416" ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.vendor: Acme ++ com.example.license: GPL ++ com.example.version: "1.0" ++ State: ++ description: | ++ The state of this container. ++ type: string ++ enum: ++ - created ++ - running ++ - paused ++ - restarting ++ - exited ++ - removing ++ - dead ++ example: running ++ Status: ++ description: Additional human-readable status of this container (e.g. `Exit 0`) ++ type: string ++ example: Up 4 days ++ HostConfig: ++ type: object ++ description: |- ++ Summary of host-specific runtime information of the container. This ++ is a reduced set of information in the container's "HostConfig" as ++ available in the container "inspect" response. ++ properties: ++ NetworkMode: ++ description: |- ++ Networking mode (`host`, `none`, `container:`) or name of the ++ primary network the container is using. ++ ++ This field is primarily for backward compatibility. The container ++ can be connected to multiple networks for which information can be ++ found in the `NetworkSettings.Networks` field, which enumerates ++ settings per network. ++ type: string ++ example: mynetwork ++ Annotations: ++ description: Arbitrary key-value metadata attached to the container. ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: string ++ example: ++ io.kubernetes.docker.type: container ++ io.kubernetes.sandbox.id: 3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3 ++ NetworkSettings: ++ description: Summary of the container's network settings ++ type: object ++ properties: ++ Networks: ++ type: object ++ description: |- ++ Summary of network-settings for each network the container is ++ attached to. ++ additionalProperties: ++ $ref: "#/components/schemas/EndpointSettings" ++ Mounts: ++ type: array ++ description: List of mounts used by the container. ++ items: ++ $ref: "#/components/schemas/MountPoint" ++ Health: ++ type: object ++ description: |- ++ Summary of health status ++ ++ Added in v1.52, before that version all container summary not include Health. ++ After this attribute introduced, it includes containers with no health checks configured, ++ or containers that are not running with none ++ properties: ++ Status: ++ type: string ++ description: the health status of the container ++ enum: ++ - none ++ - starting ++ - healthy ++ - unhealthy ++ example: healthy ++ FailingStreak: ++ description: FailingStreak is the number of consecutive failures ++ type: integer ++ example: 0 ++ ContainersDiskUsage: ++ type: object ++ x-go-name: DiskUsage ++ x-go-package: github.com/moby/moby/api/types/container ++ description: | ++ represents system data usage information for container resources. ++ properties: ++ ActiveCount: ++ description: | ++ Count of active containers. ++ type: integer ++ format: int64 ++ example: 1 ++ TotalCount: ++ description: | ++ Count of all containers. ++ type: integer ++ format: int64 ++ example: 4 ++ Reclaimable: ++ description: | ++ Disk space that can be reclaimed by removing inactive containers. ++ type: integer ++ format: int64 ++ example: 12345678 ++ TotalSize: ++ description: | ++ Disk space in use by containers. ++ type: integer ++ format: int64 ++ example: 98765432 ++ Items: ++ description: | ++ List of container summaries. ++ type: array ++ x-omitempty: true ++ items: ++ x-go-type: ++ type: Summary ++ Driver: ++ description: Driver represents a driver (network, logging, secrets). ++ type: object ++ required: ++ - Name ++ properties: ++ Name: ++ description: Name of the driver. ++ type: string ++ example: some-driver ++ Options: ++ description: Key/value map of driver-specific options. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ OptionA: value for driver-specific option A ++ OptionB: value for driver-specific option B ++ SecretSpec: ++ type: object ++ properties: ++ Name: ++ description: User-defined name of the secret. ++ type: string ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-value ++ com.example.some-other-label: some-other-value ++ Data: ++ description: | ++ Data is the data to store as a secret, formatted as a standard base64-encoded ++ ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. ++ It must be empty if the Driver field is set, in which case the data is ++ loaded from an external secret store. The maximum allowed size is 500KB, ++ as defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize). ++ ++ This field is only used to _create_ a secret, and is not returned by ++ other endpoints. ++ type: string ++ example: "" ++ Driver: ++ allOf: ++ - $ref: "#/components/schemas/Driver" ++ - description: | ++ Name of the secrets driver used to fetch the secret's value from an ++ external secret store. ++ Templating: ++ allOf: ++ - $ref: "#/components/schemas/Driver" ++ - description: | ++ Templating driver, if applicable ++ ++ Templating controls whether and how to evaluate the config payload as ++ a template. If no driver is set, no templating is used. ++ Secret: ++ type: object ++ properties: ++ ID: ++ type: string ++ example: blt1owaxmitz71s9v5zh81zun ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ type: string ++ format: dateTime ++ example: 2017-07-20T13:55:28.678958722Z ++ UpdatedAt: ++ type: string ++ format: dateTime ++ example: 2017-07-20T13:55:28.678958722Z ++ Spec: ++ $ref: "#/components/schemas/SecretSpec" ++ ConfigSpec: ++ type: object ++ properties: ++ Name: ++ description: User-defined name of the config. ++ type: string ++ Labels: ++ description: User-defined key/value metadata. ++ type: object ++ additionalProperties: ++ type: string ++ Data: ++ description: | ++ Data is the data to store as a config, formatted as a standard base64-encoded ++ ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. ++ The maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize). ++ type: string ++ Templating: ++ allOf: ++ - $ref: "#/components/schemas/Driver" ++ - description: | ++ Templating driver, if applicable ++ ++ Templating controls whether and how to evaluate the config payload as ++ a template. If no driver is set, no templating is used. ++ Config: ++ type: object ++ properties: ++ ID: ++ type: string ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ type: string ++ format: dateTime ++ UpdatedAt: ++ type: string ++ format: dateTime ++ Spec: ++ $ref: "#/components/schemas/ConfigSpec" ++ ContainerState: ++ description: | ++ ContainerState stores container's running state. It's part of ContainerJSONBase ++ and will be returned by the "inspect" command. ++ type: ++ - object ++ - "null" ++ properties: ++ Status: ++ description: | ++ String representation of the container state. Can be one of "created", ++ "running", "paused", "restarting", "removing", "exited", or "dead". ++ type: string ++ enum: ++ - created ++ - running ++ - paused ++ - restarting ++ - removing ++ - exited ++ - dead ++ example: running ++ Running: ++ description: | ++ Whether this container is running. ++ ++ Note that a running container can be _paused_. The `Running` and `Paused` ++ booleans are not mutually exclusive: ++ ++ When pausing a container (on Linux), the freezer cgroup is used to suspend ++ all processes in the container. Freezing the process requires the process to ++ be running. As a result, paused containers are both `Running` _and_ `Paused`. ++ ++ Use the `Status` field instead to determine if a container's state is "running". ++ type: boolean ++ example: true ++ Paused: ++ description: Whether this container is paused. ++ type: boolean ++ example: false ++ Restarting: ++ description: Whether this container is restarting. ++ type: boolean ++ example: false ++ OOMKilled: ++ description: | ++ Whether a process within this container has been killed because it ran ++ out of memory since the container was last started. ++ type: boolean ++ example: false ++ Dead: ++ type: boolean ++ example: false ++ Pid: ++ description: The process ID of this container ++ type: integer ++ example: 1234 ++ ExitCode: ++ description: The last exit code of this container ++ type: integer ++ example: 0 ++ Error: ++ type: string ++ StartedAt: ++ description: The time when this container was last started. ++ type: string ++ example: 2020-01-06T09:06:59.461876391Z ++ FinishedAt: ++ description: The time when this container last exited. ++ type: string ++ example: 2020-01-06T09:07:59.461876391Z ++ Health: ++ $ref: "#/components/schemas/Health" ++ ContainerCreateResponse: ++ description: OK response to ContainerCreate operation ++ type: object ++ title: ContainerCreateResponse ++ x-go-name: CreateResponse ++ required: ++ - Id ++ - Warnings ++ properties: ++ Id: ++ description: The ID of the created container ++ type: string ++ example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 ++ Warnings: ++ description: Warnings encountered when creating the container ++ type: array ++ items: ++ type: string ++ example: [] ++ ContainerUpdateResponse: ++ type: object ++ title: ContainerUpdateResponse ++ x-go-name: UpdateResponse ++ description: Response for a successful container-update. ++ properties: ++ Warnings: ++ type: array ++ description: Warnings encountered when updating the container. ++ items: ++ type: string ++ example: ++ - Published ports are discarded when using host network mode ++ ContainerStatsResponse: ++ description: | ++ Statistics sample for a container. ++ type: object ++ x-go-name: StatsResponse ++ title: ContainerStatsResponse ++ properties: ++ id: ++ description: | ++ ID of the container for which the stats were collected. ++ type: ++ - string ++ - "null" ++ example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 ++ name: ++ description: | ++ Name of the container for which the stats were collected. ++ type: ++ - string ++ - "null" ++ example: boring_wozniak ++ os_type: ++ description: | ++ OSType is the OS of the container ("linux" or "windows") to allow ++ platform-specific handling of stats. ++ type: ++ - string ++ - "null" ++ example: linux ++ read: ++ description: | ++ Date and time at which this sample was collected. ++ The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) ++ with nano-seconds. ++ type: string ++ format: date-time ++ example: 2025-01-16T13:55:22.165243637Z ++ cpu_stats: ++ $ref: "#/components/schemas/ContainerCPUStats" ++ memory_stats: ++ $ref: "#/components/schemas/ContainerMemoryStats" ++ networks: ++ description: | ++ Network statistics for the container per interface. ++ ++ This field is omitted if the container has no networking enabled. ++ additionalProperties: ++ $ref: "#/components/schemas/ContainerNetworkStats" ++ example: ++ eth0: ++ rx_bytes: 5338 ++ rx_dropped: 0 ++ rx_errors: 0 ++ rx_packets: 36 ++ tx_bytes: 648 ++ tx_dropped: 0 ++ tx_errors: 0 ++ tx_packets: 8 ++ eth5: ++ rx_bytes: 4641 ++ rx_dropped: 0 ++ rx_errors: 0 ++ rx_packets: 26 ++ tx_bytes: 690 ++ tx_dropped: 0 ++ tx_errors: 0 ++ tx_packets: 9 ++ pids_stats: ++ $ref: "#/components/schemas/ContainerPidsStats" ++ blkio_stats: ++ $ref: "#/components/schemas/ContainerBlkioStats" ++ num_procs: ++ description: | ++ The number of processors on the system. ++ ++ This field is Windows-specific and always zero for Linux containers. ++ type: integer ++ format: uint32 ++ example: 16 ++ storage_stats: ++ $ref: "#/components/schemas/ContainerStorageStats" ++ preread: ++ description: | ++ Date and time at which this first sample was collected. This field ++ is not propagated if the "one-shot" option is set. If the "one-shot" ++ option is set, this field may be omitted, empty, or set to a default ++ date (`0001-01-01T00:00:00Z`). ++ ++ The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) ++ with nano-seconds. ++ type: string ++ format: date-time ++ example: 2025-01-16T13:55:21.160452595Z ++ precpu_stats: ++ $ref: "#/components/schemas/ContainerCPUStats" ++ ContainerBlkioStats: ++ description: | ++ BlkioStats stores all IO service stats for data read and write. ++ ++ This type is Linux-specific and holds many fields that are specific to cgroups v1. ++ On a cgroup v2 host, all fields other than `io_service_bytes_recursive` ++ are omitted or `null`. ++ ++ This type is only populated on Linux and omitted for Windows containers. ++ type: ++ - object ++ - "null" ++ x-go-name: BlkioStats ++ properties: ++ io_service_bytes_recursive: ++ type: array ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_serviced_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_queue_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_service_time_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_wait_time_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_merged_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ io_time_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ sectors_recursive: ++ description: | ++ This field is only available when using Linux containers with ++ cgroups v1. It is omitted or `null` when using cgroups v2. ++ type: ++ - array ++ - "null" ++ items: ++ $ref: "#/components/schemas/ContainerBlkioStatEntry" ++ example: ++ io_service_bytes_recursive: ++ - major: 254 ++ minor: 0 ++ op: read ++ value: 7593984 ++ - major: 254 ++ minor: 0 ++ op: write ++ value: 100 ++ io_serviced_recursive: null ++ io_queue_recursive: null ++ io_service_time_recursive: null ++ io_wait_time_recursive: null ++ io_merged_recursive: null ++ io_time_recursive: null ++ sectors_recursive: null ++ ContainerBlkioStatEntry: ++ description: | ++ Blkio stats entry. ++ ++ This type is Linux-specific and omitted for Windows containers. ++ type: ++ - object ++ - "null" ++ x-go-name: BlkioStatEntry ++ properties: ++ major: ++ type: integer ++ format: uint64 ++ example: 254 ++ minor: ++ type: integer ++ format: uint64 ++ example: 0 ++ op: ++ type: string ++ example: read ++ value: ++ type: integer ++ format: uint64 ++ example: 7593984 ++ ContainerCPUStats: ++ description: | ++ CPU related info of the container ++ type: ++ - object ++ - "null" ++ x-go-name: CPUStats ++ properties: ++ cpu_usage: ++ $ref: "#/components/schemas/ContainerCPUUsage" ++ system_cpu_usage: ++ description: | ++ System Usage. ++ ++ This field is Linux-specific and omitted for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 5 ++ online_cpus: ++ description: | ++ Number of online CPUs. ++ ++ This field is Linux-specific and omitted for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint32 ++ example: 5 ++ throttling_data: ++ $ref: "#/components/schemas/ContainerThrottlingData" ++ ContainerCPUUsage: ++ description: | ++ All CPU stats aggregated since container inception. ++ type: ++ - object ++ - "null" ++ x-go-name: CPUUsage ++ properties: ++ total_usage: ++ description: | ++ Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows). ++ type: integer ++ format: uint64 ++ example: 29912000 ++ percpu_usage: ++ description: | ++ Total CPU time (in nanoseconds) consumed per core (Linux). ++ ++ This field is Linux-specific when using cgroups v1. It is omitted ++ when using cgroups v2 and Windows containers. ++ type: ++ - array ++ - "null" ++ items: ++ type: integer ++ format: uint64 ++ example: 29912000 ++ usage_in_kernelmode: ++ description: | ++ Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux), ++ or time spent (in 100's of nanoseconds) by all container processes in ++ kernel mode (Windows). ++ ++ Not populated for Windows containers using Hyper-V isolation. ++ type: integer ++ format: uint64 ++ example: 21994000 ++ usage_in_usermode: ++ description: | ++ Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux), ++ or time spent (in 100's of nanoseconds) by all container processes in ++ kernel mode (Windows). ++ ++ Not populated for Windows containers using Hyper-V isolation. ++ type: integer ++ format: uint64 ++ example: 7918000 ++ ContainerPidsStats: ++ description: | ++ PidsStats contains Linux-specific stats of a container's process-IDs (PIDs). ++ ++ This type is Linux-specific and omitted for Windows containers. ++ type: ++ - object ++ - "null" ++ x-go-name: PidsStats ++ properties: ++ current: ++ description: | ++ Current is the number of PIDs in the cgroup. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 5 ++ limit: ++ description: | ++ Limit is the hard limit on the number of pids in the cgroup. ++ A "Limit" of 0 means that there is no limit. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: "18446744073709551615" ++ ContainerThrottlingData: ++ description: | ++ CPU throttling stats of the container. ++ ++ This type is Linux-specific and omitted for Windows containers. ++ type: ++ - object ++ - "null" ++ x-go-name: ThrottlingData ++ properties: ++ periods: ++ description: | ++ Number of periods with throttling active. ++ type: integer ++ format: uint64 ++ example: 0 ++ throttled_periods: ++ description: | ++ Number of periods when the container hit its throttling limit. ++ type: integer ++ format: uint64 ++ example: 0 ++ throttled_time: ++ description: | ++ Aggregated time (in nanoseconds) the container was throttled for. ++ type: integer ++ format: uint64 ++ example: 0 ++ ContainerMemoryStats: ++ description: | ++ Aggregates all memory stats since container inception on Linux. ++ Windows returns stats for commit and private working set only. ++ type: object ++ x-go-name: MemoryStats ++ properties: ++ usage: ++ description: | ++ Current `res_counter` usage for memory. ++ ++ This field is Linux-specific and omitted for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ max_usage: ++ description: | ++ Maximum usage ever recorded. ++ ++ This field is Linux-specific and only supported on cgroups v1. ++ It is omitted when using cgroups v2 and for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ stats: ++ description: | ++ All the stats exported via memory.stat. ++ ++ The fields in this object differ between cgroups v1 and v2. ++ On cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available. ++ On cgroups v2, fields such as `file`, `anon`, `inactive_file` are available. ++ ++ This field is Linux-specific and omitted for Windows containers. ++ type: object ++ additionalProperties: ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: ++ active_anon: 1572864 ++ active_file: 5115904 ++ anon: 1572864 ++ anon_thp: 0 ++ file: 7626752 ++ file_dirty: 0 ++ file_mapped: 2723840 ++ file_writeback: 0 ++ inactive_anon: 0 ++ inactive_file: 2510848 ++ kernel_stack: 16384 ++ pgactivate: 0 ++ pgdeactivate: 0 ++ pgfault: 2042 ++ pglazyfree: 0 ++ pglazyfreed: 0 ++ pgmajfault: 45 ++ pgrefill: 0 ++ pgscan: 0 ++ pgsteal: 0 ++ shmem: 0 ++ slab: 1180928 ++ slab_reclaimable: 725576 ++ slab_unreclaimable: 455352 ++ sock: 0 ++ thp_collapse_alloc: 0 ++ thp_fault_alloc: 1 ++ unevictable: 0 ++ workingset_activate: 0 ++ workingset_nodereclaim: 0 ++ workingset_refault: 0 ++ failcnt: ++ description: | ++ Number of times memory usage hits limits. ++ ++ This field is Linux-specific and only supported on cgroups v1. ++ It is omitted when using cgroups v2 and for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ limit: ++ description: | ++ This field is Linux-specific and omitted for Windows containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 8217579520 ++ commitbytes: ++ description: | ++ Committed bytes. ++ ++ This field is Windows-specific and omitted for Linux containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ commitpeakbytes: ++ description: | ++ Peak committed bytes. ++ ++ This field is Windows-specific and omitted for Linux containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ privateworkingset: ++ description: | ++ Private working set. ++ ++ This field is Windows-specific and omitted for Linux containers. ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 0 ++ ContainerNetworkStats: ++ description: | ++ Aggregates the network stats of one container ++ type: ++ - object ++ - "null" ++ x-go-name: NetworkStats ++ properties: ++ rx_bytes: ++ description: | ++ Bytes received. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 5338 ++ rx_packets: ++ description: | ++ Packets received. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 36 ++ rx_errors: ++ description: | ++ Received errors. Not used on Windows. ++ ++ This field is Linux-specific and always zero for Windows containers. ++ type: integer ++ format: uint64 ++ example: 0 ++ rx_dropped: ++ description: | ++ Incoming packets dropped. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 0 ++ tx_bytes: ++ description: | ++ Bytes sent. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 1200 ++ tx_packets: ++ description: | ++ Packets sent. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 12 ++ tx_errors: ++ description: | ++ Sent errors. Not used on Windows. ++ ++ This field is Linux-specific and always zero for Windows containers. ++ type: integer ++ format: uint64 ++ example: 0 ++ tx_dropped: ++ description: | ++ Outgoing packets dropped. Windows and Linux. ++ type: integer ++ format: uint64 ++ example: 0 ++ endpoint_id: ++ description: | ++ Endpoint ID. Not used on Linux. ++ ++ This field is Windows-specific and omitted for Linux containers. ++ type: ++ - string ++ - "null" ++ instance_id: ++ description: | ++ Instance ID. Not used on Linux. ++ ++ This field is Windows-specific and omitted for Linux containers. ++ type: ++ - string ++ - "null" ++ ContainerStorageStats: ++ description: | ++ StorageStats is the disk I/O stats for read/write on Windows. ++ ++ This type is Windows-specific and omitted for Linux containers. ++ type: ++ - object ++ - "null" ++ x-go-name: StorageStats ++ properties: ++ read_count_normalized: ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 7593984 ++ read_size_bytes: ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 7593984 ++ write_count_normalized: ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 7593984 ++ write_size_bytes: ++ type: ++ - integer ++ - "null" ++ format: uint64 ++ example: 7593984 ++ ContainerTopResponse: ++ type: object ++ x-go-name: TopResponse ++ title: ContainerTopResponse ++ description: Container "top" response. ++ properties: ++ Titles: ++ description: The ps column titles ++ type: array ++ items: ++ type: string ++ example: ++ Titles: ++ - UID ++ - PID ++ - PPID ++ - C ++ - STIME ++ - TTY ++ - TIME ++ - CMD ++ Processes: ++ description: |- ++ Each process running in the container, where each process ++ is an array of values corresponding to the titles. ++ type: array ++ items: ++ type: array ++ items: ++ type: string ++ example: ++ Processes: ++ - - root ++ - "13642" ++ - "882" ++ - "0" ++ - 17:03 ++ - pts/0 ++ - 00:00:00 ++ - /bin/bash ++ - - root ++ - "13735" ++ - "13642" ++ - "0" ++ - 17:06 ++ - pts/0 ++ - 00:00:00 ++ - sleep 10 ++ ContainerWaitResponse: ++ description: OK response to ContainerWait operation ++ type: object ++ x-go-name: WaitResponse ++ title: ContainerWaitResponse ++ required: ++ - StatusCode ++ properties: ++ StatusCode: ++ description: Exit code of the container ++ type: integer ++ format: int64 ++ Error: ++ $ref: "#/components/schemas/ContainerWaitExitError" ++ ContainerWaitExitError: ++ description: container waiting error, if any ++ type: object ++ x-go-name: WaitExitError ++ properties: ++ Message: ++ description: Details of an error ++ type: string ++ SystemVersion: ++ type: object ++ description: | ++ Response of Engine API: GET "/version" ++ properties: ++ Platform: ++ type: object ++ required: ++ - Name ++ properties: ++ Name: ++ type: string ++ Components: ++ type: array ++ description: | ++ Information about system components ++ items: ++ type: object ++ x-go-name: ComponentVersion ++ required: ++ - Name ++ - Version ++ properties: ++ Name: ++ description: | ++ Name of the component ++ type: string ++ example: Engine ++ Version: ++ description: | ++ Version of the component ++ type: string ++ example: 27.0.1 ++ Details: ++ description: | ++ Key/value pairs of strings with additional information about the ++ component. These values are intended for informational purposes ++ only, and their content is not defined, and not part of the API ++ specification. ++ ++ These messages can be printed by the client as information to the user. ++ type: ++ - object ++ - "null" ++ Version: ++ description: The version of the daemon ++ type: string ++ example: 27.0.1 ++ ApiVersion: ++ description: | ++ The default (and highest) API version that is supported by the daemon ++ type: string ++ example: "1.47" ++ MinAPIVersion: ++ description: | ++ The minimum API version that is supported by the daemon ++ type: string ++ example: "1.24" ++ GitCommit: ++ description: | ++ The Git commit of the source code that was used to build the daemon ++ type: string ++ example: 48a66213fe ++ GoVersion: ++ description: | ++ The version Go used to compile the daemon, and the version of the Go ++ runtime in use. ++ type: string ++ example: go1.22.7 ++ Os: ++ description: | ++ The operating system that the daemon is running on ("linux" or "windows") ++ type: string ++ example: linux ++ Arch: ++ description: | ++ Architecture of the daemon, as returned by the Go runtime (`GOARCH`). ++ ++ A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). ++ type: string ++ example: amd64 ++ KernelVersion: ++ description: | ++ The kernel version (`uname -r`) that the daemon is running on. ++ ++ This field is omitted when empty. ++ type: string ++ example: 6.8.0-31-generic ++ Experimental: ++ description: | ++ Indicates if the daemon is started with experimental features enabled. ++ ++ This field is omitted when empty / false. ++ type: boolean ++ example: true ++ BuildTime: ++ description: | ++ The date and time that the daemon was compiled. ++ type: string ++ example: 2020-06-22T15:49:27.000000000+00:00 ++ SystemInfo: ++ type: object ++ properties: ++ ID: ++ description: | ++ Unique identifier of the daemon. ++ ++ ++ ++ ++ ++ ++ > **Note**: The format of the ID itself is not part of the API, and ++ > should not be considered stable. ++ type: string ++ example: 7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS ++ Containers: ++ description: Total number of containers on the host. ++ type: integer ++ example: 14 ++ ContainersRunning: ++ description: | ++ Number of containers with status `"running"`. ++ type: integer ++ example: 3 ++ ContainersPaused: ++ description: | ++ Number of containers with status `"paused"`. ++ type: integer ++ example: 1 ++ ContainersStopped: ++ description: | ++ Number of containers with status `"stopped"`. ++ type: integer ++ example: 10 ++ Images: ++ description: | ++ Total number of images on the host. ++ ++ Both _tagged_ and _untagged_ (dangling) images are counted. ++ type: integer ++ example: 508 ++ Driver: ++ description: Name of the storage driver in use. ++ type: string ++ example: overlay2 ++ DriverStatus: ++ description: | ++ Information specific to the storage driver, provided as ++ "label" / "value" pairs. ++ ++ This information is provided by the storage driver, and formatted ++ in a way consistent with the output of `docker info` on the command ++ line. ++ ++ ++ ++ ++ ++ ++ > **Note**: The information returned in this field, including the ++ > formatting of values and labels, should not be considered stable, ++ > and may change without notice. ++ type: array ++ items: ++ type: array ++ items: ++ type: string ++ example: ++ - - Backing Filesystem ++ - extfs ++ - - Supports d_type ++ - "true" ++ - - Native Overlay Diff ++ - "true" ++ DockerRootDir: ++ description: | ++ Root directory of persistent Docker state. ++ ++ Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` ++ on Windows. ++ type: string ++ example: /var/lib/docker ++ Plugins: ++ $ref: "#/components/schemas/PluginsInfo" ++ MemoryLimit: ++ description: Indicates if the host has memory limit support enabled. ++ type: boolean ++ example: true ++ SwapLimit: ++ description: Indicates if the host has memory swap limit support enabled. ++ type: boolean ++ example: true ++ CpuCfsPeriod: ++ description: | ++ Indicates if CPU CFS(Completely Fair Scheduler) period is supported by ++ the host. ++ type: boolean ++ example: true ++ CpuCfsQuota: ++ description: | ++ Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by ++ the host. ++ type: boolean ++ example: true ++ CPUShares: ++ description: | ++ Indicates if CPU Shares limiting is supported by the host. ++ type: boolean ++ example: true ++ CPUSet: ++ description: | ++ Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. ++ ++ See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) ++ type: boolean ++ example: true ++ PidsLimit: ++ description: Indicates if the host kernel has PID limit support enabled. ++ type: boolean ++ example: true ++ OomKillDisable: ++ description: Indicates if OOM killer disable is supported on the host. ++ type: boolean ++ IPv4Forwarding: ++ description: Indicates IPv4 forwarding is enabled. ++ type: boolean ++ example: true ++ Debug: ++ description: | ++ Indicates if the daemon is running in debug-mode / with debug-level ++ logging enabled. ++ type: boolean ++ example: true ++ NFd: ++ description: | ++ The total number of file Descriptors in use by the daemon process. ++ ++ This information is only returned if debug-mode is enabled. ++ type: integer ++ example: 64 ++ NGoroutines: ++ description: | ++ The number of goroutines that currently exist. ++ ++ This information is only returned if debug-mode is enabled. ++ type: integer ++ example: 174 ++ SystemTime: ++ description: | ++ Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) ++ format with nano-seconds. ++ type: string ++ example: 2017-08-08T20:28:29.06202363Z ++ LoggingDriver: ++ description: | ++ The logging driver to use as a default for new containers. ++ type: string ++ CgroupDriver: ++ description: | ++ The driver to use for managing cgroups. ++ type: string ++ enum: ++ - cgroupfs ++ - systemd ++ - none ++ default: cgroupfs ++ example: cgroupfs ++ CgroupVersion: ++ description: | ++ The version of the cgroup. ++ type: string ++ enum: ++ - "1" ++ - "2" ++ default: "1" ++ example: "1" ++ NEventsListener: ++ description: Number of event listeners subscribed. ++ type: integer ++ example: 30 ++ KernelVersion: ++ description: | ++ Kernel version of the host. ++ ++ On Linux, this information obtained from `uname`. On Windows this ++ information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ ++ registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. ++ type: string ++ example: 6.8.0-31-generic ++ OperatingSystem: ++ description: | ++ Name of the host's operating system, for example: "Ubuntu 24.04 LTS" ++ or "Windows Server 2016 Datacenter" ++ type: string ++ example: Ubuntu 24.04 LTS ++ OSVersion: ++ description: | ++ Version of the host's operating system ++ ++ ++ ++ ++ ++ ++ > **Note**: The information returned in this field, including its ++ > very existence, and the formatting of values, should not be considered ++ > stable, and may change without notice. ++ type: string ++ example: "24.04" ++ OSType: ++ description: | ++ Generic type of the operating system of the host, as returned by the ++ Go runtime (`GOOS`). ++ ++ Currently returned values are "linux" and "windows". A full list of ++ possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). ++ type: string ++ example: linux ++ Architecture: ++ description: | ++ Hardware architecture of the host, as returned by the operating system. ++ This is equivalent to the output of `uname -m` on Linux. ++ ++ Unlike `Arch` (from `/version`), this reports the machine's native ++ architecture, which can differ from the Go runtime architecture when ++ running a binary compiled for a different architecture (for example, ++ a 32-bit binary running on 64-bit hardware). ++ type: string ++ example: x86_64 ++ NCPU: ++ description: | ++ The number of logical CPUs usable by the daemon. ++ ++ The number of available CPUs is checked by querying the operating ++ system when the daemon starts. Changes to operating system CPU ++ allocation after the daemon is started are not reflected. ++ type: integer ++ example: 4 ++ MemTotal: ++ description: | ++ Total amount of physical memory available on the host, in bytes. ++ type: integer ++ format: int64 ++ example: 2095882240 ++ IndexServerAddress: ++ description: | ++ Address / URL of the index server that is used for image search, ++ and as a default for user authentication for Docker Hub and Docker Cloud. ++ default: https://index.docker.io/v1/ ++ type: string ++ example: https://index.docker.io/v1/ ++ RegistryConfig: ++ $ref: "#/components/schemas/RegistryServiceConfig" ++ GenericResources: ++ $ref: "#/components/schemas/GenericResources" ++ HttpProxy: ++ description: | ++ HTTP-proxy configured for the daemon. This value is obtained from the ++ [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. ++ Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL ++ are masked in the API response. ++ ++ Containers do not automatically inherit this configuration. ++ type: string ++ example: http://xxxxx:xxxxx@proxy.corp.example.com:8080 ++ HttpsProxy: ++ description: | ++ HTTPS-proxy configured for the daemon. This value is obtained from the ++ [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. ++ Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL ++ are masked in the API response. ++ ++ Containers do not automatically inherit this configuration. ++ type: string ++ example: https://xxxxx:xxxxx@proxy.corp.example.com:4443 ++ NoProxy: ++ description: | ++ Comma-separated list of domain extensions for which no proxy should be ++ used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) ++ environment variable. ++ ++ Containers do not automatically inherit this configuration. ++ type: string ++ example: "*.local, 169.254/16" ++ Name: ++ description: Hostname of the host. ++ type: string ++ example: node5.corp.example.com ++ Labels: ++ description: | ++ User-defined labels (key/value metadata) as set on the daemon. ++ ++ ++ ++ ++ ++ ++ > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, ++ > set through the daemon configuration, and _node_ labels, set from a ++ > manager node in the Swarm. Node labels are not included in this ++ > field. Node labels can be retrieved using the `/nodes/(id)` endpoint ++ > on a manager node in the Swarm. ++ type: array ++ items: ++ type: string ++ example: ++ - storage=ssd ++ - production ++ ExperimentalBuild: ++ description: | ++ Indicates if experimental features are enabled on the daemon. ++ type: boolean ++ example: true ++ ServerVersion: ++ description: | ++ Version string of the daemon. ++ type: string ++ example: 27.0.1 ++ Runtimes: ++ description: | ++ List of [OCI compliant](https://github.com/opencontainers/runtime-spec) ++ runtimes configured on the daemon. Keys hold the "name" used to ++ reference the runtime. ++ ++ The Docker daemon relies on an OCI compliant runtime (invoked via the ++ `containerd` daemon) as its interface to the Linux kernel namespaces, ++ cgroups, and SELinux. ++ ++ The default runtime is `runc`, and automatically configured. Additional ++ runtimes can be configured by the user and will be listed here. ++ type: object ++ additionalProperties: ++ $ref: "#/components/schemas/Runtime" ++ default: ++ runc: ++ path: runc ++ example: ++ runc: ++ path: runc ++ runc-master: ++ path: /go/bin/runc ++ custom: ++ path: /usr/local/bin/my-oci-runtime ++ runtimeArgs: ++ - --debug ++ - --systemd-cgroup=false ++ DefaultRuntime: ++ description: | ++ Name of the default OCI runtime that is used when starting containers. ++ ++ The default can be overridden per-container at create time. ++ type: string ++ default: runc ++ example: runc ++ Swarm: ++ $ref: "#/components/schemas/SwarmInfo" ++ LiveRestoreEnabled: ++ description: | ++ Indicates if live restore is enabled. ++ ++ If enabled, containers are kept running when the daemon is shutdown ++ or upon daemon start if running containers are detected. ++ type: boolean ++ default: false ++ example: false ++ Isolation: ++ description: | ++ Represents the isolation technology to use as a default for containers. ++ The supported values are platform-specific. ++ ++ If no isolation value is specified on daemon start, on Windows client, ++ the default is `hyperv`, and on Windows server, the default is `process`. ++ ++ This option is currently not used on other platforms. ++ default: default ++ type: string ++ enum: ++ - default ++ - hyperv ++ - process ++ - "" ++ InitBinary: ++ description: | ++ Name and, optional, path of the `docker-init` binary. ++ ++ If the path is omitted, the daemon searches the host's `$PATH` for the ++ binary and uses the first result. ++ type: string ++ example: docker-init ++ ContainerdCommit: ++ $ref: "#/components/schemas/Commit" ++ RuncCommit: ++ $ref: "#/components/schemas/Commit" ++ InitCommit: ++ $ref: "#/components/schemas/Commit" ++ SecurityOptions: ++ description: | ++ List of security features that are enabled on the daemon, such as ++ apparmor, seccomp, SELinux, user-namespaces (userns), rootless and ++ no-new-privileges. ++ ++ Additional configuration options for each security feature may ++ be present, and are included as a comma-separated list of key/value ++ pairs. ++ type: array ++ items: ++ type: string ++ example: ++ - name=apparmor ++ - name=seccomp,profile=default ++ - name=selinux ++ - name=userns ++ - name=rootless ++ ProductLicense: ++ description: | ++ Reports a summary of the product license on the daemon. ++ ++ If a commercial license has been applied to the daemon, information ++ such as number of nodes, and expiration are included. ++ type: string ++ example: Community Engine ++ DefaultAddressPools: ++ description: | ++ List of custom default address pools for local networks, which can be ++ specified in the daemon.json file or dockerd option. ++ ++ Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 ++ 10.10.[0-255].0/24 address pools. ++ type: array ++ items: ++ type: object ++ properties: ++ Base: ++ description: The network address in CIDR format ++ type: string ++ example: 10.10.0.0/16 ++ Size: ++ description: The network pool size ++ type: integer ++ example: "24" ++ FirewallBackend: ++ $ref: "#/components/schemas/FirewallInfo" ++ DiscoveredDevices: ++ description: | ++ List of devices discovered by device drivers. ++ ++ Each device includes information about its source driver, kind, name, ++ and additional driver-specific attributes. ++ type: array ++ items: ++ $ref: "#/components/schemas/DeviceInfo" ++ NRI: ++ $ref: "#/components/schemas/NRIInfo" ++ Warnings: ++ description: | ++ List of warnings / informational messages about missing features, or ++ issues related to the daemon configuration. ++ ++ These messages can be printed by the client as information to the user. ++ type: array ++ items: ++ type: string ++ example: ++ - "WARNING: No memory limit support" ++ CDISpecDirs: ++ description: | ++ List of directories where (Container Device Interface) CDI ++ specifications are located. ++ ++ These specifications define vendor-specific modifications to an OCI ++ runtime specification for a container being created. ++ ++ An empty list indicates that CDI device injection is disabled. ++ ++ Note that since using CDI device injection requires the daemon to have ++ experimental enabled. For non-experimental daemons an empty list will ++ always be returned. ++ type: array ++ items: ++ type: string ++ example: ++ - /etc/cdi ++ - /var/run/cdi ++ Containerd: ++ $ref: "#/components/schemas/ContainerdInfo" ++ ContainerdInfo: ++ description: | ++ Information for connecting to the containerd instance that is used by the daemon. ++ This is included for debugging purposes only. ++ type: ++ - object ++ - "null" ++ properties: ++ Address: ++ description: The address of the containerd socket. ++ type: string ++ example: /run/containerd/containerd.sock ++ Namespaces: ++ description: | ++ The namespaces that the daemon uses for running containers and ++ plugins in containerd. These namespaces can be configured in the ++ daemon configuration, and are considered to be used exclusively ++ by the daemon, Tampering with the containerd instance may cause ++ unexpected behavior. ++ ++ As these namespaces are considered to be exclusively accessed ++ by the daemon, it is not recommended to change these values, ++ or to change them to a value that is used by other systems, ++ such as cri-containerd. ++ type: object ++ properties: ++ Containers: ++ description: | ++ The default containerd namespace used for containers managed ++ by the daemon. ++ ++ The default namespace for containers is "moby", but will be ++ suffixed with the `.` of the remapped `root` if ++ user-namespaces are enabled and the containerd image-store ++ is used. ++ type: string ++ default: moby ++ example: moby ++ Plugins: ++ description: | ++ The default containerd namespace used for plugins managed by ++ the daemon. ++ ++ The default namespace for plugins is "plugins.moby", but will be ++ suffixed with the `.` of the remapped `root` if ++ user-namespaces are enabled and the containerd image-store ++ is used. ++ type: string ++ default: plugins.moby ++ example: plugins.moby ++ FirewallInfo: ++ description: | ++ Information about the daemon's firewalling configuration. ++ ++ This field is currently only used on Linux, and omitted on other platforms. ++ type: ++ - object ++ - "null" ++ properties: ++ Driver: ++ description: | ++ The name of the firewall backend driver. ++ type: string ++ example: nftables ++ Info: ++ description: | ++ Information about the firewall backend, provided as ++ "label" / "value" pairs. ++ ++ ++ ++ ++ ++ ++ > **Note**: The information returned in this field, including the ++ > formatting of values and labels, should not be considered stable, ++ > and may change without notice. ++ type: array ++ items: ++ type: array ++ items: ++ type: string ++ example: ++ - - ReloadedAt ++ - 2025-01-01T00:00:00Z ++ PluginsInfo: ++ description: | ++ Available plugins per type. ++ ++ ++ ++ ++ ++ ++ > **Note**: Only unmanaged (V1) plugins are included in this list. ++ > V1 plugins are "lazily" loaded, and are not returned in this list ++ > if there is no resource using the plugin. ++ type: object ++ properties: ++ Volume: ++ description: Names of available volume-drivers, and network-driver plugins. ++ type: array ++ items: ++ type: string ++ example: ++ - local ++ Network: ++ description: Names of available network-drivers, and network-driver plugins. ++ type: array ++ items: ++ type: string ++ example: ++ - bridge ++ - host ++ - ipvlan ++ - macvlan ++ - "null" ++ - overlay ++ Authorization: ++ description: Names of available authorization plugins. ++ type: array ++ items: ++ type: string ++ example: ++ - img-authz-plugin ++ - hbm ++ Log: ++ description: Names of available logging-drivers, and logging-driver plugins. ++ type: array ++ items: ++ type: string ++ example: ++ - awslogs ++ - fluentd ++ - gcplogs ++ - gelf ++ - journald ++ - json-file ++ - splunk ++ - syslog ++ RegistryServiceConfig: ++ description: | ++ RegistryServiceConfig stores daemon registry services configuration. ++ type: ++ - object ++ - "null" ++ properties: ++ InsecureRegistryCIDRs: ++ description: | ++ List of IP ranges of insecure registries, using the CIDR syntax ++ ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries ++ accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates ++ from unknown CAs) communication. ++ ++ By default, local registries (`::1/128` and `127.0.0.0/8`) are configured as ++ insecure. All other registries are secure. Communicating with an ++ insecure registry is not possible if the daemon assumes that registry ++ is secure. ++ ++ This configuration override this behavior, insecure communication with ++ registries whose resolved IP address is within the subnet described by ++ the CIDR syntax. ++ ++ Registries can also be marked insecure by hostname. Those registries ++ are listed under `IndexConfigs` and have their `Secure` field set to ++ `false`. ++ ++ > **Warning**: Using this option can be useful when running a local ++ > registry, but introduces security vulnerabilities. This option ++ > should therefore ONLY be used for testing purposes. For increased ++ > security, users should add their CA to their system's list of trusted ++ > CAs instead of enabling this option. ++ type: array ++ items: ++ type: string ++ example: ++ - ::1/128 ++ - 127.0.0.0/8 ++ IndexConfigs: ++ type: object ++ additionalProperties: ++ $ref: "#/components/schemas/IndexInfo" ++ example: ++ 127.0.0.1:5000: ++ Name: 127.0.0.1:5000 ++ Mirrors: [] ++ Secure: false ++ Official: false ++ "[2001:db8:a0b:12f0::1]:80": ++ Name: "[2001:db8:a0b:12f0::1]:80" ++ Mirrors: [] ++ Secure: false ++ Official: false ++ docker.io: ++ Name: docker.io ++ Mirrors: ++ - https://hub-mirror.corp.example.com:5000/ ++ Secure: true ++ Official: true ++ registry.internal.corp.example.com:3000: ++ Name: registry.internal.corp.example.com:3000 ++ Mirrors: [] ++ Secure: false ++ Official: false ++ Mirrors: ++ description: | ++ List of registry URLs that act as a mirror for the official ++ (`docker.io`) registry. ++ type: array ++ items: ++ type: string ++ example: ++ - https://hub-mirror.corp.example.com:5000/ ++ - https://[2001:db8:a0b:12f0::1]/ ++ IndexInfo: ++ description: IndexInfo contains information about a registry. ++ type: ++ - object ++ - "null" ++ properties: ++ Name: ++ description: | ++ Name of the registry, such as "docker.io". ++ type: string ++ example: docker.io ++ Mirrors: ++ description: | ++ List of mirrors, expressed as URIs. ++ type: array ++ items: ++ type: string ++ example: ++ - https://hub-mirror.corp.example.com:5000/ ++ - https://registry-2.docker.io/ ++ - https://registry-3.docker.io/ ++ Secure: ++ description: | ++ Indicates if the registry is part of the list of insecure ++ registries. ++ ++ If `false`, the registry is insecure. Insecure registries accept ++ un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from ++ unknown CAs) communication. ++ ++ > **Warning**: Insecure registries can be useful when running a local ++ > registry. However, because its use creates security vulnerabilities ++ > it should ONLY be enabled for testing purposes. For increased ++ > security, users should add their CA to their system's list of ++ > trusted CAs instead of enabling this option. ++ type: boolean ++ example: true ++ Official: ++ description: | ++ Indicates whether this is an official registry (i.e., Docker Hub / docker.io) ++ type: boolean ++ example: true ++ Runtime: ++ description: | ++ Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec) ++ runtime. ++ ++ The runtime is invoked by the daemon via the `containerd` daemon. OCI ++ runtimes act as an interface to the Linux kernel namespaces, cgroups, ++ and SELinux. ++ type: object ++ properties: ++ path: ++ description: | ++ Name and, optional, path, of the OCI executable binary. ++ ++ If the path is omitted, the daemon searches the host's `$PATH` for the ++ binary and uses the first result. ++ type: string ++ example: /usr/local/bin/my-oci-runtime ++ runtimeArgs: ++ description: | ++ List of command-line arguments to pass to the runtime when invoked. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ example: ++ - --debug ++ - --systemd-cgroup=false ++ status: ++ description: | ++ Information specific to the runtime. ++ ++ While this API specification does not define data provided by runtimes, ++ the following well-known properties may be provided by runtimes: ++ ++ `org.opencontainers.runtime-spec.features`: features structure as defined ++ in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), ++ in a JSON string representation. ++ ++ ++ ++ ++ ++ ++ > **Note**: The information returned in this field, including the ++ > formatting of values and labels, should not be considered stable, ++ > and may change without notice. ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: string ++ example: ++ org.opencontainers.runtime-spec.features: '{"ociVersionMin":"1.0.0","ociVersionMax":"1.1.0","...":"..."}' ++ Commit: ++ description: | ++ Commit holds the Git-commit (SHA1) that a binary was built from, as ++ reported in the version-string of external tools, such as `containerd`, ++ or `runC`. ++ type: object ++ properties: ++ ID: ++ description: Actual commit ID of external tool. ++ type: string ++ example: cfb82a876ecc11b5ca0977d1733adbe58599088a ++ SwarmInfo: ++ description: | ++ Represents generic information about swarm. ++ type: object ++ properties: ++ NodeID: ++ description: Unique identifier of for this node in the swarm. ++ type: string ++ default: "" ++ example: k67qz4598weg5unwwffg6z1m1 ++ NodeAddr: ++ description: | ++ IP address at which this node can be reached by other nodes in the ++ swarm. ++ type: string ++ default: "" ++ example: 10.0.0.46 ++ LocalNodeState: ++ $ref: "#/components/schemas/LocalNodeState" ++ ControlAvailable: ++ type: boolean ++ default: false ++ example: true ++ Error: ++ type: string ++ default: "" ++ RemoteManagers: ++ description: | ++ List of ID's and addresses of other managers in the swarm. ++ type: ++ - array ++ - "null" ++ default: null ++ items: ++ $ref: "#/components/schemas/PeerNode" ++ example: ++ - NodeID: 71izy0goik036k48jg985xnds ++ Addr: 10.0.0.158:2377 ++ - NodeID: 79y6h1o4gv8n120drcprv5nmc ++ Addr: 10.0.0.159:2377 ++ - NodeID: k67qz4598weg5unwwffg6z1m1 ++ Addr: 10.0.0.46:2377 ++ Nodes: ++ description: Total number of nodes in the swarm. ++ type: ++ - integer ++ - "null" ++ example: 4 ++ Managers: ++ description: Total number of managers in the swarm. ++ type: ++ - integer ++ - "null" ++ example: 3 ++ Cluster: ++ $ref: "#/components/schemas/ClusterInfo" ++ LocalNodeState: ++ description: Current local status of this node. ++ type: string ++ default: "" ++ enum: ++ - "" ++ - inactive ++ - pending ++ - active ++ - error ++ - locked ++ example: active ++ PeerNode: ++ description: Represents a peer-node in the swarm ++ type: object ++ properties: ++ NodeID: ++ description: Unique identifier of for this node in the swarm. ++ type: string ++ Addr: ++ description: | ++ IP address and ports at which this node can be reached. ++ type: string ++ NetworkAttachmentConfig: ++ description: | ++ Specifies how a service should be attached to a particular network. ++ type: object ++ properties: ++ Target: ++ description: | ++ The target network for attachment. Must be a network name or ID. ++ type: string ++ Aliases: ++ description: | ++ Discoverable alternate names for the service on this network. ++ type: array ++ items: ++ type: string ++ DriverOpts: ++ description: | ++ Driver attachment options for the network target. ++ type: object ++ additionalProperties: ++ type: string ++ EventActor: ++ description: | ++ Actor describes something that generates events, like a container, network, ++ or a volume. ++ type: object ++ properties: ++ ID: ++ description: The ID of the object emitting the event ++ type: string ++ example: ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743 ++ Attributes: ++ description: | ++ Various key/value attributes of the object, depending on its type. ++ type: object ++ additionalProperties: ++ type: string ++ example: ++ com.example.some-label: some-label-value ++ image: alpine:latest ++ name: my-container ++ EventMessage: ++ description: | ++ EventMessage represents the information an event contains. ++ type: object ++ title: SystemEventsResponse ++ properties: ++ Type: ++ description: The type of object emitting the event ++ type: string ++ enum: ++ - builder ++ - config ++ - container ++ - daemon ++ - image ++ - network ++ - node ++ - plugin ++ - secret ++ - service ++ - volume ++ example: container ++ Action: ++ description: The type of event ++ type: string ++ example: create ++ Actor: ++ $ref: "#/components/schemas/EventActor" ++ scope: ++ description: | ++ Scope of the event. Engine events are `local` scope. Cluster (Swarm) ++ events are `swarm` scope. ++ type: string ++ enum: ++ - local ++ - swarm ++ time: ++ description: Timestamp of event ++ type: integer ++ format: int64 ++ example: 1629574695 ++ timeNano: ++ description: Timestamp of event, with nanosecond accuracy ++ type: integer ++ format: int64 ++ example: 1629574695515050000 ++ OCIDescriptor: ++ type: object ++ x-go-name: Descriptor ++ description: | ++ A descriptor struct containing digest, media type, and size, as defined in ++ the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). ++ properties: ++ mediaType: ++ description: | ++ The media type of the object this schema refers to. ++ type: string ++ example: application/vnd.oci.image.manifest.v1+json ++ digest: ++ description: | ++ The digest of the targeted content. ++ type: string ++ example: sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96 ++ size: ++ description: | ++ The size in bytes of the blob. ++ type: integer ++ format: int64 ++ example: 424 ++ urls: ++ description: List of URLs from which this object MAY be downloaded. ++ type: ++ - array ++ - "null" ++ items: ++ type: string ++ format: uri ++ annotations: ++ description: Arbitrary metadata relating to the targeted content. ++ type: ++ - object ++ - "null" ++ additionalProperties: ++ type: string ++ example: ++ com.docker.official-images.bashbrew.arch: amd64 ++ org.opencontainers.image.base.digest: sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8 ++ org.opencontainers.image.base.name: scratch ++ org.opencontainers.image.created: 2025-01-27T00:00:00Z ++ org.opencontainers.image.revision: 9fabb4bad5138435b01857e2fe9363e2dc5f6a79 ++ org.opencontainers.image.source: https://git.launchpad.net/cloud-images/+oci/ubuntu-base ++ org.opencontainers.image.url: https://hub.docker.com/_/ubuntu ++ org.opencontainers.image.version: "24.04" ++ data: ++ type: ++ - string ++ - "null" ++ description: |- ++ Data is an embedding of the targeted content. This is encoded as a base64 ++ string when marshalled to JSON (automatically, by encoding/json). If ++ present, Data can be used directly to avoid fetching the targeted content. ++ example: null ++ platform: ++ $ref: "#/components/schemas/OCIPlatform" ++ artifactType: ++ description: ArtifactType is the IANA media type of this artifact. ++ type: ++ - string ++ - "null" ++ example: null ++ OCIPlatform: ++ type: ++ - object ++ - "null" ++ x-go-name: Platform ++ description: | ++ Describes the platform which the image in the manifest runs on, as defined ++ in the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md). ++ properties: ++ architecture: ++ description: | ++ The CPU architecture, for example `amd64` or `ppc64`. ++ type: string ++ example: arm ++ os: ++ description: | ++ The operating system, for example `linux` or `windows`. ++ type: string ++ example: windows ++ os.version: ++ description: | ++ Optional field specifying the operating system version, for example on ++ Windows `10.0.19041.1165`. ++ type: string ++ example: 10.0.19041.1165 ++ os.features: ++ description: | ++ Optional field specifying an array of strings, each listing a required ++ OS feature (for example on Windows `win32k`). ++ type: array ++ items: ++ type: string ++ example: ++ - win32k ++ variant: ++ description: | ++ Optional field specifying a variant of the CPU, for example `v7` to ++ specify ARMv7 when architecture is `arm`. ++ type: string ++ example: v7 ++ DistributionInspect: ++ type: object ++ x-go-name: DistributionInspect ++ title: DistributionInspectResponse ++ required: ++ - Descriptor ++ - Platforms ++ description: | ++ Describes the result obtained from contacting the registry to retrieve ++ image metadata. ++ properties: ++ Descriptor: ++ $ref: "#/components/schemas/OCIDescriptor" ++ Platforms: ++ type: array ++ description: | ++ An array containing all platforms supported by the image. ++ items: ++ $ref: "#/components/schemas/OCIPlatform" ++ ClusterVolume: ++ type: object ++ description: | ++ Options and information specific to, and only present on, Swarm CSI ++ cluster volumes. ++ properties: ++ ID: ++ type: string ++ description: | ++ The Swarm ID of this volume. Because cluster volumes are Swarm ++ objects, they have an ID, unlike non-cluster volumes. This ID can ++ be used to refer to the Volume instead of the name. ++ Version: ++ $ref: "#/components/schemas/ObjectVersion" ++ CreatedAt: ++ type: string ++ format: dateTime ++ UpdatedAt: ++ type: string ++ format: dateTime ++ Spec: ++ $ref: "#/components/schemas/ClusterVolumeSpec" ++ Info: ++ type: object ++ description: | ++ Information about the global status of the volume. ++ properties: ++ CapacityBytes: ++ type: integer ++ format: int64 ++ description: | ++ The capacity of the volume in bytes. A value of 0 indicates that ++ the capacity is unknown. ++ VolumeContext: ++ type: object ++ description: | ++ A map of strings to strings returned from the storage plugin when ++ the volume is created. ++ additionalProperties: ++ type: string ++ VolumeID: ++ type: string ++ description: | ++ The ID of the volume as returned by the CSI storage plugin. This ++ is distinct from the volume's ID as provided by Docker. This ID ++ is never used by the user when communicating with Docker to refer ++ to this volume. If the ID is blank, then the Volume has not been ++ successfully created in the plugin yet. ++ AccessibleTopology: ++ type: array ++ description: | ++ The topology this volume is actually accessible from. ++ items: ++ $ref: "#/components/schemas/Topology" ++ PublishStatus: ++ type: array ++ description: | ++ The status of the volume as it pertains to its publishing and use on ++ specific nodes ++ items: ++ type: object ++ properties: ++ NodeID: ++ type: string ++ description: | ++ The ID of the Swarm node the volume is published on. ++ State: ++ type: string ++ description: | ++ The published state of the volume. ++ * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. ++ * `published` The volume is published successfully to the node. ++ * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. ++ * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. ++ enum: ++ - pending-publish ++ - published ++ - pending-node-unpublish ++ - pending-controller-unpublish ++ PublishContext: ++ type: object ++ description: | ++ A map of strings to strings returned by the CSI controller ++ plugin when a volume is published. ++ additionalProperties: ++ type: string ++ ClusterVolumeSpec: ++ type: object ++ description: | ++ Cluster-specific options used to create the volume. ++ properties: ++ Group: ++ type: string ++ description: | ++ Group defines the volume group of this volume. Volumes belonging to ++ the same group can be referred to by group name when creating ++ Services. Referring to a volume by group instructs Swarm to treat ++ volumes in that group interchangeably for the purpose of scheduling. ++ Volumes with an empty string for a group technically all belong to ++ the same, emptystring group. ++ AccessMode: ++ type: object ++ description: | ++ Defines how the volume is used by tasks. ++ properties: ++ Scope: ++ type: string ++ description: | ++ The set of nodes this volume can be used on at one time. ++ - `single` The volume may only be scheduled to one node at a time. ++ - `multi` the volume may be scheduled to any supported number of nodes at a time. ++ default: single ++ enum: ++ - single ++ - multi ++ Sharing: ++ type: string ++ description: | ++ The number and way that different tasks can use this volume ++ at one time. ++ - `none` The volume may only be used by one task at a time. ++ - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly ++ - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. ++ - `all` The volume may have any number of readers and writers. ++ default: none ++ enum: ++ - none ++ - readonly ++ - onewriter ++ - all ++ MountVolume: ++ type: object ++ description: | ++ Options for using this volume as a Mount-type volume. ++ ++ Either MountVolume or BlockVolume, but not both, must be ++ present. ++ properties: ++ FsType: ++ type: "string" ++ description: | ++ Specifies the filesystem type for the mount volume. ++ Optional. ++ MountFlags: ++ type: "array" ++ description: | ++ Flags to pass when mounting the volume. Optional. ++ items: ++ type: "string" ++ BlockVolume: ++ type: "object" ++ description: | ++ Options for using this volume as a Block-type volume. ++ Intentionally empty. ++ Secrets: ++ type: array ++ description: | ++ Swarm Secrets that are passed to the CSI storage plugin when ++ operating on this volume. ++ items: ++ type: object ++ description: | ++ One cluster volume secret entry. Defines a key-value pair that ++ is passed to the plugin. ++ properties: ++ Key: ++ type: string ++ description: | ++ Key is the name of the key of the key-value pair passed to ++ the plugin. ++ Secret: ++ type: string ++ description: | ++ Secret is the swarm Secret object from which to read data. ++ This can be a Secret name or ID. The Secret data is ++ retrieved by swarm and used as the value of the key-value ++ pair passed to the plugin. ++ AccessibilityRequirements: ++ type: object ++ description: | ++ Requirements for the accessible topology of the volume. These ++ fields are optional. For an in-depth description of what these ++ fields mean, see the CSI specification. ++ properties: ++ Requisite: ++ type: array ++ description: | ++ A list of required topologies, at least one of which the ++ volume must be accessible from. ++ items: ++ $ref: "#/components/schemas/Topology" ++ Preferred: ++ type: array ++ description: | ++ A list of topologies that the volume should attempt to be ++ provisioned in. ++ items: ++ $ref: "#/components/schemas/Topology" ++ CapacityRange: ++ type: object ++ description: | ++ The desired capacity that the volume should be created with. If ++ empty, the plugin will decide the capacity. ++ properties: ++ RequiredBytes: ++ type: integer ++ format: int64 ++ description: | ++ The volume must be at least this big. The value of 0 ++ indicates an unspecified minimum ++ LimitBytes: ++ type: integer ++ format: int64 ++ description: | ++ The volume must not be bigger than this. The value of 0 ++ indicates an unspecified maximum. ++ Availability: ++ type: string ++ description: | ++ The availability of the volume for use in tasks. ++ - `active` The volume is fully available for scheduling on the cluster ++ - `pause` No new workloads should use the volume, but existing workloads are not stopped. ++ - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. ++ default: active ++ enum: ++ - active ++ - pause ++ - drain ++ Topology: ++ description: | ++ A map of topological domains to topological segments. For in depth ++ details, see documentation for the Topology object in the CSI ++ specification. ++ type: object ++ properties: ++ Segments: ++ type: object ++ additionalProperties: ++ type: string ++ AttestationStatement: ++ x-go-name: AttestationStatement ++ description: | ++ AttestationStatement is a single in-toto statement attached to an image. ++ type: object ++ required: ++ - Descriptor ++ - PredicateType ++ properties: ++ Descriptor: ++ $ref: "#/components/schemas/OCIDescriptor" ++ PredicateType: ++ description: The in-toto predicate type URI of this statement. ++ type: string ++ example: https://slsa.dev/provenance/v0.2 ++ Statement: ++ description: | ++ The verbatim in-toto statement JSON. Only included when the caller ++ opts in via the `statement=true` query parameter; otherwise absent. ++ type: ++ - object ++ - "null" ++ ImageManifestSummary: ++ x-go-name: ManifestSummary ++ description: | ++ ImageManifestSummary represents a summary of an image manifest. ++ type: object ++ required: ++ - ID ++ - Descriptor ++ - Available ++ - Size ++ - Kind ++ properties: ++ ID: ++ description: | ++ ID is the content-addressable ID of an image and is the same as the ++ digest of the image manifest. ++ type: string ++ example: sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f ++ Descriptor: ++ $ref: "#/components/schemas/OCIDescriptor" ++ Available: ++ description: Indicates whether all the child content (image config, layers) is fully available locally. ++ type: boolean ++ example: true ++ Size: ++ type: object ++ required: ++ - Content ++ - Total ++ properties: ++ Total: ++ type: integer ++ format: int64 ++ example: 8213251 ++ description: | ++ Total is the total size (in bytes) of all the locally present ++ data (both distributable and non-distributable) that's related to ++ this manifest and its children. ++ This equal to the sum of [Content] size AND all the sizes in the ++ [Size] struct present in the Kind-specific data struct. ++ For example, for an image kind (Kind == "image") ++ this would include the size of the image content and unpacked ++ image snapshots ([Size.Content] + [ImageData.Size.Unpacked]). ++ Content: ++ description: | ++ Content is the size (in bytes) of all the locally present ++ content in the content store (e.g. image config, layers) ++ referenced by this manifest and its children. ++ This only includes blobs in the content store. ++ type: integer ++ format: int64 ++ example: 3987495 ++ Kind: ++ type: string ++ example: image ++ enum: ++ - image ++ - attestation ++ - unknown ++ description: | ++ The kind of the manifest. ++ ++ kind | description ++ -------------|----------------------------------------------------------- ++ image | Image manifest that can be used to start a container. ++ attestation | Attestation manifest produced by the Buildkit builder for a specific image manifest. ++ ImageData: ++ description: | ++ The image data for the image manifest. ++ This field is only populated when Kind is "image". ++ type: ++ - object ++ - "null" ++ x-omitempty: true ++ required: ++ - Platform ++ - Containers ++ - Size ++ - UnpackedSize ++ properties: ++ Platform: ++ allOf: ++ - $ref: "#/components/schemas/OCIPlatform" ++ - description: | ++ OCI platform of the image. This will be the platform specified in the ++ manifest descriptor from the index/manifest list. ++ If it's not available, it will be obtained from the image config. ++ Identity: ++ allOf: ++ - $ref: "#/components/schemas/Identity" ++ - anyOf: ++ - description: | ++ Identity holds information about the identity and origin of this image. ++ For image list responses, this can duplicate Build/Pull fields across ++ image manifests, because those parts are image-level metadata. ++ - type: "null" ++ Containers: ++ description: | ++ The IDs of the containers that are using this image. ++ type: array ++ items: ++ type: string ++ example: ++ - ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430 ++ - abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e ++ Size: ++ type: object ++ required: ++ - Unpacked ++ properties: ++ Unpacked: ++ type: integer ++ format: int64 ++ example: 3987495 ++ description: | ++ Unpacked is the size (in bytes) of the locally unpacked ++ (uncompressed) image content that's directly usable by the containers ++ running this image. ++ It's independent of the distributable content - e.g. ++ the image might still have an unpacked data that's still used by ++ some container even when the distributable/compressed content is ++ already gone. ++ AttestationData: ++ description: | ++ The image data for the attestation manifest. ++ This field is only populated when Kind is "attestation". ++ type: ++ - object ++ - "null" ++ x-omitempty: true ++ required: ++ - For ++ properties: ++ For: ++ description: | ++ The digest of the image manifest that this attestation is for. ++ type: string ++ example: sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f ++jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base ++security: [] diff --git a/prototypes/api-docs/migrations/governance.json b/prototypes/api-docs/migrations/governance.json new file mode 100644 index 000000000000..0db14bfe32a1 --- /dev/null +++ b/prototypes/api-docs/migrations/governance.json @@ -0,0 +1,103 @@ +{ + "api": "governance", + "source": { + "id": "governance", + "product": "governance", + "title": "AI Governance", + "source": "content/reference/api/ai-governance/api.yaml", + "owner": "docker/governor-services", + "upstreamPath": "governor-service-api/openapi.yaml", + "manual": "/manuals/ai/sandboxes/governance/", + "connection": "hosted", + "auth": "Exchange supported Docker credentials for a Hub bearer token. Organization permissions still apply.", + "guides": [ + "/reference/api/hub/latest/#tag/authentication" + ], + "sha256": "c133c0782991ceef45f6191e9e062d896fb4effc2d96dbd0fa15cba48a4032bc" + }, + "convertedSha256": "29011886e4aa19e601b3764a5a7deec813135967abcadec27cefe12b271194ed", + "profile": "docker-docs-prototype-1", + "changes": [ + { + "pointer": "/jsonSchemaDialect", + "beforePresent": false, + "afterPresent": true, + "after": "https://spec.openapis.org/oas/3.1/dialect/base", + "id": "governance-03ee85af235e", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "docker/governor-services", + "sourcePointer": null, + "destinationPointer": "/jsonSchemaDialect" + }, + { + "pointer": "/openapi", + "beforePresent": true, + "afterPresent": true, + "before": "3.1.0", + "after": "3.2.0", + "id": "governance-71377657b6ae", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "docker/governor-services", + "sourcePointer": "/openapi", + "destinationPointer": "/openapi" + }, + { + "pointer": "/tags", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "policies", + "description": "Policy lifecycle management" + }, + { + "name": "rules", + "description": "Rule management within an allowlist policy" + } + ], + "after": [ + { + "name": "policies", + "description": "Policy lifecycle management", + "summary": "policies", + "kind": "nav" + }, + { + "name": "rules", + "description": "Rule management within an allowlist policy", + "summary": "rules", + "kind": "nav" + } + ], + "id": "governance-8d93cf25f3e7", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/governor-services", + "sourcePointer": "/tags", + "destinationPointer": "/tags" + }, + { + "pointer": "/components/securitySchemes/bearerAuth/description", + "beforePresent": true, + "afterPresent": true, + "before": "Short-lived JWT obtained by exchanging Docker Hub credentials at\n`POST https://hub.docker.com/v2/auth/token`. Pass the JWT in the\n`Authorization: Bearer ` header. Tokens expire after a short\nperiod; request a fresh one when you receive a `401`.\n\nThe `password` field of the token request accepts any of the following\ncredential types:\n\n| Type | Format | Notes |\n|------|--------|-------|\n| Password | Plain text | Your Docker Hub account password. |\n| Personal Access Token (PAT) | `dckr_pat_*` | Recommended over passwords. Create one under Account Settings → Security. |\n| Organization Access Token (OAT) | `dckr_oat_*` | Scoped to an organization. Create one under Organization Settings → Access Tokens. |\n\nPAT and OAT strings can't be used directly as a bearer token. They must\nbe exchanged at the token endpoint first.\n\nSee [Docker Hub authentication](https://docs.docker.com/reference/api/hub/latest/#tag/authentication-api/operation/AuthCreateAccessToken)\nfor full details.\n", + "after": "Short-lived JWT obtained by exchanging Docker Hub credentials at\n`POST https://hub.docker.com/v2/auth/token`. Pass the JWT in the\n`Authorization: Bearer ` header. Tokens expire after a short\nperiod; request a fresh one when you receive a `401`.\n\nThe `secret` field of the token request accepts any of the following\ncredential types:\n\n| Type | Format | Notes |\n|------|--------|-------|\n| Password | Plain text | Your Docker Hub account password. |\n| Personal Access Token (PAT) | `dckr_pat_*` | Recommended over passwords. Create one under Account Settings → Security. |\n| Organization Access Token (OAT) | `dckr_oat_*` | Scoped to an organization. Create one under Organization Settings → Access Tokens. |\n\nPAT and OAT strings can't be used directly as a bearer token. They must\nbe exchanged at the token endpoint first.\n\nSee [Docker Hub authentication](https://docs.docker.com/reference/api/hub/latest/#tag/authentication-api/operation/AuthCreateAccessToken)\nfor full details.\n", + "id": "governance-52772ada440a", + "stage": "governance-token-prose", + "classification": "evidence-backed correction", + "rationale": "Align copied token request field names with the Hub token operation; upstream owner must confirm credential support.", + "evidence": "Hub POST /v2/auth/token identifier and secret fields", + "owner": "docker/governor-services", + "sourcePointer": "/components/securitySchemes/bearerAuth/description", + "destinationPointer": "/components/securitySchemes/bearerAuth/description" + } + ] +} diff --git a/prototypes/api-docs/migrations/governance.patch b/prototypes/api-docs/migrations/governance.patch new file mode 100644 index 000000000000..b43e80f74915 --- /dev/null +++ b/prototypes/api-docs/migrations/governance.patch @@ -0,0 +1,929 @@ +--- original/governance.yaml ++++ converted/governance.yaml +@@ -1,5 +1,4 @@ +-openapi: "3.1.0" +- ++openapi: 3.2.0 + info: + title: Docker AI Governance Policy API + version: "1" +@@ -30,30 +29,30 @@ + contact: + name: Docker + url: https://www.docker.com/products/ai-governance/ +- + tags: + - name: policies + description: Policy lifecycle management ++ summary: policies ++ kind: nav + - name: rules + description: Rule management within an allowlist policy +- ++ summary: rules ++ kind: nav + servers: + - url: https://hub.docker.com/v2 +- + security: + - bearerAuth: [] +- + paths: + /orgs/{org_name}/governance/policies: + parameters: + - $ref: "#/components/parameters/OrgName" + get: + operationId: listPolicies +- tags: [policies] ++ tags: ++ - policies + summary: List policies +- description: > +- Returns a shallow summary of all policies for the org. +- The rule set is not included; use GetPolicy to fetch the full object. ++ description: | ++ Returns a shallow summary of all policies for the org. The rule set is not included; use GetPolicy to fetch the full object. + responses: + "200": + description: Object wrapping an array of policy summaries under `data`. Rule sets are not included; use GetPolicy to fetch a full policy. +@@ -61,7 +60,8 @@ + application/json: + schema: + type: object +- required: [data] ++ required: ++ - data + properties: + data: + type: array +@@ -72,12 +72,13 @@ + value: + data: + - id: pol_06evsmp24r1pg71cm8500546pkbn +- name: "Security Research — hardened" ++ name: Security Research — hardened + org: my-org + scope: +- teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] +- created_at: "2026-04-22T00:00:00Z" +- updated_at: "2026-04-22T00:00:00Z" ++ teams: ++ - d290f1ee-6c54-4b01-90e6-d701748f0851 ++ created_at: 2026-04-22T00:00:00Z ++ updated_at: 2026-04-22T00:00:00Z + type: allowlist_v0 + "401": + $ref: "#/components/responses/Unauthenticated" +@@ -87,14 +88,13 @@ + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalError" +- + post: + operationId: createPolicy +- tags: [policies] ++ tags: ++ - policies + summary: Create policy +- description: > +- Creates a new policy with an empty rule set. Rules are added separately +- via the rules sub-resource. ++ description: | ++ Creates a new policy with an empty rule set. Rules are added separately via the rules sub-resource. + requestBody: + description: Policy name and optional scope. + required: true +@@ -105,9 +105,10 @@ + examples: + default: + value: +- name: "Security Research — hardened" ++ name: Security Research — hardened + scope: +- teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] ++ teams: ++ - d290f1ee-6c54-4b01-90e6-d701748f0851 + responses: + "201": + description: Policy created. Returns the new policy without its rule set. +@@ -119,12 +120,13 @@ + default: + value: + id: pol_06evsmp24r1pg71cm8500546pkbn +- name: "Security Research — hardened" ++ name: Security Research — hardened + org: my-org + scope: +- teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] +- created_at: "2026-04-22T00:00:00Z" +- updated_at: "2026-04-22T00:00:00Z" ++ teams: ++ - d290f1ee-6c54-4b01-90e6-d701748f0851 ++ created_at: 2026-04-22T00:00:00Z ++ updated_at: 2026-04-22T00:00:00Z + "400": + $ref: "#/components/responses/InvalidArgument" + "401": +@@ -137,14 +139,14 @@ + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/InternalError" +- + /orgs/{org_name}/governance/policies/{policy_id}: + parameters: + - $ref: "#/components/parameters/OrgName" + - $ref: "#/components/parameters/PolicyID" + get: + operationId: getPolicy +- tags: [policies] ++ tags: ++ - policies + summary: Get policy + description: Returns the full policy including its `allowlist_v0` rule set. + responses: +@@ -158,19 +160,24 @@ + default: + value: + id: pol_06evsmp24r1pg71cm8500546pkbn +- name: "Security Research — hardened" ++ name: Security Research — hardened + org: my-org + scope: +- teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] +- created_at: "2026-04-22T00:00:00Z" +- updated_at: "2026-04-22T00:00:00Z" ++ teams: ++ - d290f1ee-6c54-4b01-90e6-d701748f0851 ++ created_at: 2026-04-22T00:00:00Z ++ updated_at: 2026-04-22T00:00:00Z + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors +- actions: [connect:tcp, connect:udp] +- resources: [research.mitre.org, cve.mitre.org] ++ actions: ++ - connect:tcp ++ - connect:udp ++ resources: ++ - research.mitre.org ++ - cve.mitre.org + decision: allow + "401": + $ref: "#/components/responses/Unauthenticated" +@@ -182,7 +189,8 @@ + $ref: "#/components/responses/InternalError" + patch: + operationId: updatePolicy +- tags: [policies] ++ tags: ++ - policies + summary: Update policy + description: | + Partially updates a policy's metadata. Only fields present in the +@@ -211,7 +219,8 @@ + summary: Restrict to a team + value: + scope: +- teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] ++ teams: ++ - d290f1ee-6c54-4b01-90e6-d701748f0851 + responses: + "200": + description: Policy updated, returns old and new states. +@@ -224,35 +233,45 @@ + value: + old: + id: pol_06evsmp24r1pg71cm8500546pkbn +- name: "Security Research — hardened" ++ name: Security Research — hardened + org: my-org + scope: +- teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] +- created_at: "2026-04-22T00:00:00Z" +- updated_at: "2026-04-22T00:00:00Z" ++ teams: ++ - d290f1ee-6c54-4b01-90e6-d701748f0851 ++ created_at: 2026-04-22T00:00:00Z ++ updated_at: 2026-04-22T00:00:00Z + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors +- actions: [connect:tcp, connect:udp] +- resources: [research.mitre.org, cve.mitre.org] ++ actions: ++ - connect:tcp ++ - connect:udp ++ resources: ++ - research.mitre.org ++ - cve.mitre.org + decision: allow + new: + id: pol_06evsmp24r1pg71cm8500546pkbn + name: Security Research + org: my-org + scope: +- teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] +- created_at: "2026-04-22T00:00:00Z" +- updated_at: "2026-04-22T10:00:00Z" ++ teams: ++ - d290f1ee-6c54-4b01-90e6-d701748f0851 ++ created_at: 2026-04-22T00:00:00Z ++ updated_at: 2026-04-22T10:00:00Z + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors +- actions: [connect:tcp, connect:udp] +- resources: [research.mitre.org, cve.mitre.org] ++ actions: ++ - connect:tcp ++ - connect:udp ++ resources: ++ - research.mitre.org ++ - cve.mitre.org + decision: allow + "400": + $ref: "#/components/responses/InvalidArgument" +@@ -268,7 +287,8 @@ + $ref: "#/components/responses/InternalError" + delete: + operationId: deletePolicy +- tags: [policies] ++ tags: ++ - policies + summary: Delete policy + description: | + Permanently deletes the policy and its rule set. Returns the deleted +@@ -286,19 +306,24 @@ + value: + deleted: + id: pol_06evsmp24r1pg71cm8500546pkbn +- name: "Security Research — hardened" ++ name: Security Research — hardened + org: my-org + scope: +- teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] +- created_at: "2026-04-22T00:00:00Z" +- updated_at: "2026-04-22T00:00:00Z" ++ teams: ++ - d290f1ee-6c54-4b01-90e6-d701748f0851 ++ created_at: 2026-04-22T00:00:00Z ++ updated_at: 2026-04-22T00:00:00Z + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors +- actions: [connect:tcp, connect:udp] +- resources: [research.mitre.org, cve.mitre.org] ++ actions: ++ - connect:tcp ++ - connect:udp ++ resources: ++ - research.mitre.org ++ - cve.mitre.org + decision: allow + "401": + $ref: "#/components/responses/Unauthenticated" +@@ -308,14 +333,14 @@ + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalError" +- + /orgs/{org_name}/governance/policies/{policy_id}/rules: + parameters: + - $ref: "#/components/parameters/OrgName" + - $ref: "#/components/parameters/PolicyID" + post: + operationId: createRule +- tags: [rules] ++ tags: ++ - rules + summary: Create rule + description: | + Adds a rule to the policy's rule set. All rules in a policy must share +@@ -344,15 +369,22 @@ + summary: Network rule + value: + name: allow research mirrors +- actions: [connect:tcp, connect:udp] +- resources: [research.mitre.org, cve.mitre.org] ++ actions: ++ - connect:tcp ++ - connect:udp ++ resources: ++ - research.mitre.org ++ - cve.mitre.org + decision: allow + filesystem: + summary: Filesystem rule + value: + name: allow data directory +- actions: [read, write] +- resources: [/data] ++ actions: ++ - read ++ - write ++ resources: ++ - /data + decision: allow + responses: + "201": +@@ -367,16 +399,23 @@ + value: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors +- actions: [connect:tcp, connect:udp] +- resources: [research.mitre.org, cve.mitre.org] ++ actions: ++ - connect:tcp ++ - connect:udp ++ resources: ++ - research.mitre.org ++ - cve.mitre.org + decision: allow + filesystem: + summary: Filesystem rule + value: + id: rule_07fwtnr0kn2qetl1b9olfbyz8kob + name: allow data directory +- actions: [read, write] +- resources: [/data] ++ actions: ++ - read ++ - write ++ resources: ++ - /data + decision: allow + "400": + $ref: "#/components/responses/InvalidArgument" +@@ -390,7 +429,6 @@ + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/InternalError" +- + /orgs/{org_name}/governance/policies/{policy_id}/rules/{rule_id}: + parameters: + - $ref: "#/components/parameters/OrgName" +@@ -398,7 +436,8 @@ + - $ref: "#/components/parameters/RuleID" + patch: + operationId: updateRule +- tags: [rules] ++ tags: ++ - rules + summary: Update rule + description: | + Partially updates a rule. Only fields present in the request body are +@@ -418,7 +457,8 @@ + examples: + default: + value: +- resources: ["research.mitre.org"] ++ resources: ++ - research.mitre.org + responses: + "200": + description: Rule updated, returns old and new states. +@@ -432,14 +472,21 @@ + old: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors +- actions: [connect:tcp, connect:udp] +- resources: [research.mitre.org, cve.mitre.org] ++ actions: ++ - connect:tcp ++ - connect:udp ++ resources: ++ - research.mitre.org ++ - cve.mitre.org + decision: allow + new: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors +- actions: [connect:tcp, connect:udp] +- resources: [research.mitre.org] ++ actions: ++ - connect:tcp ++ - connect:udp ++ resources: ++ - research.mitre.org + decision: allow + "400": + $ref: "#/components/responses/InvalidArgument" +@@ -453,10 +500,10 @@ + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/InternalError" +- + delete: + operationId: deleteRule +- tags: [rules] ++ tags: ++ - rules + summary: Delete rule + description: | + Deletes a rule from the policy. Returns the deleted rule. Changes may +@@ -474,8 +521,12 @@ + deleted: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors +- actions: [connect:tcp, connect:udp] +- resources: [research.mitre.org, cve.mitre.org] ++ actions: ++ - connect:tcp ++ - connect:udp ++ resources: ++ - research.mitre.org ++ - cve.mitre.org + decision: allow + "401": + $ref: "#/components/responses/Unauthenticated" +@@ -485,7 +536,6 @@ + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalError" +- + components: + securitySchemes: + bearerAuth: +@@ -498,7 +548,7 @@ + `Authorization: Bearer ` header. Tokens expire after a short + period; request a fresh one when you receive a `401`. + +- The `password` field of the token request accepts any of the following ++ The `secret` field of the token request accepts any of the following + credential types: + + | Type | Format | Notes | +@@ -512,7 +562,6 @@ + + See [Docker Hub authentication](https://docs.docker.com/reference/api/hub/latest/#tag/authentication-api/operation/AuthCreateAccessToken) + for full details. +- + parameters: + OrgName: + name: org_name +@@ -524,7 +573,6 @@ + examples: + default: + value: my-org +- + PolicyID: + name: policy_id + in: path +@@ -535,7 +583,6 @@ + examples: + default: + value: pol_06evsmp24r1pg71cm8500546pkbn +- + RuleID: + name: rule_id + in: path +@@ -546,12 +593,18 @@ + examples: + default: + value: rule_06evsm9qjm1pdsk0a8nkfaxy7jna +- + schemas: + PolicySummary: + type: object + description: Shallow policy representation returned by ListPolicies. Excludes the rule set. +- required: [id, name, org, scope, created_at, updated_at, type] ++ required: ++ - id ++ - name ++ - org ++ - scope ++ - created_at ++ - updated_at ++ - type + properties: + id: + type: string +@@ -561,7 +614,7 @@ + type: string + description: Human-readable label, unique within the organization. + examples: +- - "Security Research — hardened" ++ - Security Research — hardened + org: + type: string + examples: +@@ -572,24 +625,28 @@ + type: string + format: date-time + examples: +- - "2026-04-22T00:00:00Z" ++ - 2026-04-22T00:00:00Z + updated_at: + type: string + format: date-time + examples: +- - "2026-04-22T00:00:00Z" ++ - 2026-04-22T00:00:00Z + type: + type: string +- description: > +- Identifies the rule-set format. Always `allowlist_v0`, corresponding +- to the `allowlist_v0` property on the full Policy object. ++ description: | ++ Identifies the rule-set format. Always `allowlist_v0`, corresponding to the `allowlist_v0` property on the full Policy object. + examples: + - allowlist_v0 +- + Policy: + type: object + description: Full policy representation including the allowlist rule set. +- required: [id, name, org, scope, created_at, updated_at] ++ required: ++ - id ++ - name ++ - org ++ - scope ++ - created_at ++ - updated_at + properties: + id: + type: string +@@ -599,7 +656,7 @@ + type: string + description: Human-readable label, unique within the organization. + examples: +- - "Security Research — hardened" ++ - Security Research — hardened + org: + type: string + examples: +@@ -610,15 +667,14 @@ + type: string + format: date-time + examples: +- - "2026-04-22T00:00:00Z" ++ - 2026-04-22T00:00:00Z + updated_at: + type: string + format: date-time + examples: +- - "2026-04-22T00:00:00Z" ++ - 2026-04-22T00:00:00Z + allowlist_v0: + $ref: "#/components/schemas/AllowlistV0" +- + Scope: + type: object + description: Restricts the policy to specific teams. An empty or absent list means the policy applies org-wide. +@@ -629,8 +685,7 @@ + type: string + description: Team UUIDs the policy applies to. Each must be a valid team in the org. + examples: +- - ["d290f1ee-6c54-4b01-90e6-d701748f0851"] +- ++ - - d290f1ee-6c54-4b01-90e6-d701748f0851 + AllowlistV0: + type: object + description: | +@@ -638,28 +693,31 @@ + Policy when `PolicySummary.type` is `allowlist_v0`; omitted when the + policy has no rules yet. All rules in an allowlist share the same domain. + All rules are evaluated on every request: `deny` always wins over `allow`. +- required: [rules] ++ required: ++ - rules + properties: + domain: + type: string +- description: > +- The access-control domain shared by all rules in this allowlist. +- Derived from rule actions: network actions (`connect:tcp`, +- `connect:udp`) produce `network`; filesystem actions (`read`, +- `write`) produce `filesystem`. Present when `rules` is non-empty; +- absent when the allowlist has no rules. +- enum: [network, filesystem] ++ description: | ++ The access-control domain shared by all rules in this allowlist. Derived from rule actions: network actions (`connect:tcp`, `connect:udp`) produce `network`; filesystem actions (`read`, `write`) produce `filesystem`. Present when `rules` is non-empty; absent when the allowlist has no rules. ++ enum: ++ - network ++ - filesystem + examples: + - network + rules: + type: array + items: + $ref: "#/components/schemas/Rule" +- + Rule: + type: object + description: A single allow or deny rule within an allowlist policy. +- required: [id, name, actions, resources, decision] ++ required: ++ - id ++ - name ++ - actions ++ - resources ++ - decision + properties: + id: + type: string +@@ -676,24 +734,27 @@ + $ref: "#/components/schemas/RuleResources" + decision: + $ref: "#/components/schemas/RuleDecision" +- + CreatePolicyRequest: + type: object + description: Fields required to create a new policy. +- required: [name] ++ required: ++ - name + properties: + name: + type: string + description: Policy name, unique within the organization. + examples: +- - "Security Research — hardened" ++ - Security Research — hardened + scope: + $ref: "#/components/schemas/Scope" +- + CreateRuleRequest: + type: object + description: Fields required to create a new rule within a policy's rule set. +- required: [name, actions, resources, decision] ++ required: ++ - name ++ - actions ++ - resources ++ - decision + properties: + name: + type: string +@@ -706,7 +767,6 @@ + $ref: "#/components/schemas/RuleResources" + decision: + $ref: "#/components/schemas/RuleDecision" +- + UpdateRuleRequest: + type: object + description: Partial update. Only fields present in the body are updated; absent fields are left unchanged. +@@ -722,31 +782,29 @@ + $ref: "#/components/schemas/RuleResources" + decision: + $ref: "#/components/schemas/RuleDecision" +- + UpdateRuleResponse: + type: object + description: The rule state before and after the update. +- required: [old, new] ++ required: ++ - old ++ - new + properties: + old: + $ref: "#/components/schemas/Rule" + new: + $ref: "#/components/schemas/Rule" +- + DeleteRuleResponse: + type: object + description: The deleted rule. +- required: [deleted] ++ required: ++ - deleted + properties: + deleted: + $ref: "#/components/schemas/Rule" +- + UpdatePolicyRequest: + type: object +- description: > +- Partial update of a policy's metadata. Only fields present in the body +- are updated; the rule set is not modified here. At least one field must +- be present. ++ description: | ++ Partial update of a policy's metadata. Only fields present in the body are updated; the rule set is not modified here. At least one field must be present. + properties: + name: + type: string +@@ -756,105 +814,90 @@ + - Security Research + scope: + $ref: "#/components/schemas/ScopePatch" +- + ScopePatch: + type: object +- description: > +- Per-sub-field patch of a policy's scope. An omitted sub-field is left +- unchanged; a present list replaces that dimension, and an empty list +- clears it (making the policy org-wide for that dimension). ++ description: | ++ Per-sub-field patch of a policy's scope. An omitted sub-field is left unchanged; a present list replaces that dimension, and an empty list clears it (making the policy org-wide for that dimension). + properties: + teams: + type: array + items: + type: string + examples: +- - ["d290f1ee-6c54-4b01-90e6-d701748f0851"] +- ++ - - d290f1ee-6c54-4b01-90e6-d701748f0851 + UpdatePolicyResponse: + type: object + description: The full policy before and after the update. +- required: [old, new] ++ required: ++ - old ++ - new + properties: + old: + $ref: "#/components/schemas/Policy" + new: + $ref: "#/components/schemas/Policy" +- + DeletePolicyResponse: + type: object + description: The full deleted policy. +- required: [deleted] ++ required: ++ - deleted + properties: + deleted: + $ref: "#/components/schemas/Policy" +- + RuleActions: + type: array + items: + type: string +- enum: [connect:tcp, connect:udp, read, write] ++ enum: ++ - connect:tcp ++ - connect:udp ++ - read ++ - write + minItems: 1 +- description: > +- Network actions: `connect:tcp`, `connect:udp`. +- Filesystem actions: `read`, `write`. +- All actions in a rule must belong to the same domain; mixing network +- and filesystem actions in one rule is rejected. ++ description: | ++ Network actions: `connect:tcp`, `connect:udp`. Filesystem actions: `read`, `write`. All actions in a rule must belong to the same domain; mixing network and filesystem actions in one rule is rejected. + examples: +- - ["connect:tcp", "connect:udp"] +- ++ - - connect:tcp ++ - connect:udp + RuleResources: + type: array + items: + type: string + minItems: 1 +- description: > +- Network domain: hostnames (for example, `example.com`), wildcard +- subdomains (`*.example.com` or `**.example.com`), hostnames with port +- (for example, `example.com:443`), or CIDRs in IPv4 or IPv6 notation +- (for example, `10.0.0.0/8` or `2001:db8::/32`). Filesystem domain: +- paths (for example, `/data`); `*` matches within one path segment, +- `**` matches recursively (for example, `/data/**`). ++ description: | ++ Network domain: hostnames (for example, `example.com`), wildcard subdomains (`*.example.com` or `**.example.com`), hostnames with port (for example, `example.com:443`), or CIDRs in IPv4 or IPv6 notation (for example, `10.0.0.0/8` or `2001:db8::/32`). Filesystem domain: paths (for example, `/data`); `*` matches within one path segment, `**` matches recursively (for example, `/data/**`). + examples: +- - ["research.mitre.org", "cve.mitre.org"] +- ++ - - research.mitre.org ++ - cve.mitre.org + RuleDecision: + type: string +- enum: [allow, deny] +- description: > +- Outcome applied when this rule matches a request. `deny` always +- wins: if any rule in the policy matches with `decision: deny`, the +- request is denied even if other rules match with `decision: allow`. ++ enum: ++ - allow ++ - deny ++ description: | ++ Outcome applied when this rule matches a request. `deny` always wins: if any rule in the policy matches with `decision: deny`, the request is denied even if other rules match with `decision: allow`. + examples: + - allow +- + Error: + type: object + description: Error envelope returned on all non-2xx responses. +- required: [error] ++ required: ++ - error + properties: + error: + type: object + description: Error detail. +- required: [code, message] ++ required: ++ - code ++ - message + examples: + - code: not_found + message: policy not found + properties: + code: + type: string +- description: > +- Machine-readable error code. `not_found`: the requested resource +- does not exist, the org does not exist, or the caller is not a +- member of the org (the org's existence is not revealed to callers +- who cannot access it). `conflict`: a resource with the same name +- already exists. `invalid_argument`: the request body is malformed +- or fails validation. `unauthenticated`: missing or invalid +- credentials. `permission_denied`: the org is not entitled to use +- governance. `limit_exceeded`: the org has reached its maximum +- number of policies, or the policy has reached its maximum number +- of rules. `unimplemented`: the endpoint or feature is not yet +- available. `internal`: unexpected server error. ++ description: | ++ Machine-readable error code. `not_found`: the requested resource does not exist, the org does not exist, or the caller is not a member of the org (the org's existence is not revealed to callers who cannot access it). `conflict`: a resource with the same name already exists. `invalid_argument`: the request body is malformed or fails validation. `unauthenticated`: missing or invalid credentials. `permission_denied`: the org is not entitled to use governance. `limit_exceeded`: the org has reached its maximum number of policies, or the policy has reached its maximum number of rules. `unimplemented`: the endpoint or feature is not yet available. `internal`: unexpected server error. + enum: + - not_found + - conflict +@@ -866,7 +909,6 @@ + - internal + message: + type: string +- + responses: + NotFound: + description: Not found +@@ -880,7 +922,6 @@ + error: + code: not_found + message: policy not found +- + Conflict: + description: Conflict + content: +@@ -893,7 +934,6 @@ + error: + code: conflict + message: policy name already in use +- + InvalidArgument: + description: Bad request + content: +@@ -905,8 +945,7 @@ + value: + error: + code: invalid_argument +- message: "name is required" +- ++ message: name is required + Unauthenticated: + description: Missing or invalid credentials + content: +@@ -919,11 +958,9 @@ + error: + code: unauthenticated + message: unauthenticated +- + PermissionDenied: +- description: > +- Caller lacks the required permission for this org, or the org is not +- entitled to use governance. ++ description: | ++ Caller lacks the required permission for this org, or the org is not entitled to use governance. + content: + application/json: + schema: +@@ -934,14 +971,9 @@ + error: + code: permission_denied + message: permission denied +- + Forbidden: +- description: > +- Caller lacks the required permission for this org, the org is not +- entitled to use governance (`permission_denied`), or a creation limit +- has been reached (`limit_exceeded`): the org already has the maximum +- number of policies, or the policy already has the maximum number of +- rules. ++ description: | ++ Caller lacks the required permission for this org, the org is not entitled to use governance (`permission_denied`), or a creation limit has been reached (`limit_exceeded`): the org already has the maximum number of policies, or the policy already has the maximum number of rules. + content: + application/json: + schema: +@@ -957,7 +989,6 @@ + error: + code: limit_exceeded + message: organization has reached the maximum of 100 policies +- + InternalError: + description: Internal server error + content: +@@ -970,3 +1001,4 @@ + error: + code: internal + message: internal error ++jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base diff --git a/prototypes/api-docs/migrations/hub.json b/prototypes/api-docs/migrations/hub.json new file mode 100644 index 000000000000..49a9323bf289 --- /dev/null +++ b/prototypes/api-docs/migrations/hub.json @@ -0,0 +1,2950 @@ +{ + "api": "hub", + "source": { + "id": "hub", + "product": "hub", + "title": "Docker Hub", + "source": "content/reference/api/hub/latest.yaml", + "owner": "docker/docs (product authority to confirm)", + "manual": "/manuals/docker-hub/", + "connection": "hosted", + "auth": "Use the documented Hub token exchange. SCIM operations use a separate provisioning token.", + "guides": [ + "/manuals/security/provisioning/scim/provision-scim.md" + ], + "sha256": "aeefa9b62b10d70f9e28e9508d5a4c1361e0a541e209ff0af9ed2544b0cb415e" + }, + "convertedSha256": "66915bfe9d67576c323ad221a0d953bff47d4bc7625722a99515c58e04937517", + "profile": "docker-docs-prototype-1", + "changes": [ + { + "pointer": "/jsonSchemaDialect", + "beforePresent": false, + "afterPresent": true, + "after": "https://spec.openapis.org/oas/3.1/dialect/base", + "id": "hub-03ee85af235e", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/jsonSchemaDialect" + }, + { + "pointer": "/openapi", + "beforePresent": true, + "afterPresent": true, + "before": "3.0.3", + "after": "3.2.0", + "id": "hub-71377657b6ae", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/openapi", + "destinationPointer": "/openapi" + }, + { + "pointer": "/components/schemas/PostUsers2FALoginErrorResponse/properties/detail/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "hub-4a84441cce53", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/PostUsers2FALoginErrorResponse/properties/detail/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PostUsersLoginErrorResponse/properties/detail/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "hub-209f129099a9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/PostUsersLoginErrorResponse/properties/detail/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PostUsersLoginErrorResponse/properties/login_2fa_token/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-74ca1738d170", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/PostUsersLoginErrorResponse/properties/login_2fa_token/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/PostUsersLoginErrorResponse/properties/login_2fa_token/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-14920c5fdaca", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/PostUsersLoginErrorResponse/properties/login_2fa_token/type", + "destinationPointer": "/components/schemas/PostUsersLoginErrorResponse/properties/login_2fa_token/type" + }, + { + "pointer": "/components/schemas/PostUsersLoginSuccessResponse/properties/token/nullable", + "beforePresent": true, + "afterPresent": false, + "before": false, + "id": "hub-f4382a2a3adb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/PostUsersLoginSuccessResponse/properties/token/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/accessToken/properties/last_used/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-419d1bfbeeec", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/accessToken/properties/last_used/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/accessToken/properties/last_used/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-03403114b7b9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/accessToken/properties/last_used/type", + "destinationPointer": "/components/schemas/accessToken/properties/last_used/type" + }, + { + "pointer": "/components/schemas/createOrgAccessTokenRequest/properties/expires_at/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-25ea10e8d019", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/createOrgAccessTokenRequest/properties/expires_at/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/createOrgAccessTokenRequest/properties/expires_at/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-4251302b3c95", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/createOrgAccessTokenRequest/properties/expires_at/type", + "destinationPointer": "/components/schemas/createOrgAccessTokenRequest/properties/expires_at/type" + }, + { + "pointer": "/components/schemas/createOrgAccessTokenResponse/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "a7a5ef25-8889-43a0-8cc7-f2a94268e861" + }, + "label": { + "type": "string", + "example": "My organization token" + }, + "is_active": { + "type": "boolean", + "example": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2022-05-20T00:54:18Z" + }, + "expires_at": { + "type": "string", + "format": "date-time", + "example": "2023-05-20T00:54:18Z", + "nullable": true + }, + "last_used_at": { + "type": "string", + "format": "date-time", + "example": "2022-06-15T12:30:45Z", + "nullable": true + } + } + }, + { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "The actual token value that can be used for authentication", + "example": "dckr_oat_7awgM4jG5SQvxcvmNzhKj8PQjxo" + }, + "resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/orgAccessTokenResource" + } + } + } + } + ], + "after": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "a7a5ef25-8889-43a0-8cc7-f2a94268e861" + }, + "label": { + "type": "string", + "example": "My organization token" + }, + "is_active": { + "type": "boolean", + "example": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2022-05-20T00:54:18Z" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2023-05-20T00:54:18Z" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2022-06-15T12:30:45Z" + } + } + }, + { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "The actual token value that can be used for authentication", + "example": "dckr_oat_7awgM4jG5SQvxcvmNzhKj8PQjxo" + }, + "resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/orgAccessTokenResource" + } + } + } + } + ], + "id": "hub-6c45e809bb08", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/createOrgAccessTokenResponse/allOf", + "destinationPointer": "/components/schemas/createOrgAccessTokenResponse/allOf" + }, + { + "pointer": "/components/schemas/image/properties/digest/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-7b78462e893b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/image/properties/digest/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/image/properties/digest/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-549328d76dcd", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/image/properties/digest/type", + "destinationPointer": "/components/schemas/image/properties/digest/type" + }, + { + "pointer": "/components/schemas/image/properties/last_pulled/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-5499989516b9", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/image/properties/last_pulled/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/image/properties/last_pulled/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-443454d8717b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/image/properties/last_pulled/type", + "destinationPointer": "/components/schemas/image/properties/last_pulled/type" + }, + { + "pointer": "/components/schemas/image/properties/last_pushed/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-d2b5e9cbe250", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/image/properties/last_pushed/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/image/properties/last_pushed/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-f68167523b21", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/image/properties/last_pushed/type", + "destinationPointer": "/components/schemas/image/properties/last_pushed/type" + }, + { + "pointer": "/components/schemas/layer/properties/digest/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-983b2bb794e8", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/layer/properties/digest/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/layer/properties/digest/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-3e1807d3a49e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/layer/properties/digest/type", + "destinationPointer": "/components/schemas/layer/properties/digest/type" + }, + { + "pointer": "/components/schemas/orgAccessToken/properties/expires_at/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-1dd2703f9cc7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/orgAccessToken/properties/expires_at/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/orgAccessToken/properties/expires_at/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-e97055a90965", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/orgAccessToken/properties/expires_at/type", + "destinationPointer": "/components/schemas/orgAccessToken/properties/expires_at/type" + }, + { + "pointer": "/components/schemas/orgAccessToken/properties/last_used_at/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-4770a0e1fc68", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/orgAccessToken/properties/last_used_at/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/orgAccessToken/properties/last_used_at/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-bcb75b8a4856", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/orgAccessToken/properties/last_used_at/type", + "destinationPointer": "/components/schemas/orgAccessToken/properties/last_used_at/type" + }, + { + "pointer": "/components/schemas/page/properties/next/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-5f51929ee3be", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/page/properties/next/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/page/properties/next/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-1c9303e797fd", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/page/properties/next/type", + "destinationPointer": "/components/schemas/page/properties/next/type" + }, + { + "pointer": "/components/schemas/page/properties/previous/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-f55371c00ee8", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/page/properties/previous/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/page/properties/previous/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-aaf9dcecb4e7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/page/properties/previous/type", + "destinationPointer": "/components/schemas/page/properties/previous/type" + }, + { + "pointer": "/components/schemas/repository_info/properties/affiliation/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-db0ca8c6118b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/affiliation/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_info/properties/affiliation/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-53c12223e744", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/affiliation/type", + "destinationPointer": "/components/schemas/repository_info/properties/affiliation/type" + }, + { + "pointer": "/components/schemas/repository_info/properties/full_description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-693d06466546", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/full_description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_info/properties/full_description/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-f2a62661a71f", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/full_description/type", + "destinationPointer": "/components/schemas/repository_info/properties/full_description/type" + }, + { + "pointer": "/components/schemas/repository_info/properties/hub_user/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-586430b24161", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/hub_user/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_info/properties/hub_user/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-8b002c0c2379", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/hub_user/type", + "destinationPointer": "/components/schemas/repository_info/properties/hub_user/type" + }, + { + "pointer": "/components/schemas/repository_info/properties/last_modified/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-51ed4d2375e7", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/last_modified/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_info/properties/last_modified/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-e3991fed6abd", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/last_modified/type", + "destinationPointer": "/components/schemas/repository_info/properties/last_modified/type" + }, + { + "pointer": "/components/schemas/repository_info/properties/media_types/items/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-e5cd63f7e46b", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/media_types/items/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_info/properties/media_types/items/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-d4542159a0cb", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/media_types/items/type", + "destinationPointer": "/components/schemas/repository_info/properties/media_types/items/type" + }, + { + "pointer": "/components/schemas/repository_info/properties/repository_type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-3ed558f36655", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/repository_type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_info/properties/repository_type/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-572974596a5e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/repository_type/type", + "destinationPointer": "/components/schemas/repository_info/properties/repository_type/type" + }, + { + "pointer": "/components/schemas/repository_info/properties/source/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-e33e16e370d0", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/source/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_info/properties/source/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-8e2a47ca4188", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/source/type", + "destinationPointer": "/components/schemas/repository_info/properties/source/type" + }, + { + "pointer": "/components/schemas/repository_info/properties/storage_size/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-a9dd6412fb55", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/storage_size/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_info/properties/storage_size/type", + "beforePresent": true, + "afterPresent": true, + "before": "integer", + "after": [ + "integer", + "null" + ], + "id": "hub-3cb15ac31d13", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_info/properties/storage_size/type", + "destinationPointer": "/components/schemas/repository_info/properties/storage_size/type" + }, + { + "pointer": "/components/schemas/repository_list_entry/properties/description/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-3433b42e6550", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_list_entry/properties/description/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_list_entry/properties/description/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-dda7391614bd", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_list_entry/properties/description/type", + "destinationPointer": "/components/schemas/repository_list_entry/properties/description/type" + }, + { + "pointer": "/components/schemas/repository_list_entry/properties/last_modified/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-bb137761a5e2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_list_entry/properties/last_modified/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_list_entry/properties/last_modified/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-4de50800605e", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_list_entry/properties/last_modified/type", + "destinationPointer": "/components/schemas/repository_list_entry/properties/last_modified/type" + }, + { + "pointer": "/components/schemas/repository_list_entry/properties/last_updated/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-7048a5c0fa51", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_list_entry/properties/last_updated/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_list_entry/properties/last_updated/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-17edbfb92a97", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_list_entry/properties/last_updated/type", + "destinationPointer": "/components/schemas/repository_list_entry/properties/last_updated/type" + }, + { + "pointer": "/components/schemas/repository_list_entry/properties/repository_type/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-d20310dd5ae2", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_list_entry/properties/repository_type/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/repository_list_entry/properties/repository_type/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-f86e7bbc38a4", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/repository_list_entry/properties/repository_type/type", + "destinationPointer": "/components/schemas/repository_list_entry/properties/repository_type/type" + }, + { + "pointer": "/components/schemas/tag/properties/last_updated/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-68b24c8c5109", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/tag/properties/last_updated/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/tag/properties/last_updated/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-a26b67fb6339", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/tag/properties/last_updated/type", + "destinationPointer": "/components/schemas/tag/properties/last_updated/type" + }, + { + "pointer": "/components/schemas/tag/properties/tag_last_pulled/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-cb1f15cd0a83", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/tag/properties/tag_last_pulled/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/tag/properties/tag_last_pulled/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-3709a230a429", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/tag/properties/tag_last_pulled/type", + "destinationPointer": "/components/schemas/tag/properties/tag_last_pulled/type" + }, + { + "pointer": "/components/schemas/tag/properties/tag_last_pushed/nullable", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-689c7a489f31", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/tag/properties/tag_last_pushed/nullable", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/tag/properties/tag_last_pushed/type", + "beforePresent": true, + "afterPresent": true, + "before": "string", + "after": [ + "string", + "null" + ], + "id": "hub-aea53f482c72", + "stage": "oas30-schema-semantics", + "classification": "mechanical conversion", + "rationale": "Translate OpenAPI 3.0 nullable and exclusive bounds into JSON Schema constraints; preserve sibling assertions.", + "evidence": "OpenAPI 3.0 Schema Object and JSON Schema 2020-12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/tag/properties/tag_last_pushed/type", + "destinationPointer": "/components/schemas/tag/properties/tag_last_pushed/type" + }, + { + "pointer": "/paths/~1v2~1access-tokens/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2AccessTokens", + "id": "hub-f8cbd35e78df", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1access-tokens/get/operationId" + }, + { + "pointer": "/paths/~1v2~1access-tokens/post/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "postV2AccessTokens", + "id": "hub-afd4cf26e093", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1access-tokens/post/operationId" + }, + { + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/delete/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "deleteV2AccessTokensByUuid", + "id": "hub-4c342a5a6523", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1access-tokens~1{uuid}/delete/operationId" + }, + { + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2AccessTokensByUuid", + "id": "hub-4fcb33e51e3d", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1access-tokens~1{uuid}/get/operationId" + }, + { + "pointer": "/paths/~1v2~1access-tokens~1{uuid}/patch/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "patchV2AccessTokensByUuid", + "id": "hub-00969ade81fd", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1access-tokens~1{uuid}/patch/operationId" + }, + { + "pointer": "/paths/~1v2~1invites~1bulk/post/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "postV2InvitesBulk", + "id": "hub-d346b6e45684", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1invites~1bulk/post/operationId" + }, + { + "pointer": "/paths/~1v2~1invites~1{id}/delete/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "deleteV2InvitesById", + "id": "hub-c81d9b7f93da", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1invites~1{id}/delete/operationId" + }, + { + "pointer": "/paths/~1v2~1invites~1{id}~1resend/patch/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "patchV2InvitesByIdResend", + "id": "hub-55feefec6ccc", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1invites~1{id}~1resend/patch/operationId" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/head/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "headV2NamespacesByNamespaceRepositoriesByRepositoryTags", + "id": "hub-6ec409f24610", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/head/operationId" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/head/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "headV2NamespacesByNamespaceRepositoriesByRepositoryTagsByTag", + "id": "hub-cd3fa54d0bec", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/head/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2OrgsByNameAccessTokens", + "id": "hub-86bc936786d2", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/get/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/post/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "postV2OrgsByNameAccessTokens", + "id": "hub-36afe9a3a367", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{name}~1access-tokens/post/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{name}~1settings/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2OrgsByNameSettings", + "id": "hub-fd160d644a0d", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{name}~1settings/get/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{name}~1settings/put/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "putV2OrgsByNameSettings", + "id": "hub-30c79dee6ea5", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{name}~1settings/put/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/delete/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "deleteV2OrgsByOrgNameAccessTokensByAccessTokenId", + "id": "hub-28cba8092f0d", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/delete/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2OrgsByOrgNameAccessTokensByAccessTokenId", + "id": "hub-ac00804f74e2", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/get/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/patch/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "patchV2OrgsByOrgNameAccessTokensByAccessTokenId", + "id": "hub-0143389a74a8", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1access-tokens~1{access_token_id}/patch/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2OrgsByOrgNameGroups", + "id": "hub-7aede6605aad", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/post/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "postV2OrgsByOrgNameGroups", + "id": "hub-2c5c68daf41b", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups/post/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/delete/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "deleteV2OrgsByOrgNameGroupsByGroupName", + "id": "hub-421de8c8e3f8", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/delete/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2OrgsByOrgNameGroupsByGroupName", + "id": "hub-9d2c9cff8fea", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "patchV2OrgsByOrgNameGroupsByGroupName", + "id": "hub-1a150e13f5c0", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "putV2OrgsByOrgNameGroupsByGroupName", + "id": "hub-b88a4cb28cdf", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2OrgsByOrgNameGroupsByGroupNameMembers", + "id": "hub-e630bef3c6ed", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/get/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "postV2OrgsByOrgNameGroupsByGroupNameMembers", + "id": "hub-f6571b90ccc1", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members~1{username}/delete/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "deleteV2OrgsByOrgNameGroupsByGroupNameMembersByUsername", + "id": "hub-751cc2434894", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members~1{username}/delete/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1invites/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2OrgsByOrgNameInvites", + "id": "hub-39565bc4387b", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1invites/get/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2OrgsByOrgNameMembers", + "id": "hub-7a816176b210", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1members/get/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1export/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2OrgsByOrgNameMembersExport", + "id": "hub-53f01d4baf21", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1members~1export/get/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/delete/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "deleteV2OrgsByOrgNameMembersByUsername", + "id": "hub-4fe305418a38", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/delete/operationId" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/put/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "putV2OrgsByOrgNameMembersByUsername", + "id": "hub-a33b621b26f7", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/put/operationId" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2Scim20ResourceTypes", + "id": "hub-f6e536e43752", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1scim~12.0~1ResourceTypes/get/operationId" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes~1{name}/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2Scim20ResourceTypesByName", + "id": "hub-5e3a1826a68f", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1scim~12.0~1ResourceTypes~1{name}/get/operationId" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Schemas/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2Scim20Schemas", + "id": "hub-78d7c72f266f", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1scim~12.0~1Schemas/get/operationId" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Schemas~1{id}/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2Scim20SchemasById", + "id": "hub-98da271d89fe", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1scim~12.0~1Schemas~1{id}/get/operationId" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1ServiceProviderConfig/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2Scim20ServiceProviderConfig", + "id": "hub-ad9109142d86", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1scim~12.0~1ServiceProviderConfig/get/operationId" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2Scim20Users", + "id": "hub-1de3a58d007a", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1scim~12.0~1Users/get/operationId" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Users/post/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "postV2Scim20Users", + "id": "hub-5899924999f5", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1scim~12.0~1Users/post/operationId" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/get/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "getV2Scim20UsersById", + "id": "hub-b9e1e6211828", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/get/operationId" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/operationId", + "beforePresent": false, + "afterPresent": true, + "after": "putV2Scim20UsersById", + "id": "hub-f4368513b4a2", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/operationId" + }, + { + "pointer": "/tags", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "changelog", + "x-displayName": "Changelog", + "description": "See the [Changelog](/reference/api/hub/changelog) for a summary of changes across Docker Hub API versions.\n" + }, + { + "name": "resources", + "x-displayName": "Resources", + "description": "The following resources are available to interact with the documented API:\n- [Docker Hub CLI tool](https://github.com/docker/hub-tool#readme) (currently experimental)\n" + }, + { + "name": "rate-limiting", + "x-displayName": "Rate Limiting", + "description": "The Docker Hub API is limited on the amount of requests you can perform per minute against it.\n\nIf you haven't hit the limit, each request to the API will return the following headers in the response.\n\n- `X-RateLimit-Limit` - The limit of requests per minute.\n- `X-RateLimit-Remaining` - The remaining amount of calls within the limit period.\n- `X-RateLimit-Reset` - The unix timestamp of when the remaining resets.\n\nIf you have hit the limit, you will receive a response status of `429` and the `Retry-After` header in the response.\n\nThe [`Retry-After` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Retry-After) specifies the number of seconds to wait until you can call the API again.\n\n**Note**: These rate limits are separate from anti-abuse and Docker Hub download, or pull rate limiting.\nTo learn more about Docker Hub pull rate limiting, see [Usage and limits](https://docs.docker.com/docker-hub/usage/).\n" + }, + { + "name": "authentication", + "x-displayName": "Authentication", + "description": "Most Docker Hub API endpoints require you to authenticate using your Docker credentials before using them.\n\nAdditionally, similar to the Docker Hub UI features, API endpoint responses may vary depending on your subscription (Personal, Pro, or Team) and your account's permissions.\n\nTo learn more about the features available in each subscription and to upgrade your existing subscription, see [Docker Pricing](https://www.docker.com/pricing?ref=Docs&refAction=DocsApiHub).\n\n# Types\n\nThe Docker Hub API supports the following authentication types.\n\nYou must use each authentication type with the [Create access token](#tag/authentication-api/operation/AuthCreateAccessToken) route to obtain a bearer token.\n\n## Password\nUsing a username and password is the most powerful, yet least secure way \nto authenticate with Docker as a user. It allows access to resources \nfor the user without scopes. \n\n_In general, it is recommended to use a personal access token (PAT) instead._\n\n_**The password authentication type is not available if your organization has SSO enforced.**_\n\n## Personal Access Token (PAT)\nUsing a username and PAT is the most secure way to authenticate with \nDocker as a user. PATs are scoped to specific resources and scopes.\n\nCurrently, a PAT is a more secure password due to limited functionality. \nIn the future, we may add fine-grained access like organization \naccess tokens for enhanced usage and security.\n\n## Organization Access Token (OAT)\nOrganization access tokens are scoped to specific resources and scopes \nin an organization. They are managed by organization owners. \n\nThese tokens are meant for automation and are not meant to be used by \nusers.\n\n# Labels\n\nThese labels will show up on routes in this reference that allow for use of bearer \ntokens issued from them.\n\n\n\n" + }, + { + "name": "authentication-api", + "x-displayName": "Authentication", + "description": "The authentication endpoints allow you to authenticate with Docker Hub APIs.\n\nFor more information, see [Authentication](#tag/authentication).\n" + }, + { + "name": "access-tokens", + "x-displayName": "Personal Access Tokens", + "description": "The Personal Access Token endpoints lets you manage personal access tokens. For more information, see [Access Tokens](https://docs.docker.com/security/access-tokens/personal-access-tokens/).\n\nYou can use a personal access token instead of a password in the [Docker CLI](https://docs.docker.com/engine/reference/commandline/cli/) or in the [Create an authentication token](#operation/PostUsersLogin) route to obtain a bearer token.\n\n### Scopes\n\nFor each scope grouping (in this case \"repo\"), you only need to define 1 scope as any lower scopes are assumed.\nFor example: If you define `repo:write`, the API assumes the scope of both `repo:read` *and* `repo:public_read` as well.\nIf you were to define both `repo:write` *and* `repo:read`, then `repo:read` is assumed by `repo:write` and ignored.\n\n***Treat your personal access token like your password and keep it secret. You cannot retrieve your token after it is generated.***\n" + }, + { + "name": "audit-logs", + "x-displayName": "Audit Logs", + "description": "The Audit Logs API endpoints allow you to query audit log events across a namespace.\n\nFor more information, see [Audit Logs](https://docs.docker.com/admin/activity-logs/).\n" + }, + { + "name": "org-settings", + "x-displayName": "Org Settings", + "description": "The Org Settings API endpoints allow you to manage your organization's settings.\n" + }, + { + "name": "repositories", + "x-displayName": "Repositories", + "description": "The repository endpoints allow you to access your repository's tags.\n" + }, + { + "name": "orgs", + "x-displayName": "Organizations", + "x-audience": "public", + "description": "The organization endpoints allow you to interact with and manage your organizations.\n\nFor more information, see [Organization administration overview](https://docs.docker.com/admin/organization/).\n" + }, + { + "name": "groups", + "x-displayName": "Groups (Teams)", + "x-audience": "public", + "description": "The groups endpoints allow you to manage your organization's teams and their members.\n\nFor more information, see [Create and manage a team](https://docs.docker.com/admin/organization/manage/manage-a-team/).\n" + }, + { + "name": "invites", + "x-displayName": "Invites", + "x-audience": "public", + "description": "The invites endpoints allow you to manage invites for users to join your Docker organization.\n\nFor more information, see [Invite members](https://docs.docker.com/admin/organization/manage/members/#invite-members).\n" + }, + { + "name": "scim", + "x-displayName": "SCIM", + "x-audience": "public", + "description": "SCIM is a provisioning system that lets you manage users within your identity provider (IdP).\n\nFor more information, see [System for Cross-domain Identity management](https://docs.docker.com/security/for-admins/provisioning/scim/).\n" + }, + { + "name": "org-access-tokens", + "x-displayName": "Organization Access Tokens", + "x-audience": "public", + "description": "The organization access token endpoints allow you to manage organization access tokens (OATs). See [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information.\n\nOATs only authenticate requests to the modern namespace-scoped routes under `/v2/namespaces/{namespace}/repositories/`. Legacy repository paths are OAT unsupported, regardless of the token's scopes, and reject every OAT with `403 token issued from organization access token is not allowed`:\n\n- `GET /v2/repositories/{namespace}/{repository}` — use [Get repository](#tag/repositories/operation/GetRepository) instead.\n- `GET /v2/repositories/{namespace}` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead.\n- `GET /v2/users/{username}/repositories` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead.\n" + } + ], + "after": [ + { + "name": "changelog", + "description": "See the [Changelog](/reference/api/hub/changelog) for a summary of changes across Docker Hub API versions.\n", + "summary": "Changelog", + "kind": "info" + }, + { + "name": "resources", + "description": "The following resources are available to interact with the documented API:\n- [Docker Hub CLI tool](https://github.com/docker/hub-tool#readme) (currently experimental)\n", + "summary": "Resources", + "kind": "info" + }, + { + "name": "rate-limiting", + "description": "The Docker Hub API is limited on the amount of requests you can perform per minute against it.\n\nIf you haven't hit the limit, each request to the API will return the following headers in the response.\n\n- `X-RateLimit-Limit` - The limit of requests per minute.\n- `X-RateLimit-Remaining` - The remaining amount of calls within the limit period.\n- `X-RateLimit-Reset` - The unix timestamp of when the remaining resets.\n\nIf you have hit the limit, you will receive a response status of `429` and the `Retry-After` header in the response.\n\nThe [`Retry-After` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Retry-After) specifies the number of seconds to wait until you can call the API again.\n\n**Note**: These rate limits are separate from anti-abuse and Docker Hub download, or pull rate limiting.\nTo learn more about Docker Hub pull rate limiting, see [Usage and limits](https://docs.docker.com/docker-hub/usage/).\n", + "summary": "Rate Limiting", + "kind": "info" + }, + { + "name": "authentication", + "description": "Most Docker Hub API endpoints require you to authenticate using your Docker credentials before using them.\n\nAdditionally, similar to the Docker Hub UI features, API endpoint responses may vary depending on your subscription (Personal, Pro, or Team) and your account's permissions.\n\nTo learn more about the features available in each subscription and to upgrade your existing subscription, see [Docker Pricing](https://www.docker.com/pricing?ref=Docs&refAction=DocsApiHub).\n\n# Types\n\nThe Docker Hub API supports the following authentication types.\n\nYou must use each authentication type with the [Create access token](#tag/authentication-api/operation/AuthCreateAccessToken) route to obtain a bearer token.\n\n## Password\nUsing a username and password is the most powerful, yet least secure way \nto authenticate with Docker as a user. It allows access to resources \nfor the user without scopes. \n\n_In general, it is recommended to use a personal access token (PAT) instead._\n\n_**The password authentication type is not available if your organization has SSO enforced.**_\n\n## Personal Access Token (PAT)\nUsing a username and PAT is the most secure way to authenticate with \nDocker as a user. PATs are scoped to specific resources and scopes.\n\nCurrently, a PAT is a more secure password due to limited functionality. \nIn the future, we may add fine-grained access like organization \naccess tokens for enhanced usage and security.\n\n## Organization Access Token (OAT)\nOrganization access tokens are scoped to specific resources and scopes \nin an organization. They are managed by organization owners. \n\nThese tokens are meant for automation and are not meant to be used by \nusers.\n\n# Labels\n\nThese labels will show up on routes in this reference that allow for use of bearer \ntokens issued from them.\n\n\n\n", + "summary": "Authentication", + "kind": "info" + }, + { + "name": "authentication-api", + "description": "The authentication endpoints allow you to authenticate with Docker Hub APIs.\n\nFor more information, see [Authentication](#tag/authentication).\n", + "summary": "Authentication", + "kind": "nav" + }, + { + "name": "access-tokens", + "description": "The Personal Access Token endpoints lets you manage personal access tokens. For more information, see [Access Tokens](https://docs.docker.com/security/access-tokens/personal-access-tokens/).\n\nYou can use a personal access token instead of a password in the [Docker CLI](https://docs.docker.com/engine/reference/commandline/cli/) or in the [Create an authentication token](#operation/PostUsersLogin) route to obtain a bearer token.\n\n### Scopes\n\nFor each scope grouping (in this case \"repo\"), you only need to define 1 scope as any lower scopes are assumed.\nFor example: If you define `repo:write`, the API assumes the scope of both `repo:read` *and* `repo:public_read` as well.\nIf you were to define both `repo:write` *and* `repo:read`, then `repo:read` is assumed by `repo:write` and ignored.\n\n***Treat your personal access token like your password and keep it secret. You cannot retrieve your token after it is generated.***\n", + "summary": "Personal Access Tokens", + "kind": "nav" + }, + { + "name": "audit-logs", + "description": "The Audit Logs API endpoints allow you to query audit log events across a namespace.\n\nFor more information, see [Audit Logs](https://docs.docker.com/admin/activity-logs/).\n", + "summary": "Audit Logs", + "kind": "nav" + }, + { + "name": "org-settings", + "description": "The Org Settings API endpoints allow you to manage your organization's settings.\n", + "summary": "Org Settings", + "kind": "nav" + }, + { + "name": "repositories", + "description": "The repository endpoints allow you to access your repository's tags.\n", + "summary": "Repositories", + "kind": "nav" + }, + { + "name": "orgs", + "x-audience": "public", + "description": "The organization endpoints allow you to interact with and manage your organizations.\n\nFor more information, see [Organization administration overview](https://docs.docker.com/admin/organization/).\n", + "summary": "Organizations", + "kind": "nav" + }, + { + "name": "groups", + "x-audience": "public", + "description": "The groups endpoints allow you to manage your organization's teams and their members.\n\nFor more information, see [Create and manage a team](https://docs.docker.com/admin/organization/manage/manage-a-team/).\n", + "summary": "Groups (Teams)", + "kind": "nav" + }, + { + "name": "invites", + "x-audience": "public", + "description": "The invites endpoints allow you to manage invites for users to join your Docker organization.\n\nFor more information, see [Invite members](https://docs.docker.com/admin/organization/manage/members/#invite-members).\n", + "summary": "Invites", + "kind": "nav" + }, + { + "name": "scim", + "x-audience": "public", + "description": "SCIM is a provisioning system that lets you manage users within your identity provider (IdP).\n\nFor more information, see [System for Cross-domain Identity management](https://docs.docker.com/security/for-admins/provisioning/scim/).\n", + "summary": "SCIM", + "kind": "nav" + }, + { + "name": "org-access-tokens", + "x-audience": "public", + "description": "The organization access token endpoints allow you to manage organization access tokens (OATs). See [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information.\n\nOATs only authenticate requests to the modern namespace-scoped routes under `/v2/namespaces/{namespace}/repositories/`. Legacy repository paths are OAT unsupported, regardless of the token's scopes, and reject every OAT with `403 token issued from organization access token is not allowed`:\n\n- `GET /v2/repositories/{namespace}/{repository}` — use [Get repository](#tag/repositories/operation/GetRepository) instead.\n- `GET /v2/repositories/{namespace}` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead.\n- `GET /v2/users/{username}/repositories` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead.\n", + "summary": "Organization Access Tokens", + "kind": "nav" + } + ], + "id": "hub-8d93cf25f3e7", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/tags", + "destinationPointer": "/tags" + }, + { + "pointer": "/components/schemas/createOrgAccessTokenRequest/properties/label/required", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-56f5267c831d", + "stage": "property-required-correction", + "classification": "evidence-backed correction", + "rationale": "Move misplaced boolean property required flags to the parent required array; preserve the declared requiredness.", + "evidence": "Original property-level required: true declarations", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/createOrgAccessTokenRequest/properties/label/required", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/createOrgAccessTokenRequest/required", + "beforePresent": false, + "afterPresent": true, + "after": [ + "label" + ], + "id": "hub-8f8f2dc78a3c", + "stage": "property-required-correction", + "classification": "evidence-backed correction", + "rationale": "Move misplaced boolean property required flags to the parent required array; preserve the declared requiredness.", + "evidence": "Original property-level required: true declarations", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/components/schemas/createOrgAccessTokenRequest/required" + }, + { + "pointer": "/components/schemas/orgAccessTokenResource/properties/path/required", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-ef566a3ef04a", + "stage": "property-required-correction", + "classification": "evidence-backed correction", + "rationale": "Move misplaced boolean property required flags to the parent required array; preserve the declared requiredness.", + "evidence": "Original property-level required: true declarations", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/orgAccessTokenResource/properties/path/required", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/orgAccessTokenResource/properties/scopes/required", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-bc0d5d30d7e9", + "stage": "property-required-correction", + "classification": "evidence-backed correction", + "rationale": "Move misplaced boolean property required flags to the parent required array; preserve the declared requiredness.", + "evidence": "Original property-level required: true declarations", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/orgAccessTokenResource/properties/scopes/required", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/orgAccessTokenResource/properties/type/required", + "beforePresent": true, + "afterPresent": false, + "before": true, + "id": "hub-ea46f67c99f8", + "stage": "property-required-correction", + "classification": "evidence-backed correction", + "rationale": "Move misplaced boolean property required flags to the parent required array; preserve the declared requiredness.", + "evidence": "Original property-level required: true declarations", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/orgAccessTokenResource/properties/type/required", + "destinationPointer": null + }, + { + "pointer": "/components/schemas/orgAccessTokenResource/required", + "beforePresent": false, + "afterPresent": true, + "after": [ + "type", + "path", + "scopes" + ], + "id": "hub-60b71cffddb5", + "stage": "property-required-correction", + "classification": "evidence-backed correction", + "rationale": "Move misplaced boolean property required flags to the parent required array; preserve the declared requiredness.", + "evidence": "Original property-level required: true declarations", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/components/schemas/orgAccessTokenResource/required" + }, + { + "pointer": "/paths/~1v2~1auditlogs~1{account}/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "List audit log events for a given namespace.\n\n\n", + "after": "List audit log events for a given namespace.\n\n\n", + "id": "hub-cf10c2a6bb54", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1auditlogs~1{account}/get/description", + "destinationPointer": "/paths/~1v2~1auditlogs~1{account}/get/description" + }, + { + "pointer": "/paths/~1v2~1auditlogs~1{account}~1actions/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "List audit log actions for a namespace to be used as a filter for querying audit log events.\n\n\n", + "after": "List audit log actions for a namespace to be used as a filter for querying audit log events.\n\n\n", + "id": "hub-37ef6ed3805f", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1auditlogs~1{account}~1actions/get/description", + "destinationPointer": "/paths/~1v2~1auditlogs~1{account}~1actions/get/description" + }, + { + "pointer": "/paths/~1v2~1invites~1bulk/post/description", + "beforePresent": true, + "afterPresent": true, + "before": "Create multiple invites by emails or DockerIDs. Only a team owner can create invites.\n\n\n", + "after": "Create multiple invites by emails or DockerIDs. Only a team owner can create invites.\n\n\n", + "id": "hub-71965f574da9", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1invites~1bulk/post/description", + "destinationPointer": "/paths/~1v2~1invites~1bulk/post/description" + }, + { + "pointer": "/paths/~1v2~1invites~1{id}/delete/description", + "beforePresent": true, + "afterPresent": true, + "before": "Mark the invite as cancelled so it doesn't show up on the list of pending invites\n\n\n", + "after": "Mark the invite as cancelled so it doesn't show up on the list of pending invites\n\n\n", + "id": "hub-711cffa504e9", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1invites~1{id}/delete/description", + "destinationPointer": "/paths/~1v2~1invites~1{id}/delete/description" + }, + { + "pointer": "/paths/~1v2~1invites~1{id}~1resend/patch/description", + "beforePresent": true, + "afterPresent": true, + "before": "Resend a pending invite to the user, any org owner can resend an invite\n\n\n", + "after": "Resend a pending invite to the user, any org owner can resend an invite\n\n\n", + "id": "hub-d7aacf942e38", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1invites~1{id}~1resend/patch/description", + "destinationPointer": "/paths/~1v2~1invites~1{id}~1resend/patch/description" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "Returns a list of repositories within the specified namespace (organization or user).\n\nPublic repositories are accessible to everyone, while private repositories require appropriate authentication and permissions.\n\n\n\n**OAT listing behavior**: an OAT with the `scope-repository-list` scope sees all repositories including private ones. An OAT without that scope only sees public repositories. This filtering is silent: the response is a normal `200` with no indication that private repositories were withheld.\n", + "after": "Returns a list of repositories within the specified namespace (organization or user).\n\nPublic repositories are accessible to everyone, while private repositories require appropriate authentication and permissions.\n\n\n\n**OAT listing behavior**: an OAT with the `scope-repository-list` scope sees all repositories including private ones. An OAT without that scope only sees public repositories. This filtering is silent: the response is a normal `200` with no indication that private repositories were withheld.\n", + "id": "hub-8bce03fbb9e7", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/get/description", + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/get/description" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/post/description", + "beforePresent": true, + "afterPresent": true, + "before": "Creates a new repository within the specified namespace. The repository will be created\nwith the provided metadata including name, description, and privacy settings.\n\n\n", + "after": "Creates a new repository within the specified namespace. The repository will be created\nwith the provided metadata including name, description, and privacy settings.\n\n\n", + "id": "hub-df5fa500573c", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/post/description", + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories/post/description" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "Returns a repository within the specified namespace (organization or user).\n\nPublic repositories are accessible to everyone, while private repositories require appropriate authentication and permissions.\n\n\n", + "after": "Returns a repository within the specified namespace (organization or user).\n\nPublic repositories are accessible to everyone, while private repositories require appropriate authentication and permissions.\n\n\n", + "id": "hub-c814561d26d7", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/get/description", + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/get/description" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/head/description", + "beforePresent": true, + "afterPresent": true, + "before": "Check a repository within the specified namespace (organization or user).\n\nPublic repositories are accessible to everyone, while private repositories require appropriate authentication and permissions.\n\n\n", + "after": "Check a repository within the specified namespace (organization or user).\n\nPublic repositories are accessible to everyone, while private repositories require appropriate authentication and permissions.\n\n\n", + "id": "hub-758e684d0c26", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/head/description", + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/head/description" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags/patch/description", + "beforePresent": true, + "afterPresent": true, + "before": "Updates the immutable tags configuration for this repository.\n\n**Only users with administrative privileges for the repository can modify these settings.**\n\n\n", + "after": "Updates the immutable tags configuration for this repository.\n\n**Only users with administrative privileges for the repository can modify these settings.**\n\n\n", + "id": "hub-4b6236e32079", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags/patch/description", + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags/patch/description" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags~1verify/post/description", + "beforePresent": true, + "afterPresent": true, + "before": "Validates the immutable tags regex passed in the request body and returns a list of tags matching it in this repository.\n\n**Only users with administrative privileges for the repository can call this endpoint.**\n\n\n", + "after": "Validates the immutable tags regex passed in the request body and returns a list of tags matching it in this repository.\n\n**Only users with administrative privileges for the repository can call this endpoint.**\n\n\n", + "id": "hub-cddc6551a6fe", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags~1verify/post/description", + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1immutabletags~1verify/post/description" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "Returns the list of tags for the specified repository.\n\n\n", + "after": "Returns the list of tags for the specified repository.\n\n\n", + "id": "hub-7c829bae5c5b", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/get/description", + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/get/description" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/head/description", + "beforePresent": true, + "afterPresent": true, + "before": "Checks whether the repository has any tags.\n\n\n", + "after": "Checks whether the repository has any tags.\n\n\n", + "id": "hub-ae31a1fd6c15", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/head/description", + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags/head/description" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "Returns details for a specific tag in the specified repository.\n\n\n", + "after": "Returns details for a specific tag in the specified repository.\n\n\n", + "id": "hub-1711bdf8c01b", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/get/description", + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/get/description" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/head/description", + "beforePresent": true, + "afterPresent": true, + "before": "Checks whether the specified tag exists in the repository.\n\n\n", + "after": "Checks whether the specified tag exists in the repository.\n\n\n", + "id": "hub-ca9f4292d078", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/head/description", + "destinationPointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}~1tags~1{tag}/head/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "\n", + "id": "hub-19258b60eb71", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/post/description", + "beforePresent": true, + "afterPresent": true, + "before": "Create a new group within an organization.\n\n\n", + "after": "Create a new group within an organization.\n\n\n", + "id": "hub-491d43e3b974", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups/post/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups/post/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/delete/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "\n", + "id": "hub-483cbb8b69e9", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/delete/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/delete/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "\n", + "id": "hub-9f8a2c14c2e4", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "\n", + "id": "hub-5d12989466a8", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "\n", + "id": "hub-88797cb50eee", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "List the members (users) that are in a group.\nIf user is owner of the org or has otherwise elevated permissions, they can search by email and the result will also contain emails.\n\n\n", + "after": "List the members (users) that are in a group.\nIf user is owner of the org or has otherwise elevated permissions, they can search by email and the result will also contain emails.\n\n\n", + "id": "hub-a969dea6c391", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/get/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/get/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "\n", + "id": "hub-2392b3255468", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members~1{username}/delete/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "\n", + "id": "hub-fb34d26a19a7", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members~1{username}/delete/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members~1{username}/delete/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1invites/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "Return all pending invites for a given org, only team owners can call this endpoint\n\n\n", + "after": "Return all pending invites for a given org, only team owners can call this endpoint\n\n\n", + "id": "hub-9e69ed836422", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1invites/get/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1invites/get/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "Returns a list of members for an organization.\n\n_The following fields are only visible to orgs with insights enabled._\n\n- `last_logged_in_at`\n- `last_seen_at`\n- `last_desktop_version`\n\nTo make visible, please see [View Insights for organization users](https://docs.docker.com/admin/insights/#view-insights-for-organization-users).\n\n\n", + "after": "Returns a list of members for an organization.\n\n_The following fields are only visible to orgs with insights enabled._\n\n- `last_logged_in_at`\n- `last_seen_at`\n- `last_desktop_version`\n\nTo make visible, please see [View Insights for organization users](https://docs.docker.com/admin/insights/#view-insights-for-organization-users).\n\n\n", + "id": "hub-a8f046f807cc", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1members/get/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1members/get/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1export/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "Export members of an organization as a CSV\n\n\n", + "after": "Export members of an organization as a CSV\n\n\n", + "id": "hub-ef7a52226e0d", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1members~1export/get/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1members~1export/get/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/delete/description", + "beforePresent": true, + "afterPresent": true, + "before": "Removes the member from the org, ie. all groups in the org, unless they're the last owner\n\n\n", + "after": "Removes the member from the org, ie. all groups in the org, unless they're the last owner\n\n\n", + "id": "hub-a63ee0d1e822", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/delete/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/delete/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/put/description", + "beforePresent": true, + "afterPresent": true, + "before": "Updates the role of a member in the organization.\n***Only users in the \"owners\" group of the organization can use this endpoint.***\n\n\n", + "after": "Updates the role of a member in the organization.\n***Only users in the \"owners\" group of the organization can use this endpoint.***\n\n\n", + "id": "hub-08bc49612a6e", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/put/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1members~1{username}/put/description" + }, + { + "pointer": "/paths/~1v2~1repositories~1{namespace}~1{repository}~1groups/post/description", + "beforePresent": true, + "afterPresent": true, + "before": "Assigns an organization group (team) to a repository with a specified permission level.\n\n\n", + "after": "Assigns an organization group (team) to a repository with a specified permission level.\n\n\n", + "id": "hub-078a1d5f4794", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1repositories~1{namespace}~1{repository}~1groups/post/description", + "destinationPointer": "/paths/~1v2~1repositories~1{namespace}~1{repository}~1groups/post/description" + }, + { + "pointer": "/paths/~1v2~1users~1login/post/description", + "beforePresent": true, + "afterPresent": true, + "before": "Creates and returns a bearer token in JWT format that you can use to authenticate with Docker Hub APIs.\n\nThe returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`.\n\n_**As of September 16, 2024, this route requires a personal access token (PAT) instead of a password if your organization has SSO enforced.**_\n\n
\n", + "after": "Creates and returns a bearer token in JWT format that you can use to authenticate with Docker Hub APIs.\n\nThe returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`.\n\n_**As of September 16, 2024, this route requires a personal access token (PAT) instead of a password if your organization has SSO enforced.**_\n\n\n Deprecated: Use [Create access token](#tag/authentication-api/operation/AuthCreateAccessToken) instead.\n\n", + "id": "hub-d071d281f6bc", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1users~1login/post/description", + "destinationPointer": "/paths/~1v2~1users~1login/post/description" + }, + { + "pointer": "/tags", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "changelog", + "description": "See the [Changelog](/reference/api/hub/changelog) for a summary of changes across Docker Hub API versions.\n", + "summary": "Changelog", + "kind": "info" + }, + { + "name": "resources", + "description": "The following resources are available to interact with the documented API:\n- [Docker Hub CLI tool](https://github.com/docker/hub-tool#readme) (currently experimental)\n", + "summary": "Resources", + "kind": "info" + }, + { + "name": "rate-limiting", + "description": "The Docker Hub API is limited on the amount of requests you can perform per minute against it.\n\nIf you haven't hit the limit, each request to the API will return the following headers in the response.\n\n- `X-RateLimit-Limit` - The limit of requests per minute.\n- `X-RateLimit-Remaining` - The remaining amount of calls within the limit period.\n- `X-RateLimit-Reset` - The unix timestamp of when the remaining resets.\n\nIf you have hit the limit, you will receive a response status of `429` and the `Retry-After` header in the response.\n\nThe [`Retry-After` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Retry-After) specifies the number of seconds to wait until you can call the API again.\n\n**Note**: These rate limits are separate from anti-abuse and Docker Hub download, or pull rate limiting.\nTo learn more about Docker Hub pull rate limiting, see [Usage and limits](https://docs.docker.com/docker-hub/usage/).\n", + "summary": "Rate Limiting", + "kind": "info" + }, + { + "name": "authentication", + "description": "Most Docker Hub API endpoints require you to authenticate using your Docker credentials before using them.\n\nAdditionally, similar to the Docker Hub UI features, API endpoint responses may vary depending on your subscription (Personal, Pro, or Team) and your account's permissions.\n\nTo learn more about the features available in each subscription and to upgrade your existing subscription, see [Docker Pricing](https://www.docker.com/pricing?ref=Docs&refAction=DocsApiHub).\n\n# Types\n\nThe Docker Hub API supports the following authentication types.\n\nYou must use each authentication type with the [Create access token](#tag/authentication-api/operation/AuthCreateAccessToken) route to obtain a bearer token.\n\n## Password\nUsing a username and password is the most powerful, yet least secure way \nto authenticate with Docker as a user. It allows access to resources \nfor the user without scopes. \n\n_In general, it is recommended to use a personal access token (PAT) instead._\n\n_**The password authentication type is not available if your organization has SSO enforced.**_\n\n## Personal Access Token (PAT)\nUsing a username and PAT is the most secure way to authenticate with \nDocker as a user. PATs are scoped to specific resources and scopes.\n\nCurrently, a PAT is a more secure password due to limited functionality. \nIn the future, we may add fine-grained access like organization \naccess tokens for enhanced usage and security.\n\n## Organization Access Token (OAT)\nOrganization access tokens are scoped to specific resources and scopes \nin an organization. They are managed by organization owners. \n\nThese tokens are meant for automation and are not meant to be used by \nusers.\n\n# Labels\n\nThese labels will show up on routes in this reference that allow for use of bearer \ntokens issued from them.\n\n\n\n", + "summary": "Authentication", + "kind": "info" + }, + { + "name": "authentication-api", + "description": "The authentication endpoints allow you to authenticate with Docker Hub APIs.\n\nFor more information, see [Authentication](#tag/authentication).\n", + "summary": "Authentication", + "kind": "nav" + }, + { + "name": "access-tokens", + "description": "The Personal Access Token endpoints lets you manage personal access tokens. For more information, see [Access Tokens](https://docs.docker.com/security/access-tokens/personal-access-tokens/).\n\nYou can use a personal access token instead of a password in the [Docker CLI](https://docs.docker.com/engine/reference/commandline/cli/) or in the [Create an authentication token](#operation/PostUsersLogin) route to obtain a bearer token.\n\n### Scopes\n\nFor each scope grouping (in this case \"repo\"), you only need to define 1 scope as any lower scopes are assumed.\nFor example: If you define `repo:write`, the API assumes the scope of both `repo:read` *and* `repo:public_read` as well.\nIf you were to define both `repo:write` *and* `repo:read`, then `repo:read` is assumed by `repo:write` and ignored.\n\n***Treat your personal access token like your password and keep it secret. You cannot retrieve your token after it is generated.***\n", + "summary": "Personal Access Tokens", + "kind": "nav" + }, + { + "name": "audit-logs", + "description": "The Audit Logs API endpoints allow you to query audit log events across a namespace.\n\nFor more information, see [Audit Logs](https://docs.docker.com/admin/activity-logs/).\n", + "summary": "Audit Logs", + "kind": "nav" + }, + { + "name": "org-settings", + "description": "The Org Settings API endpoints allow you to manage your organization's settings.\n", + "summary": "Org Settings", + "kind": "nav" + }, + { + "name": "repositories", + "description": "The repository endpoints allow you to access your repository's tags.\n", + "summary": "Repositories", + "kind": "nav" + }, + { + "name": "orgs", + "x-audience": "public", + "description": "The organization endpoints allow you to interact with and manage your organizations.\n\nFor more information, see [Organization administration overview](https://docs.docker.com/admin/organization/).\n", + "summary": "Organizations", + "kind": "nav" + }, + { + "name": "groups", + "x-audience": "public", + "description": "The groups endpoints allow you to manage your organization's teams and their members.\n\nFor more information, see [Create and manage a team](https://docs.docker.com/admin/organization/manage/manage-a-team/).\n", + "summary": "Groups (Teams)", + "kind": "nav" + }, + { + "name": "invites", + "x-audience": "public", + "description": "The invites endpoints allow you to manage invites for users to join your Docker organization.\n\nFor more information, see [Invite members](https://docs.docker.com/admin/organization/manage/members/#invite-members).\n", + "summary": "Invites", + "kind": "nav" + }, + { + "name": "scim", + "x-audience": "public", + "description": "SCIM is a provisioning system that lets you manage users within your identity provider (IdP).\n\nFor more information, see [System for Cross-domain Identity management](https://docs.docker.com/security/for-admins/provisioning/scim/).\n", + "summary": "SCIM", + "kind": "nav" + }, + { + "name": "org-access-tokens", + "x-audience": "public", + "description": "The organization access token endpoints allow you to manage organization access tokens (OATs). See [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information.\n\nOATs only authenticate requests to the modern namespace-scoped routes under `/v2/namespaces/{namespace}/repositories/`. Legacy repository paths are OAT unsupported, regardless of the token's scopes, and reject every OAT with `403 token issued from organization access token is not allowed`:\n\n- `GET /v2/repositories/{namespace}/{repository}` — use [Get repository](#tag/repositories/operation/GetRepository) instead.\n- `GET /v2/repositories/{namespace}` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead.\n- `GET /v2/users/{username}/repositories` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead.\n", + "summary": "Organization Access Tokens", + "kind": "nav" + } + ], + "after": [ + { + "name": "changelog", + "description": "See the [Changelog](/reference/api/hub/changelog) for a summary of changes across Docker Hub API versions.\n", + "summary": "Changelog", + "kind": "info" + }, + { + "name": "resources", + "description": "The following resources are available to interact with the documented API:\n- [Docker Hub CLI tool](https://github.com/docker/hub-tool#readme) (currently experimental)\n", + "summary": "Resources", + "kind": "info" + }, + { + "name": "rate-limiting", + "description": "The Docker Hub API is limited on the amount of requests you can perform per minute against it.\n\nIf you haven't hit the limit, each request to the API will return the following headers in the response.\n\n- `X-RateLimit-Limit` - The limit of requests per minute.\n- `X-RateLimit-Remaining` - The remaining amount of calls within the limit period.\n- `X-RateLimit-Reset` - The unix timestamp of when the remaining resets.\n\nIf you have hit the limit, you will receive a response status of `429` and the `Retry-After` header in the response.\n\nThe [`Retry-After` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Retry-After) specifies the number of seconds to wait until you can call the API again.\n\n**Note**: These rate limits are separate from anti-abuse and Docker Hub download, or pull rate limiting.\nTo learn more about Docker Hub pull rate limiting, see [Usage and limits](https://docs.docker.com/docker-hub/usage/).\n", + "summary": "Rate Limiting", + "kind": "info" + }, + { + "name": "authentication", + "description": "Most Docker Hub API endpoints require you to authenticate using your Docker credentials before using them.\n\nAdditionally, similar to the Docker Hub UI features, API endpoint responses may vary depending on your subscription (Personal, Pro, or Team) and your account's permissions.\n\nTo learn more about the features available in each subscription and to upgrade your existing subscription, see [Docker Pricing](https://www.docker.com/pricing?ref=Docs&refAction=DocsApiHub).\n\n# Types\n\nThe Docker Hub API supports the following authentication types.\n\nYou must use each authentication type with the [Create access token](#tag/authentication-api/operation/AuthCreateAccessToken) route to obtain a bearer token.\n\n## Password\nUsing a username and password is the most powerful, yet least secure way \nto authenticate with Docker as a user. It allows access to resources \nfor the user without scopes. \n\n_In general, it is recommended to use a personal access token (PAT) instead._\n\n_**The password authentication type is not available if your organization has SSO enforced.**_\n\n## Personal Access Token (PAT)\nUsing a username and PAT is the most secure way to authenticate with \nDocker as a user. PATs are scoped to specific resources and scopes.\n\nCurrently, a PAT is a more secure password due to limited functionality. \nIn the future, we may add fine-grained access like organization \naccess tokens for enhanced usage and security.\n\n## Organization Access Token (OAT)\nOrganization access tokens are scoped to specific resources and scopes \nin an organization. They are managed by organization owners. \n\nThese tokens are meant for automation and are not meant to be used by \nusers.\n\n# Labels\n\nThese labels will show up on routes in this reference that allow for use of bearer \ntokens issued from them.\n\n\n\n", + "summary": "Authentication", + "kind": "info" + }, + { + "name": "authentication-api", + "description": "The authentication endpoints allow you to authenticate with Docker Hub APIs.\n\nFor more information, see [Authentication](#tag/authentication).\n", + "summary": "Authentication", + "kind": "nav" + }, + { + "name": "access-tokens", + "description": "The Personal Access Token endpoints lets you manage personal access tokens. For more information, see [Access Tokens](https://docs.docker.com/security/access-tokens/personal-access-tokens/).\n\nYou can use a personal access token instead of a password in the [Docker CLI](https://docs.docker.com/engine/reference/commandline/cli/) or in the [Create an authentication token](#operation/PostUsersLogin) route to obtain a bearer token.\n\n### Scopes\n\nFor each scope grouping (in this case \"repo\"), you only need to define 1 scope as any lower scopes are assumed.\nFor example: If you define `repo:write`, the API assumes the scope of both `repo:read` *and* `repo:public_read` as well.\nIf you were to define both `repo:write` *and* `repo:read`, then `repo:read` is assumed by `repo:write` and ignored.\n\n***Treat your personal access token like your password and keep it secret. You cannot retrieve your token after it is generated.***\n", + "summary": "Personal Access Tokens", + "kind": "nav" + }, + { + "name": "audit-logs", + "description": "The Audit Logs API endpoints allow you to query audit log events across a namespace.\n\nFor more information, see [Audit Logs](https://docs.docker.com/admin/activity-logs/).\n", + "summary": "Audit Logs", + "kind": "nav" + }, + { + "name": "org-settings", + "description": "The Org Settings API endpoints allow you to manage your organization's settings.\n", + "summary": "Org Settings", + "kind": "nav" + }, + { + "name": "repositories", + "description": "The repository endpoints allow you to access your repository's tags.\n", + "summary": "Repositories", + "kind": "nav" + }, + { + "name": "orgs", + "x-audience": "public", + "description": "The organization endpoints allow you to interact with and manage your organizations.\n\nFor more information, see [Organization administration overview](https://docs.docker.com/admin/organization/).\n", + "summary": "Organizations", + "kind": "nav" + }, + { + "name": "groups", + "x-audience": "public", + "description": "The groups endpoints allow you to manage your organization's teams and their members.\n\nFor more information, see [Create and manage a team](https://docs.docker.com/admin/organization/manage/manage-a-team/).\n", + "summary": "Groups (Teams)", + "kind": "nav" + }, + { + "name": "invites", + "x-audience": "public", + "description": "The invites endpoints allow you to manage invites for users to join your Docker organization.\n\nFor more information, see [Invite members](https://docs.docker.com/admin/organization/manage/members/#invite-members).\n", + "summary": "Invites", + "kind": "nav" + }, + { + "name": "scim", + "x-audience": "public", + "description": "SCIM is a provisioning system that lets you manage users within your identity provider (IdP).\n\nFor more information, see [System for Cross-domain Identity management](https://docs.docker.com/security/for-admins/provisioning/scim/).\n", + "summary": "SCIM", + "kind": "nav" + }, + { + "name": "org-access-tokens", + "x-audience": "public", + "description": "The organization access token endpoints allow you to manage organization access tokens (OATs). See [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information.\n\nOATs only authenticate requests to the modern namespace-scoped routes under `/v2/namespaces/{namespace}/repositories/`. Legacy repository paths are OAT unsupported, regardless of the token's scopes, and reject every OAT with `403 token issued from organization access token is not allowed`:\n\n- `GET /v2/repositories/{namespace}/{repository}` — use [Get repository](#tag/repositories/operation/GetRepository) instead.\n- `GET /v2/repositories/{namespace}` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead.\n- `GET /v2/users/{username}/repositories` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead.\n", + "summary": "Organization Access Tokens", + "kind": "nav" + } + ], + "id": "hub-8c67a3d8bd5a", + "stage": "portable-descriptions", + "classification": "editorial completion", + "rationale": "Remove renderer-only badges/HTML presentation, retaining their text and Markdown links.", + "evidence": "Docker profile S12", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/tags", + "destinationPointer": "/tags" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "Get groups of an organization.", + "id": "hub-e81c4f02da4d", + "stage": "empty-description-completion", + "classification": "editorial completion", + "rationale": "Replace descriptions that contained only presentation markup with the existing operation summary.", + "evidence": "Existing operation summary", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups/get/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/delete/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "Delete an organization group.", + "id": "hub-90d2bf1f1840", + "stage": "empty-description-completion", + "classification": "editorial completion", + "rationale": "Replace descriptions that contained only presentation markup with the existing operation summary.", + "evidence": "Existing operation summary", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/delete/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/delete/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "Get a group of an organization.", + "id": "hub-3984c74c1439", + "stage": "empty-description-completion", + "classification": "editorial completion", + "rationale": "Replace descriptions that contained only presentation markup with the existing operation summary.", + "evidence": "Existing operation summary", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/get/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "Update some details for an organization group.", + "id": "hub-14585f035f98", + "stage": "empty-description-completion", + "classification": "editorial completion", + "rationale": "Replace descriptions that contained only presentation markup with the existing operation summary.", + "evidence": "Existing operation summary", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/patch/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "Update the details for an organization group.", + "id": "hub-2d209be6dab1", + "stage": "empty-description-completion", + "classification": "editorial completion", + "rationale": "Replace descriptions that contained only presentation markup with the existing operation summary.", + "evidence": "Existing operation summary", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}/put/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "Add a member to a group.", + "id": "hub-428a2404142d", + "stage": "empty-description-completion", + "classification": "editorial completion", + "rationale": "Replace descriptions that contained only presentation markup with the existing operation summary.", + "evidence": "Existing operation summary", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members/post/description" + }, + { + "pointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members~1{username}/delete/description", + "beforePresent": true, + "afterPresent": true, + "before": "\n", + "after": "Remove a user from a group.", + "id": "hub-50aea6b744b0", + "stage": "empty-description-completion", + "classification": "editorial completion", + "rationale": "Replace descriptions that contained only presentation markup with the existing operation summary.", + "evidence": "Existing operation summary", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members~1{username}/delete/description", + "destinationPointer": "/paths/~1v2~1orgs~1{org_name}~1groups~1{group_name}~1members~1{username}/delete/description" + }, + { + "pointer": "/components/schemas/team_repo/allOf", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "$ref": "#/components/responses/team_repo" + } + ], + "after": [ + { + "$ref": "#/components/schemas/repository_info" + } + ], + "id": "hub-f335bd60404f", + "stage": "hub-team-schema-assumption", + "classification": "provisional assumption", + "rationale": "Replace the missing response reference with the existing repository schema, the likely base of a team repository. Product owner must verify returned fields.", + "evidence": "components.schemas.team_repo and existing repository response definition", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/components/schemas/team_repo/allOf", + "destinationPointer": "/components/schemas/team_repo/allOf" + }, + { + "pointer": "/components/securitySchemes/scimToken", + "beforePresent": false, + "afterPresent": true, + "after": { + "type": "http", + "scheme": "bearer", + "description": "Use the SCIM provisioning token configured for the organization." + }, + "id": "hub-9809789ee63e", + "stage": "scim-auth-context", + "classification": "evidence-backed correction", + "rationale": "Declare the separate provisioning token for SCIM operations instead of inheriting Hub credential exchange guidance.", + "evidence": "content/manuals/security/provisioning/scim/provision-scim.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/components/securitySchemes/scimToken" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes/get/security", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "bearerSCIMAuth": [] + } + ], + "after": [ + { + "scimToken": [] + } + ], + "id": "hub-8f39ee63e16c", + "stage": "scim-auth-context", + "classification": "evidence-backed correction", + "rationale": "Declare the separate provisioning token for SCIM operations instead of inheriting Hub credential exchange guidance.", + "evidence": "content/manuals/security/provisioning/scim/provision-scim.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1scim~12.0~1ResourceTypes/get/security", + "destinationPointer": "/paths/~1v2~1scim~12.0~1ResourceTypes/get/security" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1ResourceTypes~1{name}/get/security", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "bearerSCIMAuth": [] + } + ], + "after": [ + { + "scimToken": [] + } + ], + "id": "hub-03dc3581d4c0", + "stage": "scim-auth-context", + "classification": "evidence-backed correction", + "rationale": "Declare the separate provisioning token for SCIM operations instead of inheriting Hub credential exchange guidance.", + "evidence": "content/manuals/security/provisioning/scim/provision-scim.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1scim~12.0~1ResourceTypes~1{name}/get/security", + "destinationPointer": "/paths/~1v2~1scim~12.0~1ResourceTypes~1{name}/get/security" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Schemas/get/security", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "bearerSCIMAuth": [] + } + ], + "after": [ + { + "scimToken": [] + } + ], + "id": "hub-5a6d51f54bbf", + "stage": "scim-auth-context", + "classification": "evidence-backed correction", + "rationale": "Declare the separate provisioning token for SCIM operations instead of inheriting Hub credential exchange guidance.", + "evidence": "content/manuals/security/provisioning/scim/provision-scim.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1scim~12.0~1Schemas/get/security", + "destinationPointer": "/paths/~1v2~1scim~12.0~1Schemas/get/security" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Schemas~1{id}/get/security", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "bearerSCIMAuth": [] + } + ], + "after": [ + { + "scimToken": [] + } + ], + "id": "hub-e2bd8446c1d5", + "stage": "scim-auth-context", + "classification": "evidence-backed correction", + "rationale": "Declare the separate provisioning token for SCIM operations instead of inheriting Hub credential exchange guidance.", + "evidence": "content/manuals/security/provisioning/scim/provision-scim.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1scim~12.0~1Schemas~1{id}/get/security", + "destinationPointer": "/paths/~1v2~1scim~12.0~1Schemas~1{id}/get/security" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1ServiceProviderConfig/get/security", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "bearerSCIMAuth": [] + } + ], + "after": [ + { + "scimToken": [] + } + ], + "id": "hub-4b8fdeb71056", + "stage": "scim-auth-context", + "classification": "evidence-backed correction", + "rationale": "Declare the separate provisioning token for SCIM operations instead of inheriting Hub credential exchange guidance.", + "evidence": "content/manuals/security/provisioning/scim/provision-scim.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1scim~12.0~1ServiceProviderConfig/get/security", + "destinationPointer": "/paths/~1v2~1scim~12.0~1ServiceProviderConfig/get/security" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Users/get/security", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "bearerSCIMAuth": [] + } + ], + "after": [ + { + "scimToken": [] + } + ], + "id": "hub-ecf88ecedb9e", + "stage": "scim-auth-context", + "classification": "evidence-backed correction", + "rationale": "Declare the separate provisioning token for SCIM operations instead of inheriting Hub credential exchange guidance.", + "evidence": "content/manuals/security/provisioning/scim/provision-scim.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1scim~12.0~1Users/get/security", + "destinationPointer": "/paths/~1v2~1scim~12.0~1Users/get/security" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Users/post/security", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "bearerSCIMAuth": [] + } + ], + "after": [ + { + "scimToken": [] + } + ], + "id": "hub-a24fdb1bdff4", + "stage": "scim-auth-context", + "classification": "evidence-backed correction", + "rationale": "Declare the separate provisioning token for SCIM operations instead of inheriting Hub credential exchange guidance.", + "evidence": "content/manuals/security/provisioning/scim/provision-scim.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1scim~12.0~1Users/post/security", + "destinationPointer": "/paths/~1v2~1scim~12.0~1Users/post/security" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/get/security", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "bearerSCIMAuth": [] + } + ], + "after": [ + { + "scimToken": [] + } + ], + "id": "hub-3e8afbee54cd", + "stage": "scim-auth-context", + "classification": "evidence-backed correction", + "rationale": "Declare the separate provisioning token for SCIM operations instead of inheriting Hub credential exchange guidance.", + "evidence": "content/manuals/security/provisioning/scim/provision-scim.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/get/security", + "destinationPointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/get/security" + }, + { + "pointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/security", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "bearerSCIMAuth": [] + } + ], + "after": [ + { + "scimToken": [] + } + ], + "id": "hub-56082273dc18", + "stage": "scim-auth-context", + "classification": "evidence-backed correction", + "rationale": "Declare the separate provisioning token for SCIM operations instead of inheriting Hub credential exchange guidance.", + "evidence": "content/manuals/security/provisioning/scim/provision-scim.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/security", + "destinationPointer": "/paths/~1v2~1scim~12.0~1Users~1{id}/put/security" + }, + { + "pointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/head/responses/200/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/repository_info" + }, + "example": { + "name": "my-app", + "namespace": "myorganization", + "repository_type": "image", + "status": 1, + "status_description": "Active", + "description": "A sample application repository", + "is_private": false, + "is_automated": false, + "star_count": 0, + "pull_count": 0, + "last_updated": "2025-01-20T10:30:00Z", + "date_registered": "2025-01-20T10:30:00Z", + "collaborator_count": 0, + "hub_user": "myorganization", + "has_starred": false, + "full_description": "This is a comprehensive description of my application repository that contains additional details about the project.", + "media_types": [], + "content_types": [], + "categories": [], + "immutable_tags_settings": { + "enabled": false, + "rules": [] + }, + "storage_size": null, + "source": null + } + } + }, + "id": "hub-2284c2bd0c92", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1namespaces~1{namespace}~1repositories~1{repository}/head/responses/200/content", + "destinationPointer": null + }, + { + "pointer": "/security", + "beforePresent": false, + "afterPresent": true, + "after": [], + "id": "hub-2b9d4937db9a", + "stage": "explicit-root-security", + "classification": "editorial completion", + "rationale": "Make the existing absence of inherited HTTP authentication explicit. Local socket permissions remain connection metadata.", + "evidence": "OpenAPI root security inheritance; existing source operation policies", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/security" + } + ] +} diff --git a/prototypes/api-docs/migrations/hub.patch b/prototypes/api-docs/migrations/hub.patch new file mode 100644 index 000000000000..b94f13a6a2dd --- /dev/null +++ b/prototypes/api-docs/migrations/hub.patch @@ -0,0 +1,2056 @@ +--- original/hub.yaml ++++ converted/hub.yaml +@@ -1,6 +1,4 @@ +-# yaml-language-server: $schema=https://raw.githubusercontent.com/OAI/OpenAPI-Specification/refs/heads/main/schemas/v3.0/schema.yaml +- +-openapi: 3.0.3 ++openapi: 3.2.0 + info: + title: Docker HUB API + version: 2-beta +@@ -21,16 +19,17 @@ + url: https://hub.docker.com + tags: + - name: changelog +- x-displayName: Changelog + description: | + See the [Changelog](/reference/api/hub/changelog) for a summary of changes across Docker Hub API versions. ++ summary: Changelog ++ kind: info + - name: resources +- x-displayName: Resources + description: | + The following resources are available to interact with the documented API: + - [Docker Hub CLI tool](https://github.com/docker/hub-tool#readme) (currently experimental) ++ summary: Resources ++ kind: info + - name: rate-limiting +- x-displayName: Rate Limiting + description: | + The Docker Hub API is limited on the amount of requests you can perform per minute against it. + +@@ -46,9 +45,10 @@ + + **Note**: These rate limits are separate from anti-abuse and Docker Hub download, or pull rate limiting. + To learn more about Docker Hub pull rate limiting, see [Usage and limits](https://docs.docker.com/docker-hub/usage/). ++ summary: Rate Limiting ++ kind: info + - name: authentication +- x-displayName: Authentication +- description: | ++ description: |+ + Most Docker Hub API endpoints require you to authenticate using your Docker credentials before using them. + + Additionally, similar to the Docker Hub UI features, API endpoint responses may vary depending on your subscription (Personal, Pro, or Team) and your account's permissions. +@@ -90,16 +90,18 @@ + These labels will show up on routes in this reference that allow for use of bearer + tokens issued from them. + +- +- ++ ++ ++ summary: Authentication ++ kind: info + - name: authentication-api +- x-displayName: Authentication + description: | + The authentication endpoints allow you to authenticate with Docker Hub APIs. + + For more information, see [Authentication](#tag/authentication). ++ summary: Authentication ++ kind: nav + - name: access-tokens +- x-displayName: Personal Access Tokens + description: | + The Personal Access Token endpoints lets you manage personal access tokens. For more information, see [Access Tokens](https://docs.docker.com/security/access-tokens/personal-access-tokens/). + +@@ -112,50 +114,58 @@ + If you were to define both `repo:write` *and* `repo:read`, then `repo:read` is assumed by `repo:write` and ignored. + + ***Treat your personal access token like your password and keep it secret. You cannot retrieve your token after it is generated.*** ++ summary: Personal Access Tokens ++ kind: nav + - name: audit-logs +- x-displayName: Audit Logs + description: | + The Audit Logs API endpoints allow you to query audit log events across a namespace. + + For more information, see [Audit Logs](https://docs.docker.com/admin/activity-logs/). ++ summary: Audit Logs ++ kind: nav + - name: org-settings +- x-displayName: Org Settings + description: | + The Org Settings API endpoints allow you to manage your organization's settings. ++ summary: Org Settings ++ kind: nav + - name: repositories +- x-displayName: Repositories + description: | + The repository endpoints allow you to access your repository's tags. ++ summary: Repositories ++ kind: nav + - name: orgs +- x-displayName: Organizations + x-audience: public + description: | + The organization endpoints allow you to interact with and manage your organizations. + + For more information, see [Organization administration overview](https://docs.docker.com/admin/organization/). ++ summary: Organizations ++ kind: nav + - name: groups +- x-displayName: Groups (Teams) + x-audience: public + description: | + The groups endpoints allow you to manage your organization's teams and their members. + + For more information, see [Create and manage a team](https://docs.docker.com/admin/organization/manage/manage-a-team/). ++ summary: Groups (Teams) ++ kind: nav + - name: invites +- x-displayName: Invites + x-audience: public + description: | + The invites endpoints allow you to manage invites for users to join your Docker organization. + + For more information, see [Invite members](https://docs.docker.com/admin/organization/manage/members/#invite-members). ++ summary: Invites ++ kind: nav + - name: scim +- x-displayName: SCIM + x-audience: public + description: | + SCIM is a provisioning system that lets you manage users within your identity provider (IdP). + + For more information, see [System for Cross-domain Identity management](https://docs.docker.com/security/for-admins/provisioning/scim/). ++ summary: SCIM ++ kind: nav + - name: org-access-tokens +- x-displayName: Organization Access Tokens + x-audience: public + description: | + The organization access token endpoints allow you to manage organization access tokens (OATs). See [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information. +@@ -165,6 +175,8 @@ + - `GET /v2/repositories/{namespace}/{repository}` — use [Get repository](#tag/repositories/operation/GetRepository) instead. + - `GET /v2/repositories/{namespace}` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead. + - `GET /v2/users/{username}/repositories` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead. ++ summary: Organization Access Tokens ++ kind: nav + paths: + /v2/users/login: + post: +@@ -174,16 +186,16 @@ + operationId: PostUsersLogin + security: [] + deprecated: true +- description: | ++ description: |+ + Creates and returns a bearer token in JWT format that you can use to authenticate with Docker Hub APIs. + + The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. + + _**As of September 16, 2024, this route requires a personal access token (PAT) instead of a password if your organization has SSO enforced.**_ + +-
+- Deprecated: Use [Create access token] instead. +-
++ ++ Deprecated: Use [Create access token](#tag/authentication-api/operation/AuthCreateAccessToken) instead. ++ + requestBody: + content: + application/json: +@@ -310,6 +322,7 @@ + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" ++ operationId: postV2AccessTokens + get: + summary: List personal access tokens + description: Returns a paginated list of personal access tokens. +@@ -339,6 +352,7 @@ + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" ++ operationId: getV2AccessTokens + /v2/access-tokens/{uuid}: + parameters: + - in: path +@@ -371,6 +385,7 @@ + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" ++ operationId: patchV2AccessTokensByUuid + get: + summary: Get personal access token + description: Returns a personal access token by UUID. +@@ -395,6 +410,7 @@ + $ref: "#/components/responses/Unauthorized" + "404": + $ref: "#/components/responses/NotFound" ++ operationId: getV2AccessTokensByUuid + delete: + summary: Delete personal access token + description: | +@@ -410,13 +426,14 @@ + $ref: "#/components/responses/Unauthorized" + "404": + $ref: "#/components/responses/NotFound" ++ operationId: deleteV2AccessTokensByUuid + /v2/auditlogs/{account}/actions: + get: + summary: List audit log actions +- description: | ++ description: |+ + List audit log actions for a namespace to be used as a filter for querying audit log events. + +- ++ + operationId: AuditLogs_ListAuditActions + security: + - bearerAuth: [] +@@ -707,10 +724,10 @@ + /v2/auditlogs/{account}: + get: + summary: List audit log events +- description: | ++ description: |+ + List audit log events for a given namespace. + +- ++ + operationId: AuditLogs_ListAuditLogs + security: + - bearerAuth: [] +@@ -732,7 +749,7 @@ + data: + digest: sha256:c1ae9c435032a276f80220c7d9b40f76266bbe79243d34f9cda30b76fe114dfa + tag: latest +- timestamp: "2021-02-19T01:34:35Z" ++ timestamp: 2021-02-19T01:34:35Z + action_description: | + pushed the tag latest with the digest sha256:c1ae9c435032a to the repository docker/example + - account: docker +@@ -742,12 +759,12 @@ + data: + lease_id: l_3EgPuRCjtUqT279CFPOQWcO8zOf + resource_type: run_4cpu_8mem +- started_at: "2026-06-04T18:24:21Z" +- updated_at: "2026-06-04T18:36:43Z" ++ started_at: 2026-06-04T18:24:21Z ++ updated_at: 2026-06-04T18:36:43Z + org_id: b908ca6e-b9a9-4a53-a9a5-6bec96f72432 + user_id: ecae6747-e42c-43cb-925d-cfce1ab32b02 +- timestamp: "2026-06-04T18:36:43Z" +- action_description: "offload lease 'l_3EgPuRCjtUqT279CFPOQWcO8zOf' ended, ran for '12m22s'" ++ timestamp: 2026-06-04T18:36:43Z ++ action_description: offload lease 'l_3EgPuRCjtUqT279CFPOQWcO8zOf' ended, ran for '12m22s' + "429": + description: "" + content: +@@ -858,6 +875,7 @@ + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" ++ operationId: getV2OrgsByNameSettings + put: + summary: Update organization settings + description: | +@@ -900,6 +918,7 @@ + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" ++ operationId: putV2OrgsByNameSettings + /v2/orgs/{name}/access-tokens: + post: + summary: Create access token +@@ -930,6 +949,7 @@ + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" ++ operationId: postV2OrgsByNameAccessTokens + get: + summary: List access tokens + description: | +@@ -962,7 +982,7 @@ + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" +- ++ operationId: getV2OrgsByNameAccessTokens + /v2/orgs/{org_name}/access-tokens/{access_token_id}: + parameters: + - $ref: "#/components/parameters/org_name" +@@ -972,7 +992,7 @@ + schema: + type: string + description: The ID of the access token to retrieve +- example: "a7a5ef25-8889-43a0-8cc7-f2a94268e861" ++ example: a7a5ef25-8889-43a0-8cc7-f2a94268e861 + get: + summary: Get access token + description: | +@@ -994,6 +1014,7 @@ + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" ++ operationId: getV2OrgsByOrgNameAccessTokensByAccessTokenId + patch: + summary: Update access token + description: | +@@ -1021,6 +1042,7 @@ + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" ++ operationId: patchV2OrgsByOrgNameAccessTokensByAccessTokenId + delete: + summary: Delete access token + description: | +@@ -1038,6 +1060,7 @@ + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" ++ operationId: deleteV2OrgsByOrgNameAccessTokensByAccessTokenId + /v2/namespaces/{namespace}/repositories/{repository}/tags: + parameters: + - $ref: "#/components/parameters/namespace" +@@ -1045,10 +1068,10 @@ + get: + operationId: ListRepositoryTags + summary: List repository tags +- description: | ++ description: |+ + Returns the list of tags for the specified repository. + +- ++ + tags: + - repositories + security: +@@ -1075,10 +1098,10 @@ + $ref: "#/components/responses/NotFound" + head: + summary: Check repository tags +- description: | ++ description: |+ + Checks whether the repository has any tags. + +- ++ + tags: + - repositories + security: +@@ -1090,6 +1113,7 @@ + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" ++ operationId: headV2NamespacesByNamespaceRepositoriesByRepositoryTags + /v2/namespaces/{namespace}/repositories/{repository}/tags/{tag}: + parameters: + - $ref: "#/components/parameters/namespace" +@@ -1098,10 +1122,10 @@ + get: + operationId: GetRepositoryTag + summary: Read repository tag +- description: | ++ description: |+ + Returns details for a specific tag in the specified repository. + +- ++ + tags: + - repositories + security: +@@ -1115,10 +1139,10 @@ + $ref: "#/components/responses/NotFound" + head: + summary: Check repository tag +- description: | ++ description: |+ + Checks whether the specified tag exists in the repository. + +- ++ + tags: + - repositories + security: +@@ -1130,19 +1154,20 @@ + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" ++ operationId: headV2NamespacesByNamespaceRepositoriesByRepositoryTagsByTag + /v2/namespaces/{namespace}/repositories/{repository}/immutabletags: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + patch: + operationId: UpdateRepositoryImmutableTags +- summary: "Update repository immutable tags" +- description: | ++ summary: Update repository immutable tags ++ description: |+ + Updates the immutable tags configuration for this repository. + + **Only users with administrative privileges for the repository can modify these settings.** + +- ++ + tags: + - repositories + security: +@@ -1150,15 +1175,15 @@ + requestBody: + $ref: "#/components/requestBodies/update_repository_immutable_tags_request" + responses: +- 200: ++ "200": + $ref: "#/components/responses/update_repository_immutable_tags_response" +- 400: ++ "400": + $ref: "#/components/responses/bad_request" +- 401: ++ "401": + $ref: "#/components/responses/unauthorized" +- 403: ++ "403": + $ref: "#/components/responses/forbidden" +- 404: ++ "404": + $ref: "#/components/responses/not_found" + /v2/namespaces/{namespace}/repositories/{repository}/immutabletags/verify: + parameters: +@@ -1166,13 +1191,13 @@ + - $ref: "#/components/parameters/repository" + post: + operationId: VerifyRepositoryImmutableTags +- summary: "Verify repository immutable tags" +- description: | ++ summary: Verify repository immutable tags ++ description: |+ + Validates the immutable tags regex passed in the request body and returns a list of tags matching it in this repository. + + **Only users with administrative privileges for the repository can call this endpoint.** + +- ++ + tags: + - repositories + security: +@@ -1180,15 +1205,15 @@ + requestBody: + $ref: "#/components/requestBodies/immutable_tags_verify_request" + responses: +- 200: ++ "200": + $ref: "#/components/responses/immutable_tags_verify_response" +- 400: ++ "400": + $ref: "#/components/responses/bad_request" +- 401: ++ "401": + $ref: "#/components/responses/unauthorized" +- 403: ++ "403": + $ref: "#/components/responses/forbidden" +- 404: ++ "404": + $ref: "#/components/responses/not_found" + /v2/repositories/{namespace}/{repository}/groups: + parameters: +@@ -1196,10 +1221,10 @@ + - $ref: "#/components/parameters/repository" + post: + summary: Assign a group (Team) to a repository for access +- description: | ++ description: |+ + Assigns an organization group (team) to a repository with a specified permission level. + +- ++ + tags: + - repositories + operationId: CreateRepositoryGroup +@@ -1213,7 +1238,7 @@ + $ref: "#/components/schemas/RepositoryGroupCreationRequest" + example: + group_id: 12345 +- permission: "write" ++ permission: write + responses: + "200": + description: Repository group permission created successfully +@@ -1222,8 +1247,8 @@ + schema: + $ref: "#/components/schemas/RepositoryGroup" + example: +- group_name: "developers" +- permission: "write" ++ group_name: developers ++ permission: write + group_id: 12345 + "400": + description: Bad Request - Invalid request parameters +@@ -1248,14 +1273,14 @@ + + Public repositories are accessible to everyone, while private repositories require appropriate authentication and permissions. + +- ++ + + **OAT listing behavior**: an OAT with the `scope-repository-list` scope sees all repositories including private ones. An OAT without that scope only sees public repositories. This filtering is silent: the response is a normal `200` with no indication that private repositories were withheld. + tags: + - repositories + security: + - bearerAuth: [] +- - {} # Allow anonymous access for public repositories ++ - {} + parameters: + - in: query + name: page +@@ -1309,59 +1334,59 @@ + repositories_list: + value: + count: 287 +- next: "https://hub.docker.com/v2/namespaces/docker/repositories?page=2&page_size=2" ++ next: https://hub.docker.com/v2/namespaces/docker/repositories?page=2&page_size=2 + previous: null + results: +- - name: "highland_builder" +- namespace: "docker" +- repository_type: "image" ++ - name: highland_builder ++ namespace: docker ++ repository_type: image + status: 1 +- status_description: "active" +- description: "Image for performing Docker build requests" ++ status_description: active ++ description: Image for performing Docker build requests + is_private: false + star_count: 7 + pull_count: 15722123 +- last_updated: "2023-06-20T10:44:45.459826Z" +- last_modified: "2024-10-16T13:48:34.145251Z" +- date_registered: "2015-05-19T21:13:35.937763Z" ++ last_updated: 2023-06-20T10:44:45.459826Z ++ last_modified: 2024-10-16T13:48:34.145251Z ++ date_registered: 2015-05-19T21:13:35.937763Z + affiliation: "" + media_types: +- - "application/octet-stream" +- - "application/vnd.docker.container.image.v1+json" +- - "application/vnd.docker.distribution.manifest.v1+prettyjws" ++ - application/octet-stream ++ - application/vnd.docker.container.image.v1+json ++ - application/vnd.docker.distribution.manifest.v1+prettyjws + content_types: +- - "unrecognized" +- - "image" ++ - unrecognized ++ - image + categories: +- - name: "Languages & frameworks" +- slug: "languages-and-frameworks" +- - name: "Integration & delivery" +- slug: "integration-and-delivery" +- - name: "Operating systems" +- slug: "operating-systems" ++ - name: Languages & frameworks ++ slug: languages-and-frameworks ++ - name: Integration & delivery ++ slug: integration-and-delivery ++ - name: Operating systems ++ slug: operating-systems + storage_size: 488723114800 +- - name: "whalesay" +- namespace: "docker" ++ - name: whalesay ++ namespace: docker + repository_type: null + status: 1 +- status_description: "active" +- description: "An image for use in the Docker demo tutorial" ++ status_description: active ++ description: An image for use in the Docker demo tutorial + is_private: false + star_count: 757 + pull_count: 130737682 +- last_updated: "2015-06-19T19:06:27.388123Z" +- last_modified: "2024-10-16T13:48:34.145251Z" +- date_registered: "2015-06-09T18:16:36.527329Z" ++ last_updated: 2015-06-19T19:06:27.388123Z ++ last_modified: 2024-10-16T13:48:34.145251Z ++ date_registered: 2015-06-09T18:16:36.527329Z + affiliation: "" + media_types: +- - "application/vnd.docker.distribution.manifest.v1+prettyjws" ++ - application/vnd.docker.distribution.manifest.v1+prettyjws + content_types: +- - "image" ++ - image + categories: +- - name: "Languages & frameworks" +- slug: "languages-and-frameworks" +- - name: "Integration & delivery" +- slug: "integration-and-delivery" ++ - name: Languages & frameworks ++ slug: languages-and-frameworks ++ - name: Integration & delivery ++ slug: integration-and-delivery + storage_size: 103666708 + "400": + description: Bad Request - Invalid request parameters +@@ -1375,10 +1400,8 @@ + value: + fields: + ordering: +- [ +- "Invalid ordering value. Must be one of: name, -name, last_updated, -last_updated, pull_count, -pull_count", +- ] +- text: "Invalid ordering value" ++ - "Invalid ordering value. Must be one of: name, -name, last_updated, -last_updated, pull_count, -pull_count" ++ text: Invalid ordering value + "401": + $ref: "#/components/responses/unauthorized" + "403": +@@ -1391,11 +1414,11 @@ + $ref: "#/components/schemas/error" + post: + summary: Create a new repository +- description: | ++ description: |+ + Creates a new repository within the specified namespace. The repository will be created + with the provided metadata including name, description, and privacy settings. + +- ++ + operationId: CreateRepository + tags: + - repositories +@@ -1408,36 +1431,36 @@ + schema: + $ref: "#/components/schemas/repo_creation_request" + example: +- name: "my-app" +- namespace: "myorganization" +- description: "A sample application repository" +- full_description: "This is a comprehensive description of my application repository that contains additional details about the project." +- registry: "docker.io" ++ name: my-app ++ namespace: myorganization ++ description: A sample application repository ++ full_description: This is a comprehensive description of my application repository that contains additional details about the project. ++ registry: docker.io + is_private: false + responses: +- 201: ++ "201": + description: Repository created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/repository_info" + example: +- name: "my-app" +- namespace: "myorganization" +- repository_type: "image" ++ name: my-app ++ namespace: myorganization ++ repository_type: image + status: 1 +- status_description: "Active" +- description: "A sample application repository" ++ status_description: Active ++ description: A sample application repository + is_private: false + is_automated: false + star_count: 0 + pull_count: 0 +- last_updated: "2025-01-20T10:30:00Z" +- date_registered: "2025-01-20T10:30:00Z" ++ last_updated: 2025-01-20T10:30:00Z ++ date_registered: 2025-01-20T10:30:00Z + collaborator_count: 0 +- hub_user: "myorganization" ++ hub_user: myorganization + has_starred: false +- full_description: "This is a comprehensive description of my application repository that contains additional details about the project." ++ full_description: This is a comprehensive description of my application repository that contains additional details about the project. + media_types: [] + content_types: [] + categories: [] +@@ -1446,15 +1469,15 @@ + rules: [] + storage_size: null + source: null +- 400: ++ "400": + $ref: "#/components/responses/bad_request" +- 401: ++ "401": + $ref: "#/components/responses/unauthorized" +- 403: ++ "403": + $ref: "#/components/responses/forbidden" +- 404: ++ "404": + $ref: "#/components/responses/not_found" +- 500: ++ "500": + $ref: "#/components/responses/internal_error" + /v2/namespaces/{namespace}/repositories/{repository}: + parameters: +@@ -1463,40 +1486,40 @@ + get: + operationId: GetRepository + summary: Get repository in a namespace +- description: | ++ description: |+ + Returns a repository within the specified namespace (organization or user). + + Public repositories are accessible to everyone, while private repositories require appropriate authentication and permissions. + +- ++ + tags: + - repositories + security: + - bearerAuth: [] +- - {} # Allow anonymous access for public repositories ++ - {} + responses: +- 200: ++ "200": + content: + application/json: + schema: + $ref: "#/components/schemas/repository_info" + example: +- name: "my-app" +- namespace: "myorganization" +- repository_type: "image" ++ name: my-app ++ namespace: myorganization ++ repository_type: image + status: 1 +- status_description: "Active" +- description: "A sample application repository" ++ status_description: Active ++ description: A sample application repository + is_private: false + is_automated: false + star_count: 0 + pull_count: 0 +- last_updated: "2025-01-20T10:30:00Z" +- date_registered: "2025-01-20T10:30:00Z" ++ last_updated: 2025-01-20T10:30:00Z ++ date_registered: 2025-01-20T10:30:00Z + collaborator_count: 0 +- hub_user: "myorganization" ++ hub_user: myorganization + has_starred: false +- full_description: "This is a comprehensive description of my application repository that contains additional details about the project." ++ full_description: This is a comprehensive description of my application repository that contains additional details about the project. + media_types: [] + content_types: [] + categories: [] +@@ -1505,66 +1528,37 @@ + rules: [] + storage_size: null + source: null +- 401: ++ "401": + $ref: "#/components/responses/unauthorized" +- 403: ++ "403": + $ref: "#/components/responses/forbidden" +- 404: ++ "404": + $ref: "#/components/responses/not_found" +- 500: ++ "500": + $ref: "#/components/responses/internal_error" + head: + operationId: CheckRepository + summary: Check repository in a namespace +- description: | ++ description: |+ + Check a repository within the specified namespace (organization or user). + + Public repositories are accessible to everyone, while private repositories require appropriate authentication and permissions. + +- ++ + tags: + - repositories + security: + - bearerAuth: [] +- - {} # Allow anonymous access for public repositories ++ - {} + responses: +- 200: +- content: +- application/json: +- schema: +- $ref: "#/components/schemas/repository_info" +- example: +- name: "my-app" +- namespace: "myorganization" +- repository_type: "image" +- status: 1 +- status_description: "Active" +- description: "A sample application repository" +- is_private: false +- is_automated: false +- star_count: 0 +- pull_count: 0 +- last_updated: "2025-01-20T10:30:00Z" +- date_registered: "2025-01-20T10:30:00Z" +- collaborator_count: 0 +- hub_user: "myorganization" +- has_starred: false +- full_description: "This is a comprehensive description of my application repository that contains additional details about the project." +- media_types: [] +- content_types: [] +- categories: [] +- immutable_tags_settings: +- enabled: false +- rules: [] +- storage_size: null +- source: null +- 401: ++ "200": {} ++ "401": + $ref: "#/components/responses/unauthorized" +- 403: ++ "403": + $ref: "#/components/responses/forbidden" +- 404: ++ "404": + $ref: "#/components/responses/not_found" +- 500: ++ "500": + $ref: "#/components/responses/internal_error" + /v2/orgs/{org_name}/members: + parameters: +@@ -1577,7 +1571,7 @@ + - $ref: "#/components/parameters/role" + get: + summary: List org members +- description: | ++ description: |+ + Returns a list of members for an organization. + + _The following fields are only visible to orgs with insights enabled._ +@@ -1588,7 +1582,7 @@ + + To make visible, please see [View Insights for organization users](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). + +- ++ + tags: + - orgs + security: +@@ -1610,15 +1604,16 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: getV2OrgsByOrgNameMembers + /v2/orgs/{org_name}/members/export: + parameters: + - $ref: "#/components/parameters/org_name" + get: + summary: Export org members CSV +- description: | ++ description: |+ + Export members of an organization as a CSV + +- ++ + tags: + - orgs + security: +@@ -1682,6 +1677,7 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: getV2OrgsByOrgNameMembersExport + /v2/orgs/{org_name}/members/{username}: + x-audience: public + parameters: +@@ -1689,11 +1685,11 @@ + - $ref: "#/components/parameters/username" + put: + summary: Update org member (role) +- description: | ++ description: |+ + Updates the role of a member in the organization. + ***Only users in the "owners" group of the organization can use this endpoint.*** + +- ++ + tags: + - orgs + security: +@@ -1729,12 +1725,13 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: putV2OrgsByOrgNameMembersByUsername + delete: + summary: Remove member from org +- description: | ++ description: |+ + Removes the member from the org, ie. all groups in the org, unless they're the last owner + +- ++ + tags: + - orgs + security: +@@ -1750,16 +1747,17 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: deleteV2OrgsByOrgNameMembersByUsername + /v2/orgs/{org_name}/invites: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + get: + summary: List org invites +- description: | ++ description: |+ + Return all pending invites for a given org, only team owners can call this endpoint + +- ++ + tags: + - invites + security: +@@ -1782,14 +1780,14 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: getV2OrgsByOrgNameInvites + /v2/orgs/{org_name}/groups: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + get: + summary: Get groups of an organization +- description: | +- ++ description: Get groups of an organization. + tags: + - groups + security: +@@ -1833,12 +1831,13 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: getV2OrgsByOrgNameGroups + post: + summary: Create a new group +- description: | ++ description: |+ + Create a new group within an organization. + +- ++ + tags: + - groups + security: +@@ -1867,6 +1866,7 @@ + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" ++ operationId: postV2OrgsByOrgNameGroups + /v2/orgs/{org_name}/groups/{group_name}: + x-audience: public + parameters: +@@ -1874,8 +1874,7 @@ + - $ref: "#/components/parameters/group_name" + get: + summary: Get a group of an organization +- description: | +- ++ description: Get a group of an organization. + tags: + - groups + security: +@@ -1893,10 +1892,10 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: getV2OrgsByOrgNameGroupsByGroupName + put: + summary: Update the details for an organization group +- description: | +- ++ description: Update the details for an organization group. + tags: + - groups + security: +@@ -1925,10 +1924,10 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: putV2OrgsByOrgNameGroupsByGroupName + patch: + summary: Update some details for an organization group +- description: | +- ++ description: Update some details for an organization group. + tags: + - groups + security: +@@ -1962,10 +1961,10 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: patchV2OrgsByOrgNameGroupsByGroupName + delete: + summary: Delete an organization group +- description: | +- ++ description: Delete an organization group. + tags: + - groups + security: +@@ -1979,6 +1978,7 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: deleteV2OrgsByOrgNameGroupsByGroupName + /v2/orgs/{org_name}/groups/{group_name}/members: + x-audience: public + get: +@@ -1995,11 +1995,11 @@ + type: string + description: Search members by username, full_name or email. + summary: List members of a group +- description: | ++ description: |+ + List the members (users) that are in a group. + If user is owner of the org or has otherwise elevated permissions, they can search by email and the result will also contain emails. + +- ++ + tags: + - groups + responses: +@@ -2028,13 +2028,13 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: getV2OrgsByOrgNameGroupsByGroupNameMembers + post: + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" + summary: Add a member to a group +- description: | +- ++ description: Add a member to a group. + tags: + - groups + security: +@@ -2052,6 +2052,7 @@ + $ref: "#/components/responses/not_found" + "500": + $ref: "#/components/responses/internal_error" ++ operationId: postV2OrgsByOrgNameGroupsByGroupNameMembers + /v2/orgs/{org_name}/groups/{group_name}/members/{username}: + x-audience: public + parameters: +@@ -2060,8 +2061,7 @@ + - $ref: "#/components/parameters/username" + delete: + summary: Remove a user from a group +- description: | +- ++ description: Remove a user from a group. + tags: + - groups + security: +@@ -2075,6 +2075,7 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: deleteV2OrgsByOrgNameGroupsByGroupNameMembersByUsername + /v2/invites/{id}: + x-audience: public + parameters: +@@ -2085,10 +2086,10 @@ + type: string + delete: + summary: Cancel an invite +- description: | ++ description: |+ + Mark the invite as cancelled so it doesn't show up on the list of pending invites + +- ++ + tags: + - invites + security: +@@ -2102,6 +2103,7 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: deleteV2InvitesById + /v2/invites/{id}/resend: + x-audience: public + parameters: +@@ -2112,10 +2114,10 @@ + required: true + patch: + summary: Resend an invite +- description: | ++ description: |+ + Resend a pending invite to the user, any org owner can resend an invite + +- ++ + tags: + - invites + security: +@@ -2129,16 +2131,17 @@ + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" ++ operationId: patchV2InvitesByIdResend + /v2/invites/bulk: + x-audience: public + parameters: + - $ref: "#/components/parameters/bulk_invite" + post: + summary: Bulk create invites +- description: | ++ description: |+ + Create multiple invites by emails or DockerIDs. Only a team owner can create invites. + +- ++ + tags: + - invites + requestBody: +@@ -2159,6 +2162,7 @@ + $ref: "#/components/responses/bad_request" + "409": + $ref: "#/components/responses/conflict" ++ operationId: postV2InvitesBulk + /v2/scim/2.0/ServiceProviderConfig: + x-audience: public + get: +@@ -2168,7 +2172,7 @@ + tags: + - scim + security: +- - bearerSCIMAuth: [] ++ - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_service_provider_config_resp" +@@ -2176,6 +2180,7 @@ + $ref: "#/components/responses/scim_unauthorized" + "500": + $ref: "#/components/responses/scim_error" ++ operationId: getV2Scim20ServiceProviderConfig + /v2/scim/2.0/ResourceTypes: + x-audience: public + get: +@@ -2185,7 +2190,7 @@ + tags: + - scim + security: +- - bearerSCIMAuth: [] ++ - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_resource_types_resp" +@@ -2193,6 +2198,7 @@ + $ref: "#/components/responses/scim_unauthorized" + "500": + $ref: "#/components/responses/scim_error" ++ operationId: getV2Scim20ResourceTypes + /v2/scim/2.0/ResourceTypes/{name}: + x-audience: public + get: +@@ -2209,7 +2215,7 @@ + example: User + required: true + security: +- - bearerSCIMAuth: [] ++ - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_resource_type_resp" +@@ -2219,6 +2225,7 @@ + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" ++ operationId: getV2Scim20ResourceTypesByName + /v2/scim/2.0/Schemas: + x-audience: public + get: +@@ -2228,7 +2235,7 @@ + tags: + - scim + security: +- - bearerSCIMAuth: [] ++ - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_schemas_resp" +@@ -2236,6 +2243,7 @@ + $ref: "#/components/responses/scim_unauthorized" + "500": + $ref: "#/components/responses/scim_error" ++ operationId: getV2Scim20Schemas + /v2/scim/2.0/Schemas/{id}: + x-audience: public + get: +@@ -2252,7 +2260,7 @@ + example: urn:ietf:params:scim:schemas:core:2.0:User + required: true + security: +- - bearerSCIMAuth: [] ++ - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_schema_resp" +@@ -2262,6 +2270,7 @@ + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" ++ operationId: getV2Scim20SchemasById + /v2/scim/2.0/Users: + x-audience: public + get: +@@ -2292,7 +2301,7 @@ + tags: + - scim + security: +- - bearerSCIMAuth: [] ++ - scimToken: [] + parameters: + - name: startIndex + in: query +@@ -2342,6 +2351,7 @@ + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" ++ operationId: getV2Scim20Users + post: + summary: Create user + description: | +@@ -2349,7 +2359,7 @@ + tags: + - scim + security: +- - bearerSCIMAuth: [] ++ - scimToken: [] + requestBody: + $ref: "#/components/requestBodies/scim_create_user_request" + responses: +@@ -2367,6 +2377,7 @@ + $ref: "#/components/responses/scim_conflict" + "500": + $ref: "#/components/responses/scim_error" ++ operationId: postV2Scim20Users + /v2/scim/2.0/Users/{id}: + x-audience: public + parameters: +@@ -2378,7 +2389,7 @@ + tags: + - scim + security: +- - bearerSCIMAuth: [] ++ - scimToken: [] + responses: + "200": + $ref: "#/components/responses/scim_get_user_resp" +@@ -2392,6 +2403,7 @@ + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" ++ operationId: getV2Scim20UsersById + put: + summary: Update a user + description: | +@@ -2399,7 +2411,7 @@ + tags: + - scim + security: +- - bearerSCIMAuth: [] ++ - scimToken: [] + requestBody: + $ref: "#/components/requestBodies/scim_update_user_request" + responses: +@@ -2417,6 +2429,7 @@ + $ref: "#/components/responses/scim_conflict" + "500": + $ref: "#/components/responses/scim_error" ++ operationId: putV2Scim20UsersById + components: + responses: + BadRequest: +@@ -2679,8 +2692,8 @@ + type: string + description: List of immutable tag rules + example: +- - "v.*" +- - ".*-RELEASE" ++ - v.* ++ - .*-RELEASE + required: + - immutable_tags + - immutable_tags_rules +@@ -2698,26 +2711,26 @@ + Letters must be lowercase. + minLength: 2 + maxLength: 255 +- pattern: "^[a-z0-9]+(?:[._-][a-z0-9]+)*$" +- example: "my-app" ++ pattern: ^[a-z0-9]+(?:[._-][a-z0-9]+)*$ ++ example: my-app + namespace: + type: string + description: The namespace where the repository will be created +- example: "myorganization" ++ example: myorganization + description: + type: string + description: Short description of the repository + maxLength: 100 +- example: "A sample application repository" ++ example: A sample application repository + full_description: + type: string + description: Detailed description of the repository + maxLength: 25000 +- example: "This is a comprehensive description of my application repository that contains additional details about the project, its purpose, usage instructions, and other relevant information." ++ example: This is a comprehensive description of my application repository that contains additional details about the project, its purpose, usage instructions, and other relevant information. + registry: + type: string + description: The registry where the repository will be hosted +- example: "docker.io" ++ example: docker.io + is_private: + type: boolean + description: Whether the repository should be private +@@ -2741,20 +2754,26 @@ + - read: Can view and pull from the repository + - write: Can view, pull, and push to the repository + - admin: Can view, pull, push, and manage repository settings +- enum: ["read", "write", "admin"] +- example: "write" ++ enum: ++ - read ++ - write ++ - admin ++ example: write + RepositoryGroup: + type: object + properties: + group_name: + type: string + description: The name of the group +- example: "developers" ++ example: developers + permission: + type: string + description: The permission level granted to the group +- enum: ["read", "write", "admin"] +- example: "write" ++ enum: ++ - read ++ - write ++ - admin ++ example: write + group_id: + type: integer + format: int64 +@@ -2773,8 +2792,9 @@ + type: string + description: Repository namespace + repository_type: +- type: string +- nullable: true ++ type: ++ - string ++ - "null" + description: Type of the repository + status: + type: integer +@@ -2802,45 +2822,50 @@ + last_updated: + type: string + format: date-time +- example: "2021-01-05T21:06:53.506400Z" ++ example: 2021-01-05T21:06:53.506400Z + description: ISO 8601 timestamp of when repository was last updated + last_modified: +- type: string ++ type: ++ - string ++ - "null" + format: date-time +- example: "2021-01-05T21:06:53.506400Z" +- nullable: true ++ example: 2021-01-05T21:06:53.506400Z + description: ISO 8601 timestamp of when repository was last modified + date_registered: + type: string + format: date-time +- example: "2021-01-05T21:06:53.506400Z" ++ example: 2021-01-05T21:06:53.506400Z + description: ISO 8601 timestamp of when repository was created + collaborator_count: + type: integer + format: int64 + description: Number of collaborators + affiliation: +- type: string +- nullable: true ++ type: ++ - string ++ - "null" + description: Repository affiliation + hub_user: +- type: string +- nullable: true ++ type: ++ - string ++ - "null" + description: Hub user information + has_starred: + type: boolean + description: Whether the current user has starred this repository + full_description: +- type: string +- nullable: true ++ type: ++ - string ++ - "null" + description: Full description of the repository + permissions: + $ref: "#/components/schemas/repo_permissions" + media_types: + type: array + items: +- type: string +- nullable: true ++ type: ++ - string ++ - "null" + description: Supported media types + content_types: + type: array +@@ -2855,13 +2880,15 @@ + immutable_tags_settings: + $ref: "#/components/schemas/immutable_tags_settings" + storage_size: +- type: integer ++ type: ++ - integer ++ - "null" + format: int64 +- nullable: true + description: Storage size in bytes + source: +- type: string +- nullable: true ++ type: ++ - string ++ - "null" + description: Source of the repository, where it was created from + required: + - user +@@ -2918,9 +2945,9 @@ + properties: + regex: + type: string +- pattern: '^[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*(\\/[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*)*$' +- description: 'Immutable tags rule regex pattern. Must match format: [a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*(\\/[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*)*' +- example: "v.*" ++ pattern: ^[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*(\\/[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*)*$ ++ description: "Immutable tags rule regex pattern. Must match format: [a-z0-9]+((\\\\.|_|__|-+)[a-z0-9]+)*(\\\\/[a-z0-9]+((\\\\.|_|__|-+)[a-z0-9]+)*)*" ++ example: v.* + required: + - regex + immutable_tags_verify_response: +@@ -2932,9 +2959,9 @@ + type: string + description: List of tags that match the provided regex pattern + example: +- - "v1.0.0" +- - "v2.1.3" +- - "latest" ++ - v1.0.0 ++ - v2.1.3 ++ - latest + required: + - tags + repository_list_entry: +@@ -2943,20 +2970,21 @@ + name: + type: string + description: Name of the repository +- example: "hello-world" ++ example: hello-world + namespace: + type: string + description: Namespace (organization or username) that owns the repository +- example: "docker" ++ example: docker + repository_type: +- type: string ++ type: ++ - string ++ - "null" + description: Type of repository + enum: + - image + - plugin + - null +- example: "image" +- nullable: true ++ example: image + status: + type: integer + description: Repository status code +@@ -2967,12 +2995,13 @@ + enum: + - active + - inactive +- example: "active" ++ example: active + description: +- type: string ++ type: ++ - string ++ - "null" + description: Repository description +- nullable: true +- example: "Hello World! (an example of minimal Dockerization)" ++ example: Hello World! (an example of minimal Dockerization) + is_private: + type: boolean + description: Whether the repository is private +@@ -2988,22 +3017,24 @@ + minimum: 0 + example: 50000000 + last_updated: +- type: string ++ type: ++ - string ++ - "null" + format: date-time + description: ISO 8601 timestamp of when the repository was last updated +- example: "2023-12-01T10:30:00Z" +- nullable: true ++ example: 2023-12-01T10:30:00Z + last_modified: +- type: string ++ type: ++ - string ++ - "null" + format: date-time + description: ISO 8601 timestamp of when the repository was last modified +- example: "2023-12-01T10:30:00Z" +- nullable: true ++ example: 2023-12-01T10:30:00Z + date_registered: + type: string + format: date-time + description: ISO 8601 timestamp of when the repository was created +- example: "2013-06-19T19:07:54Z" ++ example: 2013-06-19T19:07:54Z + affiliation: + type: string + description: User's affiliation with the repository (empty string if no affiliation) +@@ -3014,14 +3045,14 @@ + items: + type: string + example: +- - "application/vnd.docker.plugin.v1+json" ++ - application/vnd.docker.plugin.v1+json + content_types: + type: array + description: Content types supported by this repository + items: + type: string + example: +- - "plugin" ++ - plugin + categories: + type: array + description: Categories associated with this repository +@@ -3042,14 +3073,14 @@ + name: + type: string + description: Human-readable name of the category +- example: "Databases" ++ example: Databases + minLength: 1 + slug: + type: string + description: URL-friendly identifier for the category +- example: "databases" ++ example: databases + minLength: 1 +- pattern: "^[a-z0-9]+(?:-[a-z0-9]+)*$" ++ pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$ + description: Repository category for classification and discovery + list_repositories_response: + allOf: +@@ -3094,7 +3125,6 @@ + This token can be used in the HTTP Authorization header as a JWT to authenticate with the Docker Hub APIs. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c +- nullable: false + PostUsersLoginErrorResponse: + description: failed user login response or second factor required + type: object +@@ -3105,13 +3135,13 @@ + description: Description of the error. + type: string + example: Incorrect authentication credentials +- nullable: false + login_2fa_token: + description: | + Short time lived token to be used on `/v2/users/2fa-login` to complete the authentication. This field is present only if 2FA is enabled. +- type: string ++ type: ++ - string ++ - "null" + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c +- nullable: true + Users2FALoginRequest: + description: Second factor user login details + type: object +@@ -3136,7 +3166,6 @@ + description: Description of the error. + type: string + example: Incorrect authentication credentials +- nullable: false + protobufAny: + type: object + properties: +@@ -3254,11 +3283,12 @@ + example: some user agent + created_at: + type: string +- example: "2021-07-20T12:00:00.000000Z" ++ example: 2021-07-20T12:00:00.000000Z + last_used: +- type: string ++ type: ++ - string ++ - "null" + example: null +- nullable: true + generated_by: + type: string + example: manual +@@ -3280,7 +3310,7 @@ + expires_at: + type: string + format: date-time +- example: "2021-10-28T18:30:19.520861Z" ++ example: 2021-10-28T18:30:19.520861Z + createAccessTokenRequest: + type: object + required: +@@ -3307,7 +3337,7 @@ + Optional expiration date for the token. + If omitted, the token will remain valid indefinitely. + format: date-time +- example: "2021-10-28T18:30:19.520861Z" ++ example: 2021-10-28T18:30:19.520861Z + createAccessTokensResponse: + $ref: "#/components/schemas/accessToken" + getAccessTokensResponse: +@@ -3372,9 +3402,10 @@ + type: object + properties: + digest: +- type: string ++ type: ++ - string ++ - "null" + description: image layer digest +- nullable: true + size: + type: integer + description: size of the layer +@@ -3394,9 +3425,10 @@ + type: string + description: CPU variant + digest: +- type: string ++ type: ++ - string ++ - "null" + description: image digest +- nullable: true + layers: + type: array + items: +@@ -3420,15 +3452,17 @@ + - inactive + description: Status of the image + last_pulled: +- type: string +- example: "2021-01-05T21:06:53.506400Z" ++ type: ++ - string ++ - "null" ++ example: 2021-01-05T21:06:53.506400Z + description: datetime of last pull +- nullable: true + last_pushed: +- type: string +- example: "2021-01-05T21:06:53.506400Z" ++ type: ++ - string ++ - "null" ++ example: 2021-01-05T21:06:53.506400Z + description: datetime of last push +- nullable: true + tag: + type: object + properties: +@@ -3442,10 +3476,11 @@ + type: integer + description: ID of the user that pushed the tag + last_updated: +- type: string +- example: "2021-01-05T21:06:53.506400Z" ++ type: ++ - string ++ - "null" ++ example: 2021-01-05T21:06:53.506400Z + description: datetime of last update +- nullable: true + last_updater: + type: integer + description: ID of the last user that updated the tag +@@ -3471,15 +3506,17 @@ + - inactive + description: whether a tag has been pushed to or pulled in the past month + tag_last_pulled: +- type: string +- example: "2021-01-05T21:06:53.506400Z" ++ type: ++ - string ++ - "null" ++ example: 2021-01-05T21:06:53.506400Z + description: datetime of last pull +- nullable: true + tag_last_pushed: +- type: string +- example: "2021-01-05T21:06:53.506400Z" ++ type: ++ - string ++ - "null" ++ example: 2021-01-05T21:06:53.506400Z + description: datetime of last push +- nullable: true + paginated_tags: + allOf: + - $ref: "#/components/schemas/page" +@@ -3496,13 +3533,15 @@ + type: integer + description: total number of results available across all pages + next: +- type: string ++ type: ++ - string ++ - "null" + description: link to next page of results if any +- nullable: true + previous: +- type: string ++ type: ++ - string ++ - "null" + description: link to previous page of results if any +- nullable: true + scim_schema_attribute: + type: object + properties: +@@ -3570,7 +3609,7 @@ + example: owners + created_at: + type: string +- example: "2021-10-28T18:30:19.520861Z" ++ example: 2021-10-28T18:30:19.520861Z + bulk_invite: + type: object + properties: +@@ -3599,7 +3638,7 @@ + invitee: invitee@docker.com + org: docker + team: owners +- created_at: "2021-10-28T18:30:19.520861Z" ++ created_at: 2021-10-28T18:30:19.520861Z + - invitee: invitee2@docker.com + status: existing_org_member + - invitee: invitee3@docker.com +@@ -3641,7 +3680,7 @@ + example: Docker Inc + date_joined: + type: string +- example: "2021-01-05T21:06:53.506400Z" ++ example: 2021-01-05T21:06:53.506400Z + full_name: + type: string + example: Jon Snow +@@ -3704,21 +3743,20 @@ + description: | + Last time the user logged in. To access this field, you must have insights visible for your organization. See + [Insights](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). +- example: "2021-01-05T21:06:53.506400Z" ++ example: 2021-01-05T21:06:53.506400Z + last_seen_at: + type: string + format: date-time + description: | + Last time the user was seen. To access this field, you must have insights visible for your organization. See + [Insights](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). +- example: "2021-01-05T21:06:53.506400Z" ++ example: 2021-01-05T21:06:53.506400Z + last_desktop_version: + type: string + description: | + Last desktop version the user used. To access this field, you must have insights visible for your organization. See + [Insights](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). + example: 4.29.0 +- + org_member_paginated: + type: object + properties: +@@ -3779,7 +3817,7 @@ + date_joined: + type: string + format: date-time +- example: "2021-01-05T21:06:53.506400Z" ++ example: 2021-01-05T21:06:53.506400Z + full_name: + type: string + example: John Snow +@@ -4034,41 +4072,43 @@ + type: string + format: date-time + description: The creation date for the user as a RFC3339 formatted string. +- example: "2022-05-20T00:54:18Z" ++ example: 2022-05-20T00:54:18Z + lastModified: + type: string + format: date-time + description: The date the user was last modified as a RFC3339 formatted string. +- example: "2022-05-20T00:54:18Z" ++ example: 2022-05-20T00:54:18Z + orgAccessToken: + type: object + properties: + id: + type: string +- example: "a7a5ef25-8889-43a0-8cc7-f2a94268e861" ++ example: a7a5ef25-8889-43a0-8cc7-f2a94268e861 + label: + type: string +- example: "My organization token" ++ example: My organization token + created_by: + type: string +- example: "johndoe" ++ example: johndoe + is_active: + type: boolean + example: true + created_at: + type: string + format: date-time +- example: "2022-05-20T00:54:18Z" ++ example: 2022-05-20T00:54:18Z + expires_at: +- type: string ++ type: ++ - string ++ - "null" + format: date-time +- example: "2023-05-20T00:54:18Z" +- nullable: true ++ example: 2023-05-20T00:54:18Z + last_used_at: +- type: string ++ type: ++ - string ++ - "null" + format: date-time +- example: "2022-06-15T12:30:45Z" +- nullable: true ++ example: 2022-06-15T12:30:45Z + orgAccessTokenResource: + type: object + properties: +@@ -4077,12 +4117,11 @@ + enum: + - TYPE_REPO + - TYPE_ORG +- example: "TYPE_REPO" ++ example: TYPE_REPO + description: The type of resource +- required: true + path: + type: string +- example: "myorg/myrepo" ++ example: myorg/myrepo + description: | + The path of the resource. The format of this will change depending on the type of resource. + +@@ -4090,14 +4129,16 @@ + - Must be an existing repository name (e.g., "myorg/myrepo") + - Can use glob patterns (e.g., "myorg/*" for all repositories in the organization) + - Use "*/*/public" to reference all public repositories +- required: true + scopes: + type: array + description: The scopes this token has access to + items: + type: string +- example: "scope-image-pull" +- required: true ++ example: scope-image-pull ++ required: ++ - type ++ - path ++ - scopes + getOrgAccessTokensResponse: + type: object + properties: +@@ -4130,23 +4171,25 @@ + label: + type: string + description: Label for the access token +- example: "My organization token" +- required: true ++ example: My organization token + description: + type: string + description: Description of the access token +- example: "Token for CI/CD pipeline" ++ example: Token for CI/CD pipeline + resources: + type: array + description: Resources this token has access to + items: + $ref: "#/components/schemas/orgAccessTokenResource" + expires_at: +- type: string ++ type: ++ - string ++ - "null" + format: date-time + description: Expiration date for the token +- example: "2023-05-20T00:54:18Z" +- nullable: true ++ example: 2023-05-20T00:54:18Z ++ required: ++ - label + createOrgAccessTokenResponse: + type: object + allOf: +@@ -4154,33 +4197,35 @@ + properties: + id: + type: string +- example: "a7a5ef25-8889-43a0-8cc7-f2a94268e861" ++ example: a7a5ef25-8889-43a0-8cc7-f2a94268e861 + label: + type: string +- example: "My organization token" ++ example: My organization token + is_active: + type: boolean + example: true + created_at: + type: string + format: date-time +- example: "2022-05-20T00:54:18Z" ++ example: 2022-05-20T00:54:18Z + expires_at: +- type: string ++ type: ++ - string ++ - "null" + format: date-time +- example: "2023-05-20T00:54:18Z" +- nullable: true ++ example: 2023-05-20T00:54:18Z + last_used_at: +- type: string ++ type: ++ - string ++ - "null" + format: date-time +- example: "2022-06-15T12:30:45Z" +- nullable: true ++ example: 2022-06-15T12:30:45Z + - type: object + properties: + token: + type: string + description: The actual token value that can be used for authentication +- example: "dckr_oat_7awgM4jG5SQvxcvmNzhKj8PQjxo" ++ example: dckr_oat_7awgM4jG5SQvxcvmNzhKj8PQjxo + resources: + type: array + items: +@@ -4191,11 +4236,11 @@ + label: + type: string + description: Label for the access token +- example: "My organization token" ++ example: My organization token + description: + type: string + description: Description of the access token +- example: "Token for CI/CD pipeline" ++ example: Token for CI/CD pipeline + resources: + type: array + description: Resources this token has access to +@@ -4218,7 +4263,7 @@ + $ref: "#/components/schemas/orgAccessTokenResource" + team_repo: + allOf: +- - $ref: "#/components/responses/team_repo" ++ - $ref: "#/components/schemas/repository_info" + properties: + group_name: + type: string +@@ -4442,6 +4487,10 @@ + bearerSCIMAuth: + type: http + scheme: bearer ++ scimToken: ++ type: http ++ scheme: bearer ++ description: Use the SCIM provisioning token configured for the organization. + x-tagGroups: + - name: General + tags: +@@ -4462,3 +4511,5 @@ + - org-access-tokens + - groups + - invites ++jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base ++security: [] diff --git a/prototypes/api-docs/migrations/registry.json b/prototypes/api-docs/migrations/registry.json new file mode 100644 index 000000000000..35d8f50dffa6 --- /dev/null +++ b/prototypes/api-docs/migrations/registry.json @@ -0,0 +1,247 @@ +{ + "api": "registry", + "source": { + "id": "registry", + "product": "registry", + "title": "Registry", + "source": "content/reference/api/registry/latest.yaml", + "owner": "docker/docs (product authority to confirm)", + "manual": "/manuals/docker-hub/repos/", + "connection": "hosted", + "auth": "Follow the WWW-Authenticate challenge and obtain a repository-scoped registry token. This is separate from the Hub API token exchange.", + "guides": [ + "/reference/api/registry/auth.md" + ], + "sha256": "229198e078ee30400c0359311f5baaf23a1f80563a1c2e82834f17f2db0d9fd1" + }, + "convertedSha256": "3257829998629249bd9bd27a79996f922169e0c98677b67fb1dc87f565391a01", + "profile": "docker-docs-prototype-1", + "changes": [ + { + "pointer": "/jsonSchemaDialect", + "beforePresent": false, + "afterPresent": true, + "after": "https://spec.openapis.org/oas/3.1/dialect/base", + "id": "registry-03ee85af235e", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/jsonSchemaDialect" + }, + { + "pointer": "/openapi", + "beforePresent": true, + "afterPresent": true, + "before": "3.0.3", + "after": "3.2.0", + "id": "registry-71377657b6ae", + "stage": "oas32-header", + "classification": "mechanical conversion", + "rationale": "Adopt the common OpenAPI version and its selected schema dialect.", + "evidence": "API-DOCUMENTATION-ARCHITECTURE.md S1", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/openapi", + "destinationPointer": "/openapi" + }, + { + "pointer": "/tags", + "beforePresent": true, + "afterPresent": true, + "before": [ + { + "name": "overview", + "x-displayName": "Overview", + "description": "All endpoints in this API are prefixed by the version and repository name, for example:\n\n```\n/v2//\n```\n\nThis format provides structured access control and URI-based scoping of image operations.\n\nFor example, to interact with the `library/ubuntu` repository, use:\n\n```\n/v2/library/ubuntu/\n```\n\nRepository names must meet these requirements:\n1. Consist of path components matching `[a-z0-9]+(?:[._-][a-z0-9]+)*`\n2. If more than one component, they must be separated by `/`\n3. Full repository name must be fewer than 256 characters\n" + }, + { + "name": "authentication", + "x-displayName": "Authentication", + "description": "Specifies registry authentication.\n", + "externalDocs": { + "description": "Detailed authentication workflow and token usage", + "url": "https://docs.docker.com/reference/api/registry/auth/" + } + }, + { + "name": "Manifests", + "x-displayName": "Manifests", + "description": "Image manifests are JSON documents that describe an image: its configuration blob, the digests of each layer blob, and metadata such as media‑types and annotations.\n" + }, + { + "name": "Blobs", + "x-displayName": "Blobs", + "description": "Blobs are the binary objects referenced from manifests:\nthe config JSON and one or more compressed layer tarballs.\n" + }, + { + "name": "pull", + "x-displayName": "Pulling Images", + "description": "Pulling an image involves retrieving the manifest and downloading each of the image's layer blobs. This section outlines the general steps followed by a working example.\n\n1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/).\n2. [Get the image manifest](#operation/GetImageManifest).\n3. If the response in the previous step is a multi-architecture manifest list, you must do the following:\n - Parse the `manifests[]` array to locate the digest for your target platform (e.g., `linux/amd64`).\n - [Get the image manifest](#operation/GetImageManifest) using the located digest.\n4. [Check if the blob exists](#operation/CheckBlobExists) before downloading. The client should send a `HEAD` request for each layer digest.\n5. [Download each layer blob](#operation/GetBlob) using the digest obtained from the manifest. The client should send a `GET` request for each layer digest.\n\nThe following bash script example pulls `library/ubuntu:latest` from Docker Hub.\n\n```bash\n#!/bin/bash\n\n# Step 1: Get a bearer token\nTOKEN=$(curl -s \"https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull\" | jq -r .token)\n\n# Step 2: Get the image manifest. In this example, an image manifest list is returned.\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Accept: application/vnd.docker.distribution.manifest.list.v2+json\" \\\n https://registry-1.docker.io/v2/library/ubuntu/manifests/latest \\\n -o manifest-list.json\n\n# Step 3a: Parse the `manifests[]` array to locate the digest for your target platform (e.g., `linux/amd64`).\nIMAGE_MANIFEST_DIGEST=$(jq -r '.manifests[] | select(.platform.architecture == \"amd64\" and .platform.os == \"linux\") | .digest' manifest-list.json)\n\n# Step 3b: Get the platform-specific image manifest\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Accept: application/vnd.docker.distribution.manifest.v2+json\" \\\n https://registry-1.docker.io/v2/library/ubuntu/manifests/$IMAGE_MANIFEST_DIGEST \\\n -o manifest.json\n\n# Step 4: Send a HEAD request to check if the layer blob exists\nDIGEST=$(jq -r '.layers[0].digest' manifest.json)\ncurl -I -H \"Authorization: Bearer $TOKEN\" \\\n https://registry-1.docker.io/v2/library/ubuntu/blobs/$DIGEST\n\n# Step 5: Download the layer blob\ncurl -L -H \"Authorization: Bearer $TOKEN\" \\\n https://registry-1.docker.io/v2/library/ubuntu/blobs/$DIGEST\n```\n\nThis example pulls the manifest and the first layer for the `ubuntu:latest` image on the `linux/amd64` platform. Repeat steps 4 and 5 for each digest in the `.layers[]` array in the manifest.\n" + }, + { + "name": "push", + "x-displayName": "Pushing Images", + "description": "Pushing an image involves uploading any image blobs (such as the config or layers), and then uploading the manifest that references those blobs.\n\nThis section outlines the basic steps to push an image using the registry API.\n\n1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/)\n\n2. [Check if the blob exists](#operation/CheckBlobExists) using a `HEAD` request for each blob digest.\n\n3. If the blob does not exist, [upload the blob](#operation/CompleteBlobUpload) using a monolithic `PUT` request:\n - First, [initiate the upload](#operation/InitiateBlobUpload) with `POST`.\n - Then [upload and complete](#operation/CompleteBlobUpload) with `PUT`.\n\n **Note**: Alternatively, you can upload the blob in multiple chunks by using `PATCH` requests to send each chunk, followed by a final `PUT` request to complete the upload. This is known as a [chunked upload](#operation/UploadBlobChunk) and is useful for large blobs or when resuming interrupted uploads.\n\n\n4. [Upload the image manifest](#operation/PutImageManifest) using a `PUT` request to associate the config and layers.\n\nThe following bash script example pushes a dummy config blob and manifest to `yourusername/helloworld:latest` on Docker Hub. You can replace `yourusername` with your Docker Hub username and `dckr_pat` with your Docker Hub personal access token.\n\n```bash\n#!/bin/bash\n\nUSERNAME=yourusername\nPASSWORD=dckr_pat\nREPO=yourusername/helloworld\nTAG=latest\nCONFIG=config.json\nMIME_TYPE=application/vnd.docker.container.image.v1+json\n\n# Step 1: Get a bearer token\nTOKEN=$(curl -s -u \"$USERNAME:$PASSWORD\" \\\n\"https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO:push,pull\" \\\n| jq -r .token)\n\n# Create a dummy config blob and compute its digest\necho '{\"architecture\":\"amd64\",\"os\":\"linux\",\"config\":{},\"rootfs\":{\"type\":\"layers\",\"diff_ids\":[]}}' > $CONFIG\nDIGEST=\"sha256:$(sha256sum $CONFIG | awk '{print $1}')\"\n\n# Step 2: Check if the blob exists\nSTATUS=$(curl -s -o /dev/null -w \"%{http_code}\" -I \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://registry-1.docker.io/v2/$REPO/blobs/$DIGEST)\n\nif [ \"$STATUS\" != \"200\" ]; then\n # Step 3: Upload blob using monolithic upload\n LOCATION=$(curl -sI -X POST \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://registry-1.docker.io/v2/$REPO/blobs/uploads/ \\\n | grep -i Location | tr -d '\\r' | awk '{print $2}')\n\n curl -s -X PUT \"$LOCATION&digest=$DIGEST\" \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/octet-stream\" \\\n --data-binary @$CONFIG\nfi\n\n# Step 4: Upload the manifest that references the config blob\nMANIFEST=$(cat < **Note**\n>\n> Manifest deletion operations may experience latency and could return a `500 Internal Server Error` during deletion. The system automatically retries the deletion in the background, so the manifest will eventually be removed. You do not need to manually retry the request.\n\nThis section outlines the basic steps to delete an image using the registry API.\n\n1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/).\n2. [Get the manifest](#operation/GetImageManifest) using the image's tag.\n3. Retrieve the `Docker-Content-Digest` header from the manifest response. This digest uniquely identifies the manifest.\n4. [Delete the manifest](#operation/DeleteImageManifest) using a `DELETE` request and the digest.\n\nThe following bash script example deletes the `latest` tag from `yourusername/helloworld` on Docker Hub. Replace `yourusername` with your Docker Hub username and `dckr_pat` with your Docker Hub personal access token.\n\n```bash\n#!/bin/bash\n\nUSERNAME=yourusername\nPASSWORD=dckr_pat\nREPO=yourusername/helloworld\nTAG=latest\n\n# Step 1: Get a bearer token\nTOKEN=$(curl -s -u \"$USERNAME:$PASSWORD\" \\\n \"https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO:pull,push,delete\" \\\n | jq -r .token)\n\n# Step 2 and 3: Get the manifest and extract the digest from response headers\nDIGEST=$(curl -sI -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Accept: application/vnd.docker.distribution.manifest.v2+json\" \\\n https://registry-1.docker.io/v2/$REPO/manifests/$TAG \\\n | grep -i Docker-Content-Digest | tr -d '\\r' | awk '{print $2}')\n\necho \"Deleting manifest with digest: $DIGEST\"\n\n# Step 4: Delete the manifest by digest\ncurl -s -X DELETE \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://registry-1.docker.io/v2/$REPO/manifests/$DIGEST\n\necho \"Deleted image: $REPO@$DIGEST\"\n```\n\nThis example deletes the manifest for the `latest` tag. To fully delete all references to an image, ensure no other tags or referrers point to the same manifest digest.\n" + } + ], + "after": [ + { + "name": "overview", + "description": "All endpoints in this API are prefixed by the version and repository name, for example:\n\n```\n/v2//\n```\n\nThis format provides structured access control and URI-based scoping of image operations.\n\nFor example, to interact with the `library/ubuntu` repository, use:\n\n```\n/v2/library/ubuntu/\n```\n\nRepository names must meet these requirements:\n1. Consist of path components matching `[a-z0-9]+(?:[._-][a-z0-9]+)*`\n2. If more than one component, they must be separated by `/`\n3. Full repository name must be fewer than 256 characters\n", + "summary": "Overview", + "kind": "info" + }, + { + "name": "authentication", + "description": "Specifies registry authentication.\n", + "externalDocs": { + "description": "Detailed authentication workflow and token usage", + "url": "https://docs.docker.com/reference/api/registry/auth/" + }, + "summary": "Authentication", + "kind": "info" + }, + { + "name": "Manifests", + "description": "Image manifests are JSON documents that describe an image: its configuration blob, the digests of each layer blob, and metadata such as media‑types and annotations.\n", + "summary": "Manifests", + "kind": "nav" + }, + { + "name": "Blobs", + "description": "Blobs are the binary objects referenced from manifests:\nthe config JSON and one or more compressed layer tarballs.\n", + "summary": "Blobs", + "kind": "nav" + }, + { + "name": "pull", + "description": "Pulling an image involves retrieving the manifest and downloading each of the image's layer blobs. This section outlines the general steps followed by a working example.\n\n1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/).\n2. [Get the image manifest](#operation/GetImageManifest).\n3. If the response in the previous step is a multi-architecture manifest list, you must do the following:\n - Parse the `manifests[]` array to locate the digest for your target platform (e.g., `linux/amd64`).\n - [Get the image manifest](#operation/GetImageManifest) using the located digest.\n4. [Check if the blob exists](#operation/CheckBlobExists) before downloading. The client should send a `HEAD` request for each layer digest.\n5. [Download each layer blob](#operation/GetBlob) using the digest obtained from the manifest. The client should send a `GET` request for each layer digest.\n\nThe following bash script example pulls `library/ubuntu:latest` from Docker Hub.\n\n```bash\n#!/bin/bash\n\n# Step 1: Get a bearer token\nTOKEN=$(curl -s \"https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull\" | jq -r .token)\n\n# Step 2: Get the image manifest. In this example, an image manifest list is returned.\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Accept: application/vnd.docker.distribution.manifest.list.v2+json\" \\\n https://registry-1.docker.io/v2/library/ubuntu/manifests/latest \\\n -o manifest-list.json\n\n# Step 3a: Parse the `manifests[]` array to locate the digest for your target platform (e.g., `linux/amd64`).\nIMAGE_MANIFEST_DIGEST=$(jq -r '.manifests[] | select(.platform.architecture == \"amd64\" and .platform.os == \"linux\") | .digest' manifest-list.json)\n\n# Step 3b: Get the platform-specific image manifest\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Accept: application/vnd.docker.distribution.manifest.v2+json\" \\\n https://registry-1.docker.io/v2/library/ubuntu/manifests/$IMAGE_MANIFEST_DIGEST \\\n -o manifest.json\n\n# Step 4: Send a HEAD request to check if the layer blob exists\nDIGEST=$(jq -r '.layers[0].digest' manifest.json)\ncurl -I -H \"Authorization: Bearer $TOKEN\" \\\n https://registry-1.docker.io/v2/library/ubuntu/blobs/$DIGEST\n\n# Step 5: Download the layer blob\ncurl -L -H \"Authorization: Bearer $TOKEN\" \\\n https://registry-1.docker.io/v2/library/ubuntu/blobs/$DIGEST\n```\n\nThis example pulls the manifest and the first layer for the `ubuntu:latest` image on the `linux/amd64` platform. Repeat steps 4 and 5 for each digest in the `.layers[]` array in the manifest.\n", + "summary": "Pulling Images", + "kind": "info" + }, + { + "name": "push", + "description": "Pushing an image involves uploading any image blobs (such as the config or layers), and then uploading the manifest that references those blobs.\n\nThis section outlines the basic steps to push an image using the registry API.\n\n1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/)\n\n2. [Check if the blob exists](#operation/CheckBlobExists) using a `HEAD` request for each blob digest.\n\n3. If the blob does not exist, [upload the blob](#operation/CompleteBlobUpload) using a monolithic `PUT` request:\n - First, [initiate the upload](#operation/InitiateBlobUpload) with `POST`.\n - Then [upload and complete](#operation/CompleteBlobUpload) with `PUT`.\n\n **Note**: Alternatively, you can upload the blob in multiple chunks by using `PATCH` requests to send each chunk, followed by a final `PUT` request to complete the upload. This is known as a [chunked upload](#operation/UploadBlobChunk) and is useful for large blobs or when resuming interrupted uploads.\n\n\n4. [Upload the image manifest](#operation/PutImageManifest) using a `PUT` request to associate the config and layers.\n\nThe following bash script example pushes a dummy config blob and manifest to `yourusername/helloworld:latest` on Docker Hub. You can replace `yourusername` with your Docker Hub username and `dckr_pat` with your Docker Hub personal access token.\n\n```bash\n#!/bin/bash\n\nUSERNAME=yourusername\nPASSWORD=dckr_pat\nREPO=yourusername/helloworld\nTAG=latest\nCONFIG=config.json\nMIME_TYPE=application/vnd.docker.container.image.v1+json\n\n# Step 1: Get a bearer token\nTOKEN=$(curl -s -u \"$USERNAME:$PASSWORD\" \\\n\"https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO:push,pull\" \\\n| jq -r .token)\n\n# Create a dummy config blob and compute its digest\necho '{\"architecture\":\"amd64\",\"os\":\"linux\",\"config\":{},\"rootfs\":{\"type\":\"layers\",\"diff_ids\":[]}}' > $CONFIG\nDIGEST=\"sha256:$(sha256sum $CONFIG | awk '{print $1}')\"\n\n# Step 2: Check if the blob exists\nSTATUS=$(curl -s -o /dev/null -w \"%{http_code}\" -I \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://registry-1.docker.io/v2/$REPO/blobs/$DIGEST)\n\nif [ \"$STATUS\" != \"200\" ]; then\n # Step 3: Upload blob using monolithic upload\n LOCATION=$(curl -sI -X POST \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://registry-1.docker.io/v2/$REPO/blobs/uploads/ \\\n | grep -i Location | tr -d '\\r' | awk '{print $2}')\n\n curl -s -X PUT \"$LOCATION&digest=$DIGEST\" \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/octet-stream\" \\\n --data-binary @$CONFIG\nfi\n\n# Step 4: Upload the manifest that references the config blob\nMANIFEST=$(cat < **Note**\n>\n> Manifest deletion operations may experience latency and could return a `500 Internal Server Error` during deletion. The system automatically retries the deletion in the background, so the manifest will eventually be removed. You do not need to manually retry the request.\n\nThis section outlines the basic steps to delete an image using the registry API.\n\n1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/).\n2. [Get the manifest](#operation/GetImageManifest) using the image's tag.\n3. Retrieve the `Docker-Content-Digest` header from the manifest response. This digest uniquely identifies the manifest.\n4. [Delete the manifest](#operation/DeleteImageManifest) using a `DELETE` request and the digest.\n\nThe following bash script example deletes the `latest` tag from `yourusername/helloworld` on Docker Hub. Replace `yourusername` with your Docker Hub username and `dckr_pat` with your Docker Hub personal access token.\n\n```bash\n#!/bin/bash\n\nUSERNAME=yourusername\nPASSWORD=dckr_pat\nREPO=yourusername/helloworld\nTAG=latest\n\n# Step 1: Get a bearer token\nTOKEN=$(curl -s -u \"$USERNAME:$PASSWORD\" \\\n \"https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO:pull,push,delete\" \\\n | jq -r .token)\n\n# Step 2 and 3: Get the manifest and extract the digest from response headers\nDIGEST=$(curl -sI -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Accept: application/vnd.docker.distribution.manifest.v2+json\" \\\n https://registry-1.docker.io/v2/$REPO/manifests/$TAG \\\n | grep -i Docker-Content-Digest | tr -d '\\r' | awk '{print $2}')\n\necho \"Deleting manifest with digest: $DIGEST\"\n\n# Step 4: Delete the manifest by digest\ncurl -s -X DELETE \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://registry-1.docker.io/v2/$REPO/manifests/$DIGEST\n\necho \"Deleted image: $REPO@$DIGEST\"\n```\n\nThis example deletes the manifest for the `latest` tag. To fully delete all references to an image, ensure no other tags or referrers point to the same manifest digest.\n", + "summary": "Deleting Images", + "kind": "info" + } + ], + "id": "registry-8d93cf25f3e7", + "stage": "editorial-metadata", + "classification": "editorial completion", + "rationale": "Supply conservative operation descriptions and stable IDs; declare primary navigation tags without changing endpoint behavior.", + "evidence": "Existing operation summaries, paths, and tags", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/tags", + "destinationPointer": "/tags" + }, + { + "pointer": "/components", + "beforePresent": false, + "afterPresent": true, + "after": { + "securitySchemes": { + "registryToken": { + "type": "http", + "scheme": "bearer", + "description": "Follow the WWW-Authenticate challenge and obtain a repository-scoped registry token. This is separate from the Hub API token exchange." + } + } + }, + "id": "registry-28462495ac89", + "stage": "registry-version-auth-assumption", + "classification": "provisional assumption", + "rationale": "Use protocol version 2 as provisional info.version and declare challenge-acquired bearer access. Confirm anonymous/public access alternatives and version identity with Hub owners.", + "evidence": "Registry description and content/reference/api/registry/auth.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/components" + }, + { + "pointer": "/info/version", + "beforePresent": false, + "afterPresent": true, + "after": "2", + "id": "registry-4d1e2c3e182a", + "stage": "registry-version-auth-assumption", + "classification": "provisional assumption", + "rationale": "Use protocol version 2 as provisional info.version and declare challenge-acquired bearer access. Confirm anonymous/public access alternatives and version identity with Hub owners.", + "evidence": "Registry description and content/reference/api/registry/auth.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/info/version" + }, + { + "pointer": "/security", + "beforePresent": false, + "afterPresent": true, + "after": [ + { + "registryToken": [] + } + ], + "id": "registry-ccc57ca992b3", + "stage": "registry-version-auth-assumption", + "classification": "provisional assumption", + "rationale": "Use protocol version 2 as provisional info.version and declare challenge-acquired bearer access. Confirm anonymous/public access alternatives and version identity with Hub owners.", + "evidence": "Registry description and content/reference/api/registry/auth.md", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": null, + "destinationPointer": "/security" + }, + { + "pointer": "/paths/~1v2~1{name}~1blobs~1{digest}/head/responses/200/content", + "beforePresent": true, + "afterPresent": false, + "before": { + "application/json": { + "examples": { + "blob-check-request": { + "summary": "Sample request", + "value": { + "method": "HEAD", + "url": "/v2/library/ubuntu/blobs/sha256:abc123def4567890...", + "headers": { + "Authorization": "Bearer ", + "Accept": "*/*" + } + } + }, + "blob-check-response": { + "summary": "Sample 200 response headers", + "value": { + "status": "200 OK", + "headers": { + "Docker-Content-Digest": "sha256:abc123def4567890...", + "Content-Length": 32654, + "Content-Type": "application/octet-stream" + } + } + } + } + } + }, + "id": "registry-585e6c6be138", + "stage": "head-response-bodies", + "classification": "evidence-backed correction", + "rationale": "HEAD responses transfer headers without a response body. Preserve headers and status codes; remove declared content from HEAD responses.", + "evidence": "RFC 9110 section 9.3.2", + "owner": "docker/docs (product authority to confirm)", + "sourcePointer": "/paths/~1v2~1{name}~1blobs~1{digest}/head/responses/200/content", + "destinationPointer": null + } + ] +} diff --git a/prototypes/api-docs/migrations/registry.patch b/prototypes/api-docs/migrations/registry.patch new file mode 100644 index 000000000000..6335a9c0a28a --- /dev/null +++ b/prototypes/api-docs/migrations/registry.patch @@ -0,0 +1,606 @@ +--- original/registry.yaml ++++ converted/registry.yaml +@@ -1,4 +1,4 @@ +-openapi: 3.0.3 ++openapi: 3.2.0 + info: + title: Supported registry API for Docker Hub + description: | +@@ -11,14 +11,13 @@ + It focuses on pulling, pushing, and deleting images. It does not cover the full OCI Distribution Specification. + + For the complete OCI specification, see [OCI Distribution Specification](https://github.com/opencontainers/distribution-spec). ++ version: "2" + servers: + - description: Docker Hub registry API + x-audience: public + url: https://registry-1.docker.io +- + tags: + - name: overview +- x-displayName: Overview + description: | + All endpoints in this API are prefixed by the version and repository name, for example: + +@@ -38,29 +37,28 @@ + 1. Consist of path components matching `[a-z0-9]+(?:[._-][a-z0-9]+)*` + 2. If more than one component, they must be separated by `/` + 3. Full repository name must be fewer than 256 characters +- +- ++ summary: Overview ++ kind: info + - name: authentication +- x-displayName: Authentication + description: | + Specifies registry authentication. + externalDocs: + description: Detailed authentication workflow and token usage + url: https://docs.docker.com/reference/api/registry/auth/ +- ++ summary: Authentication ++ kind: info + - name: Manifests +- x-displayName: Manifests + description: | + Image manifests are JSON documents that describe an image: its configuration blob, the digests of each layer blob, and metadata such as media‑types and annotations. +- ++ summary: Manifests ++ kind: nav + - name: Blobs +- x-displayName: Blobs + description: | + Blobs are the binary objects referenced from manifests: + the config JSON and one or more compressed layer tarballs. +- ++ summary: Blobs ++ kind: nav + - name: pull +- x-displayName: Pulling Images + description: | + Pulling an image involves retrieving the manifest and downloading each of the image's layer blobs. This section outlines the general steps followed by a working example. + +@@ -79,94 +77,93 @@ + + # Step 1: Get a bearer token + TOKEN=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull" | jq -r .token) +- ++ + # Step 2: Get the image manifest. In this example, an image manifest list is returned. + curl -s -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.list.v2+json" \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/latest \ + -o manifest-list.json +- ++ + # Step 3a: Parse the `manifests[]` array to locate the digest for your target platform (e.g., `linux/amd64`). + IMAGE_MANIFEST_DIGEST=$(jq -r '.manifests[] | select(.platform.architecture == "amd64" and .platform.os == "linux") | .digest' manifest-list.json) +- ++ + # Step 3b: Get the platform-specific image manifest + curl -s -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/$IMAGE_MANIFEST_DIGEST \ + -o manifest.json +- ++ + # Step 4: Send a HEAD request to check if the layer blob exists + DIGEST=$(jq -r '.layers[0].digest' manifest.json) + curl -I -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/$DIGEST +- ++ + # Step 5: Download the layer blob + curl -L -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/$DIGEST + ``` +- +- This example pulls the manifest and the first layer for the `ubuntu:latest` image on the `linux/amd64` platform. Repeat steps 4 and 5 for each digest in the `.layers[]` array in the manifest. +- + ++ This example pulls the manifest and the first layer for the `ubuntu:latest` image on the `linux/amd64` platform. Repeat steps 4 and 5 for each digest in the `.layers[]` array in the manifest. ++ summary: Pulling Images ++ kind: info + - name: push +- x-displayName: Pushing Images + description: | + Pushing an image involves uploading any image blobs (such as the config or layers), and then uploading the manifest that references those blobs. +- ++ + This section outlines the basic steps to push an image using the registry API. +- ++ + 1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/) +- ++ + 2. [Check if the blob exists](#operation/CheckBlobExists) using a `HEAD` request for each blob digest. +- ++ + 3. If the blob does not exist, [upload the blob](#operation/CompleteBlobUpload) using a monolithic `PUT` request: + - First, [initiate the upload](#operation/InitiateBlobUpload) with `POST`. + - Then [upload and complete](#operation/CompleteBlobUpload) with `PUT`. + + **Note**: Alternatively, you can upload the blob in multiple chunks by using `PATCH` requests to send each chunk, followed by a final `PUT` request to complete the upload. This is known as a [chunked upload](#operation/UploadBlobChunk) and is useful for large blobs or when resuming interrupted uploads. + +- ++ + 4. [Upload the image manifest](#operation/PutImageManifest) using a `PUT` request to associate the config and layers. +- ++ + The following bash script example pushes a dummy config blob and manifest to `yourusername/helloworld:latest` on Docker Hub. You can replace `yourusername` with your Docker Hub username and `dckr_pat` with your Docker Hub personal access token. +- ++ + ```bash + #!/bin/bash +- ++ + USERNAME=yourusername + PASSWORD=dckr_pat + REPO=yourusername/helloworld + TAG=latest + CONFIG=config.json + MIME_TYPE=application/vnd.docker.container.image.v1+json +- ++ + # Step 1: Get a bearer token + TOKEN=$(curl -s -u "$USERNAME:$PASSWORD" \ + "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO:push,pull" \ + | jq -r .token) +- ++ + # Create a dummy config blob and compute its digest + echo '{"architecture":"amd64","os":"linux","config":{},"rootfs":{"type":"layers","diff_ids":[]}}' > $CONFIG + DIGEST="sha256:$(sha256sum $CONFIG | awk '{print $1}')" +- ++ + # Step 2: Check if the blob exists + STATUS=$(curl -s -o /dev/null -w "%{http_code}" -I \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/$REPO/blobs/$DIGEST) +- ++ + if [ "$STATUS" != "200" ]; then + # Step 3: Upload blob using monolithic upload + LOCATION=$(curl -sI -X POST \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/$REPO/blobs/uploads/ \ + | grep -i Location | tr -d '\r' | awk '{print $2}') +- ++ + curl -s -X PUT "$LOCATION&digest=$DIGEST" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @$CONFIG + fi +- ++ + # Step 4: Upload the manifest that references the config blob + MANIFEST=$(cat <` header. +- + x-codeSamples: + - lang: Bash + label: cURL +@@ -300,7 +296,7 @@ + required: false + description: | + Media type(s) the client supports for the manifest. +- ++ + The registry supports the following media types: + - application/vnd.docker.distribution.manifest.v2+json + - application/vnd.docker.distribution.manifest.list.v2+json +@@ -308,7 +304,6 @@ + - application/vnd.oci.image.index.v1+json + schema: + type: string +- + responses: + "200": + description: Manifest fetched successfully. +@@ -367,28 +362,19 @@ + docker-manifest: + summary: Docker image manifest (schema v2) + value: +- { +- "schemaVersion": 2, +- "mediaType": "application/vnd.docker.distribution.manifest.v2+json", +- "config": { +- "mediaType": "application/vnd.docker.container.image.v1+json", +- "size": 7023, +- "digest": "sha256:123456abcdef..." +- }, +- "layers": [ +- { +- "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", +- "size": 32654, +- "digest": "sha256:abcdef123456..." +- }, +- { +- "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", +- "size": 16724, +- "digest": "sha256:7890abcdef12..." +- } +- ] +- } +- ++ schemaVersion: 2 ++ mediaType: application/vnd.docker.distribution.manifest.v2+json ++ config: ++ mediaType: application/vnd.docker.container.image.v1+json ++ size: 7023 ++ digest: sha256:123456abcdef... ++ layers: ++ - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip ++ size: 32654 ++ digest: sha256:abcdef123456... ++ - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip ++ size: 16724 ++ digest: sha256:7890abcdef12... + "400": + description: Invalid name or reference. + "401": +@@ -399,8 +385,6 @@ + description: Repository or manifest not found. + "429": + description: Too many requests. +- +- + put: + tags: + - Manifests +@@ -459,7 +443,6 @@ + schema: + type: string + example: application/vnd.docker.distribution.manifest.v2+json +- + requestBody: + required: true + content: +@@ -512,28 +495,20 @@ + digest: + type: string + example: sha256:abcdef123456... +- + examples: + sample-manifest: + summary: Sample Docker image manifest (schema v2) + value: +- { +- "schemaVersion": 2, +- "mediaType": "application/vnd.docker.distribution.manifest.v2+json", +- "config": { +- "mediaType": "application/vnd.docker.container.image.v1+json", +- "size": 7023, +- "digest": "sha256:123456abcdef..." +- }, +- "layers": [ +- { +- "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", +- "size": 32654, +- "digest": "sha256:abcdef123456..." +- } +- ] +- } +- ++ schemaVersion: 2 ++ mediaType: application/vnd.docker.distribution.manifest.v2+json ++ config: ++ mediaType: application/vnd.docker.container.image.v1+json ++ size: 7023 ++ digest: sha256:123456abcdef... ++ layers: ++ - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip ++ size: 32654 ++ digest: sha256:abcdef123456... + responses: + "201": + description: Manifest created successfully. +@@ -578,7 +553,6 @@ + - Determining the digest or size of a manifest before downloading or deleting + + This endpoint requires authentication with pull scope. +- + parameters: + - name: name + in: path +@@ -642,12 +616,12 @@ + schema: + type: string + example: application/vnd.docker.distribution.manifest.v2+json +- "404": +- description: Manifest not found. + "401": + description: Authentication required. + "403": + description: Access denied. ++ "404": ++ description: Manifest not found. + "429": + description: Too many requests. + delete: +@@ -733,7 +707,6 @@ + curl -i -X POST \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/ +- + - lang: Bash + label: cURL (Cross-Repository Blob Mount) + source: | +@@ -741,7 +714,6 @@ + curl -i -X POST \ + -H "Authorization: Bearer $TOKEN" \ + "https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/?mount=sha256:abc123def456...&from=library/busybox" +- + parameters: + - name: name + in: path +@@ -770,7 +742,6 @@ + schema: + type: string + description: Bearer token for authentication with `push` scope +- + responses: + "201": + description: Blob successfully mounted from another repository. +@@ -865,7 +836,6 @@ + schema: + type: string + example: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6... +- + responses: + "200": + description: Blob exists +@@ -885,32 +855,12 @@ + schema: + type: string + example: application/octet-stream +- content: +- application/json: +- examples: +- blob-check-request: +- summary: Sample request +- value: +- method: HEAD +- url: /v2/library/ubuntu/blobs/sha256:abc123def4567890... +- headers: +- Authorization: Bearer +- Accept: '*/*' +- blob-check-response: +- summary: Sample 200 response headers +- value: +- status: 200 OK +- headers: +- Docker-Content-Digest: sha256:abc123def4567890... +- Content-Length: 32654 +- Content-Type: application/octet-stream +- +- "404": +- description: Blob not found + "401": + description: Authentication required + "403": + description: Access denied ++ "404": ++ description: Blob not found + "429": + description: Too many requests + get: +@@ -957,7 +907,6 @@ + type: string + description: Bearer token with pull scope + example: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6... +- + responses: + "200": + description: Blob content returned directly +@@ -985,8 +934,7 @@ + examples: + small-layer: + summary: Example binary blob (gzipped tar layer) +- value: "" +- ++ value: + "307": + description: Temporary redirect to blob location + headers: +@@ -1031,7 +979,7 @@ + in: path + required: true + description: Repository Name +- example : library/ubuntu ++ example: library/ubuntu + schema: + type: string + - name: uuid +@@ -1047,7 +995,6 @@ + schema: + type: string + example: Bearer eyJhbGciOi... +- + responses: + "204": + description: Upload in progress. No body is returned. +@@ -1075,7 +1022,6 @@ + description: Upload session not found + "429": + description: Too many requests +- + put: + tags: + - Blobs +@@ -1089,7 +1035,6 @@ + This endpoint supports: + - Monolithic uploads (upload entire blob in this request) + - Finalizing chunked uploads (last chunk plus `digest`) +- + x-codeSamples: + - lang: Bash + label: cURL +@@ -1100,8 +1045,6 @@ + -H "Content-Type: application/octet-stream" \ + --data-binary @layer.tar.gz \ + "https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123?digest=sha256:abcd1234..." +- +- + parameters: + - name: name + in: path +@@ -1130,7 +1073,6 @@ + schema: + type: string + example: Bearer eyJhbGciOi... +- + requestBody: + required: false + content: +@@ -1141,8 +1083,7 @@ + examples: + layer-upload: + summary: Layer tarball blob +- value: "" +- ++ value: + responses: + "201": + description: Upload completed successfully +@@ -1174,7 +1115,6 @@ + description: Requested range not satisfiable (if used in chunked mode) + "429": + description: Too many requests +- + patch: + tags: + - Blobs +@@ -1229,7 +1169,6 @@ + type: string + example: bytes 0-65535 + description: Optional. Byte range of the chunk being sent +- + requestBody: + required: true + content: +@@ -1240,8 +1179,7 @@ + examples: + chunk-0: + summary: Upload chunk 0 of a blob +- value: "" +- ++ value: + responses: + "202": + description: Chunk accepted and stored +@@ -1288,7 +1226,6 @@ + - The client wants to clean up unused upload sessions + + After cancellation, the UUID is no longer valid and a new `POST` must be issued to restart the upload. +- + x-codeSamples: + - lang: Bash + label: cURL +@@ -1297,7 +1234,6 @@ + curl -X DELETE \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123` +- + parameters: + - name: name + in: path +@@ -1319,7 +1255,6 @@ + schema: + type: string + example: Bearer eyJhbGciOi... +- + responses: + "204": + description: Upload session cancelled successfully. No body is returned. +@@ -1337,8 +1272,6 @@ + description: Upload session not found + "429": + description: Too many requests +- +- + x-tagGroups: + - name: General + tags: +@@ -1351,3 +1284,12 @@ + tags: + - Manifests + - Blobs ++jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base ++components: ++ securitySchemes: ++ registryToken: ++ type: http ++ scheme: bearer ++ description: Follow the WWW-Authenticate challenge and obtain a repository-scoped registry token. This is separate from the Hub API token exchange. ++security: ++ - registryToken: [] diff --git a/prototypes/api-docs/operation-ids.json b/prototypes/api-docs/operation-ids.json new file mode 100644 index 000000000000..ede766188d3e --- /dev/null +++ b/prototypes/api-docs/operation-ids.json @@ -0,0 +1,42 @@ +{ + "hub:GET /v2/access-tokens": "getV2AccessTokens", + "hub:POST /v2/access-tokens": "postV2AccessTokens", + "hub:GET /v2/access-tokens/{uuid}": "getV2AccessTokensByUuid", + "hub:DELETE /v2/access-tokens/{uuid}": "deleteV2AccessTokensByUuid", + "hub:PATCH /v2/access-tokens/{uuid}": "patchV2AccessTokensByUuid", + "hub:GET /v2/orgs/{name}/settings": "getV2OrgsByNameSettings", + "hub:PUT /v2/orgs/{name}/settings": "putV2OrgsByNameSettings", + "hub:GET /v2/orgs/{name}/access-tokens": "getV2OrgsByNameAccessTokens", + "hub:POST /v2/orgs/{name}/access-tokens": "postV2OrgsByNameAccessTokens", + "hub:GET /v2/orgs/{org_name}/access-tokens/{access_token_id}": "getV2OrgsByOrgNameAccessTokensByAccessTokenId", + "hub:DELETE /v2/orgs/{org_name}/access-tokens/{access_token_id}": "deleteV2OrgsByOrgNameAccessTokensByAccessTokenId", + "hub:PATCH /v2/orgs/{org_name}/access-tokens/{access_token_id}": "patchV2OrgsByOrgNameAccessTokensByAccessTokenId", + "hub:HEAD /v2/namespaces/{namespace}/repositories/{repository}/tags": "headV2NamespacesByNamespaceRepositoriesByRepositoryTags", + "hub:HEAD /v2/namespaces/{namespace}/repositories/{repository}/tags/{tag}": "headV2NamespacesByNamespaceRepositoriesByRepositoryTagsByTag", + "hub:GET /v2/orgs/{org_name}/members": "getV2OrgsByOrgNameMembers", + "hub:GET /v2/orgs/{org_name}/members/export": "getV2OrgsByOrgNameMembersExport", + "hub:PUT /v2/orgs/{org_name}/members/{username}": "putV2OrgsByOrgNameMembersByUsername", + "hub:DELETE /v2/orgs/{org_name}/members/{username}": "deleteV2OrgsByOrgNameMembersByUsername", + "hub:GET /v2/orgs/{org_name}/invites": "getV2OrgsByOrgNameInvites", + "hub:GET /v2/orgs/{org_name}/groups": "getV2OrgsByOrgNameGroups", + "hub:POST /v2/orgs/{org_name}/groups": "postV2OrgsByOrgNameGroups", + "hub:GET /v2/orgs/{org_name}/groups/{group_name}": "getV2OrgsByOrgNameGroupsByGroupName", + "hub:PUT /v2/orgs/{org_name}/groups/{group_name}": "putV2OrgsByOrgNameGroupsByGroupName", + "hub:DELETE /v2/orgs/{org_name}/groups/{group_name}": "deleteV2OrgsByOrgNameGroupsByGroupName", + "hub:PATCH /v2/orgs/{org_name}/groups/{group_name}": "patchV2OrgsByOrgNameGroupsByGroupName", + "hub:GET /v2/orgs/{org_name}/groups/{group_name}/members": "getV2OrgsByOrgNameGroupsByGroupNameMembers", + "hub:POST /v2/orgs/{org_name}/groups/{group_name}/members": "postV2OrgsByOrgNameGroupsByGroupNameMembers", + "hub:DELETE /v2/orgs/{org_name}/groups/{group_name}/members/{username}": "deleteV2OrgsByOrgNameGroupsByGroupNameMembersByUsername", + "hub:DELETE /v2/invites/{id}": "deleteV2InvitesById", + "hub:PATCH /v2/invites/{id}/resend": "patchV2InvitesByIdResend", + "hub:POST /v2/invites/bulk": "postV2InvitesBulk", + "hub:GET /v2/scim/2.0/ServiceProviderConfig": "getV2Scim20ServiceProviderConfig", + "hub:GET /v2/scim/2.0/ResourceTypes": "getV2Scim20ResourceTypes", + "hub:GET /v2/scim/2.0/ResourceTypes/{name}": "getV2Scim20ResourceTypesByName", + "hub:GET /v2/scim/2.0/Schemas": "getV2Scim20Schemas", + "hub:GET /v2/scim/2.0/Schemas/{id}": "getV2Scim20SchemasById", + "hub:GET /v2/scim/2.0/Users": "getV2Scim20Users", + "hub:POST /v2/scim/2.0/Users": "postV2Scim20Users", + "hub:GET /v2/scim/2.0/Users/{id}": "getV2Scim20UsersById", + "hub:PUT /v2/scim/2.0/Users/{id}": "putV2Scim20UsersById" +} diff --git a/prototypes/api-docs/original/dvp.yaml b/prototypes/api-docs/original/dvp.yaml new file mode 100644 index 000000000000..01811d55bc7c --- /dev/null +++ b/prototypes/api-docs/original/dvp.yaml @@ -0,0 +1,696 @@ +openapi: 3.0.0 +info: + title: DVP Data API + version: 1.0.0 + x-logo: + url: https://docs.docker.com/assets/images/logo-docker-main.png + href: /reference + description: | + The Docker DVP Data API allows [Docker Verified Publishers](https://docs.docker.com/docker-hub/publish/) to view image pull analytics data for their namespaces. Analytics data can be retrieved in a CSV as raw data, or in a summary format. + + #### Summary data + + In your summary data CSV, you will have access to the data points listed below. You can request summary data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month). + + There are two levels of summary data: + + - Repository-level, a summary of every namespace and repository + - Tag- or digest-level, a summary of every namespace, repository, and reference + (tag or digest) + + The summary data formats contain the following data points: + + - Unique IP address count + - Pulls by tag count + - Pulls by digest count + - Version check count + + #### Raw data + + In your raw data CSV you will have access to the data points listed below. You can request raw data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month). **Note:** each action is represented as a single row. + + - Type (industry) + - Host (cloud provider) + - Country (geolocation) + - Timestamp + - Namespace + - Repository + - Reference (digest is always included, tag is provided when available) + - HTTP request method + - Action, one of the following: + - Pull by tag + - Pull by digest + - Version check + - User-Agent + +servers: + - url: https://hub.docker.com/api/publisher/analytics/v1 +security: + - HubAuth: [] + +features.openapi: + schemaDefinitionsTagName: Schemas + +tags: + - name: authentication + x-displayName: Authentication Endpoints + - name: namespaces + x-displayName: Namespace data + - name: discovery + x-displayName: Discovery + - name: responseDataFile + x-displayName: ResponseDataFile + description: | + + - name: yearModel + x-displayName: Year Data Model + description: | + + - name: monthModel + x-displayName: Month Data Model + description: | + + - name: weekModel + x-displayName: Week Data Model + description: | + + +x-tagGroups: + - name: API + tags: + - authentication + - discovery + - namespaces + - name: Models + tags: + - responseDataFile + - yearModel + - monthModel + - weekModel + +paths: + /v2/users/login: + security: [] + servers: + - url: https://hub.docker.com + post: + security: [] + tags: + - authentication + summary: Create an authentication token + operationId: PostUsersLogin + description: | + Creates and returns a bearer token in JWT format that you can use to + authenticate with Docker Hub APIs. + + The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. + + Most Docker Hub APIs require this token either to consume or to get detailed information. For example, to list images in a private repository. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/UsersLoginRequest" + description: Login details. + required: true + responses: + 200: + description: Authentication successful + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" + 401: + description: Authentication failed or second factor required + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginErrorResponse" + /v2/users/2fa-login: + security: [] + servers: + - url: https://hub.docker.com + post: + security: [] + tags: + - authentication + summary: Second factor authentication + operationId: PostUsers2FALogin + description: | + When a user has 2FA enabled, this is the second call to perform after + `/v2/users/login` call. + + Creates and returns a bearer token in JWT format that you can use to authenticate with Docker Hub APIs. + + The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. + + Most Docker Hub APIs require this token either to consume or to get detailed information. For example, to list images in a private repository. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/Users2FALoginRequest" + description: Login details. + required: true + responses: + 200: + description: Authentication successful + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" + 401: + description: Authentication failed or second factor required + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsers2FALoginErrorResponse" + + + /: + get: + tags: [discovery] + summary: Get namespaces and repos + description: Gets a list of your namespaces and repos which have data available. + operationId: getNamespaces + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/NamespaceData' + /namespaces: + get: + tags: [discovery] + summary: Get user's namespaces + description: Get metadata associated with the namespaces the user has access to, including extra repos associated with the namespaces. + operationId: getUserNamespaces + responses: + '200': + description: Success + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/NamespaceMetadata' + '401': + description: Authentication failed or second factor required + /namespaces/{namespace}: + get: + tags: [discovery] + summary: Get namespace + description: Gets metadata associated with specified namespace, including extra repos associated with the namespace. + operationId: getNamespace + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/NamespaceMetadata' + /namespaces/{namespace}/pulls: + get: + tags: [namespaces] + summary: Get pull data + description: Gets pulls for the given namespace. + operationId: getNamespacePulls + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + - in: query + name: timespan + schema: + $ref: '#/components/schemas/TimespanType' + required: false + description: Timespan type for fetching data + - in: query + name: period + schema: + $ref: '#/components/schemas/PeriodType' + required: false + description: Relative period of the period to fetch data + - in: query + name: group + schema: + $ref: '#/components/schemas/GroupType' + required: false + description: Field to group the data by + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/PullData' + '404': + description: Not found - namespace doesn't exist or user does not have permission to access it + /namespaces/{namespace}/repos/{repo}/pulls: + get: + tags: [namespaces] + summary: Get pull data + description: Gets pulls for the given repo. + operationId: getRepoPulls + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + - in: path + name: repo + schema: + type: string + required: true + description: Repository to fetch data for + - in: query + name: timespan + schema: + $ref: '#/components/schemas/TimespanType' + required: false + description: Timespan type for fetching data + - in: query + name: period + schema: + $ref: '#/components/schemas/PeriodType' + required: false + description: Relative period of the period to fetch data + - in: query + name: group + schema: + $ref: '#/components/schemas/GroupType' + required: false + description: Field to group the data by + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/PullData' + '404': + description: Not found - repo doesn't exist or user does not have permission to access it + /namespaces/{namespace}/pulls/exports/years: + get: + tags: [namespaces] + summary: Get years with data + description: Gets a list of years that have data for the given namespace. + operationId: getNamespaceYears + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/YearData' + /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}: + get: + tags: [namespaces] + summary: Get timespans with data + description: Gets a list of timespans of the given type that have data for the given namespace and year. + operationId: getNamespaceTimespans + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + - in: path + name: year + schema: + type: integer + required: true + description: Year to fetch data for + - in: path + name: timespantype + schema: + $ref: '#/components/schemas/TimespanType' + required: true + description: Type of timespan to fetch data for + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/TimespanData' + /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}/{timespan}: + get: + tags: [namespaces] + summary: Get namespace metadata for timespan + description: Gets info about data for the given namespace and timespan. + operationId: getNamespaceTimespanMetadata + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + - in: path + name: year + schema: + type: integer + required: true + description: Year to fetch data for + - in: path + name: timespantype + schema: + $ref: '#/components/schemas/TimespanType' + required: true + description: Type of timespan to fetch data for + - in: path + name: timespan + schema: + type: integer + required: true + description: Timespan to fetch data for + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/TimespanModel' + '404': + description: Not Found + /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}/{timespan}/{dataview}: + get: + tags: [namespaces] + summary: Get namespace data for timespan + description: Gets a list of URLs that can be used to download the pull data for the given namespace and timespan. + operationId: getNamespaceDataByTimespan + parameters: + - in: path + name: namespace + schema: + type: string + required: true + description: Namespace to fetch data for + - in: path + name: year + schema: + type: integer + required: true + description: Year to fetch data for + - in: path + name: timespantype + schema: + $ref: '#/components/schemas/TimespanType' + required: true + description: Type of timespan to fetch data for + - in: path + name: timespan + schema: + type: integer + required: true + description: Timespan to fetch data for + - in: path + name: dataview + schema: + $ref: '#/components/schemas/DataviewType' + required: true + description: Type of data to fetch + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseData' + /repos/pulls: + get: + tags: [namespaces] + summary: Get pull data for multiple repos + description: Gets pull for the given repos. + operationId: getManyReposPulls + parameters: + - in: query + name: repos + schema: + type: array + items: + type: string + required: true + description: Repositories to fetch data for (maximum of 50 repositories per request). + - in: query + name: timespan + schema: + $ref: '#/components/schemas/TimespanType' + required: false + description: Timespan type for fetching data + - in: query + name: period + schema: + $ref: '#/components/schemas/PeriodType' + required: false + description: Relative period of the period to fetch data + - in: query + name: group + schema: + $ref: '#/components/schemas/GroupType' + required: false + description: Field to group the data by + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ReposPullData' + +components: + schemas: + UsersLoginRequest: + description: User login details + type: object + required: + - username + - password + properties: + username: + description: The username of the Docker Hub account to authenticate with. + type: string + example: myusername + password: + description: + The password or personal access token (PAT) of the Docker Hub + account to authenticate with. + type: string + example: hunter2 + PostUsersLoginSuccessResponse: + description: successful user login response + type: object + properties: + token: + description: | + Created authentication token. + + This token can be used in the HTTP Authorization header as a JWT to authenticate with the Docker Hub APIs. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + nullable: false + PostUsersLoginErrorResponse: + description: failed user login response or second factor required + type: object + required: + - detail + properties: + detail: + description: Description of the error. + type: string + example: Incorrect authentication credentials + nullable: false + login_2fa_token: + description: + Short-lived token to be used on `/v2/users/2fa-login` to + complete the authentication. This field is present only if 2FA is + enabled. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + nullable: true + Users2FALoginRequest: + description: Second factor user login details + type: object + required: + - login_2fa_token + - code + properties: + login_2fa_token: + description: The intermediate 2FA token returned from `/v2/users/login` API. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + code: + description: + The Time-based One-Time Password of the Docker Hub account to + authenticate with. + type: string + example: 123456 + PostUsers2FALoginErrorResponse: + description: failed second factor login response. + type: object + properties: + detail: + description: Description of the error. + type: string + example: Incorrect authentication credentials + nullable: false + + ResponseData: + properties: + data: + type: array + description: | + List of urls to download the data. When the data is large, the data will be split into multiple files. + items: + $ref: '#/components/schemas/ResponseDataFile' + ResponseDataFile: + properties: + url: + type: string + size: + type: integer + format: int64 + NamespaceData: + properties: + namespaces: + type: array + items: + type: string + NamespaceMetadata: + properties: + namespace: + type: string + extraRepos: + type: array + items: + type: string + datasets: + type: array + items: + $ref: '#/components/schemas/DatasetModel' + DatasetModel: + properties: + name: + $ref: '#/components/schemas/DatasetType' + views: + type: array + items: + $ref: '#/components/schemas/DataviewType' + timespans: + type: array + items: + $ref: '#/components/schemas/TimespanType' + PullData: + properties: + pulls: + type: array + items: + $ref: '#/components/schemas/PullModel' + ReposPullData: + properties: + repos: + type: object + additionalProperties: + $ref: '#/components/schemas/PullData' + PullModel: + properties: + start: + type: string + end: + type: string + repo: + type: string + namespace: + type: string + pullCount: + type: integer + ipCount: + type: integer + country: + type: string + + YearData: + properties: + years: + type: array + items: + $ref: '#/components/schemas/YearModel' + YearModel: + properties: + year: + type: integer + MonthData: + properties: + months: + type: array + items: + $ref: '#/components/schemas/MonthModel' + MonthModel: + properties: + month: + type: integer + WeekData: + properties: + weeks: + type: array + items: + $ref: '#/components/schemas/WeekModel' + WeekModel: + properties: + week: + type: integer + TimespanType: + type: string + enum: [months,weeks] + PeriodType: + type: string + enum: [last-2-months,last-3-months,last-6-months,last-12-months] + DataviewType: + type: string + enum: [raw,summary,repo-summary,namespace-summary] + DatasetType: + type: string + enum: [pulls] + TimespanModel: + oneOf: + - $ref: '#/components/schemas/MonthModel' + - $ref: '#/components/schemas/WeekModel' + TimespanData: + oneOf: + - $ref: '#/components/schemas/MonthData' + - $ref: '#/components/schemas/WeekData' + GroupType: + type: string + enum: [repo,namespace] + securitySchemes: + HubAuth: + type: https + scheme: bearer + bearerFormat: JWT + description: | + JWT Bearer Authentication is required to access the Docker DVP Data API. + + This authentication documentation is duplicated from the [Hub API Authentication docs](https://docs.docker.com/reference/api/hub/latest/#tag/authentication) + x-displayName: Docker Hub Authentication diff --git a/prototypes/api-docs/original/engine-1.55.yaml b/prototypes/api-docs/original/engine-1.55.yaml new file mode 100644 index 000000000000..04e71dc43c78 --- /dev/null +++ b/prototypes/api-docs/original/engine-1.55.yaml @@ -0,0 +1,14038 @@ +# A Swagger 2.0 (a.k.a. OpenAPI) definition of the Engine API. +# +# This is used for generating API documentation and the types used by the +# client/server. See api/README.md for more information. +# +# Some style notes: +# - This file is used by ReDoc, which allows GitHub Flavored Markdown in +# descriptions. +# - There is no maximum line length, for ease of editing and pretty diffs. +# - operationIds are in the format "NounVerb", with a singular noun. + +swagger: "2.0" +schemes: + - "http" + - "https" +produces: + - "application/json" + - "text/plain" +consumes: + - "application/json" + - "text/plain" +basePath: "/v1.55" +info: + title: "Docker Engine API" + version: "1.55" + x-logo: + url: "https://docs.docker.com/assets/images/logo-docker-main.png" + description: | + The Engine API is an HTTP API served by Docker Engine. It is the API the + Docker client uses to communicate with the Engine, so everything the Docker + client can do can be done with the API. + + Most of the client's commands map directly to API endpoints (e.g. `docker ps` + is `GET /containers/json`). The notable exception is running containers, + which consists of several API calls. + + # Errors + + The API uses standard HTTP status codes to indicate the success or failure + of the API call. The body of the response will be JSON in the following + format: + + ``` + { + "message": "page not found" + } + ``` + + # Versioning + + The API is usually changed in each release, so API calls are versioned to + ensure that clients don't break. To lock to a specific version of the API, + you prefix the URL with its version, for example, call `/v1.30/info` to use + the v1.30 version of the `/info` endpoint. If the API version specified in + the URL is not supported by the daemon, a HTTP `400 Bad Request` error message + is returned. + + If you omit the version-prefix, the current version of the API is used. + For example, calling `/info` is the same as calling `/v1.55/info`. Using the + API without a version-prefix is deprecated and will be removed in a future release. + + Engine releases in the near future should support this version of the API, + so your client will continue to work even if it is talking to a newer Engine. + + The API uses an open schema model, which means the server may add extra properties + to responses. Likewise, the server will ignore any extra query parameters and + request body properties. When you write clients, you need to ignore additional + properties in responses to ensure they do not break when talking to newer + daemons. + + + # Authentication + + Authentication for registries is handled client side. The client has to send + authentication details to various endpoints that need to communicate with + registries, such as `POST /images/(name)/push`. These are sent as + `X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5) + (JSON) string with the following structure: + + ``` + { + "username": "string", + "password": "string", + "serveraddress": "string" + } + ``` + + The `serveraddress` is a domain/IP without a protocol. Throughout this + structure, double quotes are required. + + If you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth), + you can just pass this instead of credentials: + + ``` + { + "identitytoken": "9cbaf023786cd7..." + } + ``` + +# The tags on paths define the menu sections in the ReDoc documentation, so +# the usage of tags must make sense for that: +# - They should be singular, not plural. +# - There should not be too many tags, or the menu becomes unwieldy. For +# example, it is preferable to add a path to the "System" tag instead of +# creating a tag with a single path in it. +# - The order of tags in this list defines the order in the menu. +tags: + # Primary objects + - name: "Container" + x-displayName: "Containers" + description: | + Create and manage containers. + - name: "Image" + x-displayName: "Images" + - name: "Network" + x-displayName: "Networks" + description: | + Networks are user-defined networks that containers can be attached to. + See the [networking documentation](https://docs.docker.com/network/) + for more information. + - name: "Volume" + x-displayName: "Volumes" + description: | + Create and manage persistent storage that can be attached to containers. + - name: "Exec" + x-displayName: "Exec" + description: | + Run new commands inside running containers. Refer to the + [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) + for more information. + + To exec a command in a container, you first need to create an exec instance, + then start it. These two API endpoints are wrapped up in a single command-line + command, `docker exec`. + + # Swarm things + - name: "Swarm" + x-displayName: "Swarm" + description: | + Engines can be clustered together in a swarm. Refer to the + [swarm mode documentation](https://docs.docker.com/engine/swarm/) + for more information. + - name: "Node" + x-displayName: "Nodes" + description: | + Nodes are instances of the Engine participating in a swarm. Swarm mode + must be enabled for these endpoints to work. + - name: "Service" + x-displayName: "Services" + description: | + Services are the definitions of tasks to run on a swarm. Swarm mode must + be enabled for these endpoints to work. + - name: "Task" + x-displayName: "Tasks" + description: | + A task is a container running on a swarm. It is the atomic scheduling unit + of swarm. Swarm mode must be enabled for these endpoints to work. + - name: "Secret" + x-displayName: "Secrets" + description: | + Secrets are sensitive data that can be used by services. Swarm mode must + be enabled for these endpoints to work. + - name: "Config" + x-displayName: "Configs" + description: | + Configs are application configurations that can be used by services. Swarm + mode must be enabled for these endpoints to work. + # System things + - name: "Plugin" + x-displayName: "Plugins" + - name: "System" + x-displayName: "System" + +definitions: + ImageHistoryResponseItem: + type: "object" + x-go-name: HistoryResponseItem + title: "HistoryResponseItem" + description: "individual image layer information in response to ImageHistory operation" + required: [Id, Created, CreatedBy, Tags, Size, Comment] + properties: + Id: + type: "string" + x-nullable: false + Created: + type: "integer" + format: "int64" + x-nullable: false + CreatedBy: + type: "string" + x-nullable: false + Tags: + type: "array" + items: + type: "string" + Size: + type: "integer" + format: "int64" + x-nullable: false + Comment: + type: "string" + x-nullable: false + PortSummary: + type: "object" + description: | + Describes a port-mapping between the container and the host. + required: [PrivatePort, Type] + properties: + IP: + type: "string" + format: "ip-address" + description: "Host IP address that the container's port is mapped to" + x-go-type: + type: Addr + import: + package: net/netip + PrivatePort: + type: "integer" + format: "uint16" + x-nullable: false + description: "Port on the container" + PublicPort: + type: "integer" + format: "uint16" + description: "Port exposed on the host" + Type: + type: "string" + x-nullable: false + enum: ["tcp", "udp", "sctp"] + example: + PrivatePort: 8080 + PublicPort: 80 + Type: "tcp" + + MountType: + description: |- + The mount type. Available types: + + - `bind` a mount of a file or directory from the host into the container. + - `cluster` a Swarm cluster volume. + - `image` an OCI image. + - `npipe` a named pipe from the host into the container. + - `tmpfs` a `tmpfs`. + - `volume` a docker volume with the given `Name`. + type: "string" + enum: + - "bind" + - "cluster" + - "image" + - "npipe" + - "tmpfs" + - "volume" + example: "volume" + + MountPoint: + type: "object" + description: | + MountPoint represents a mount point configuration inside the container. + This is used for reporting the mountpoints in use by a container. + properties: + Type: + description: | + The mount type: + + - `bind` a mount of a file or directory from the host into the container. + - `cluster` a Swarm cluster volume. + - `image` an OCI image. + - `npipe` a named pipe from the host into the container. + - `tmpfs` a `tmpfs`. + - `volume` a docker volume with the given `Name`. + allOf: + - $ref: "#/definitions/MountType" + example: "volume" + Name: + description: | + Name is the name reference to the underlying data defined by `Source` + e.g., the volume name. + type: "string" + example: "myvolume" + Source: + description: | + Source location of the mount. + + For volumes, this contains the storage location of the volume (within + `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains + the source (host) part of the bind-mount. For `tmpfs` mount points, this + field is empty. + type: "string" + example: "/var/lib/docker/volumes/myvolume/_data" + Destination: + description: | + Destination is the path relative to the container root (`/`) where + the `Source` is mounted inside the container. + type: "string" + example: "/usr/share/nginx/html/" + Driver: + description: | + Driver is the volume driver used to create the volume (if it is a volume). + type: "string" + example: "local" + Mode: + description: | + Mode is a comma separated list of options supplied by the user when + creating the bind/volume mount. + + The default is platform-specific (`"z"` on Linux, empty on Windows). + type: "string" + example: "z" + RW: + description: | + Whether the mount is mounted writable (read-write). + type: "boolean" + example: true + Propagation: + description: | + Propagation describes how mounts are propagated from the host into the + mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) + for details. This field is not used on Windows. + type: "string" + example: "" + + DeviceMapping: + type: "object" + description: "A device mapping between the host and container" + properties: + PathOnHost: + type: "string" + PathInContainer: + type: "string" + CgroupPermissions: + type: "string" + example: + PathOnHost: "/dev/deviceName" + PathInContainer: "/dev/deviceName" + CgroupPermissions: "mrw" + + DeviceRequest: + type: "object" + description: "A request for devices to be sent to device drivers" + properties: + Driver: + description: | + The name of the device driver to use for this request. + + Note that if this is specified the capabilities are ignored when + selecting a device driver. + type: "string" + example: "nvidia" + Count: + type: "integer" + example: -1 + DeviceIDs: + type: "array" + items: + type: "string" + example: + - "0" + - "1" + - "GPU-fef8089b-4820-abfc-e83e-94318197576e" + Capabilities: + description: | + A list of capabilities; an OR list of AND lists of capabilities. + + Note that if a driver is specified the capabilities have no effect on + selecting a driver as the driver name is used directly. + + Note that if no driver is specified the capabilities are used to + select a driver with the required capabilities. + type: "array" + items: + type: "array" + items: + type: "string" + example: + # gpu AND nvidia AND compute + - ["gpu", "nvidia", "compute"] + Options: + description: | + Driver-specific options, specified as a key/value pairs. These options + are passed directly to the driver. + type: "object" + additionalProperties: + type: "string" + + ThrottleDevice: + type: "object" + properties: + Path: + description: "Device path" + type: "string" + Rate: + description: "Rate" + type: "integer" + format: "int64" + minimum: 0 + + Mount: + type: "object" + properties: + Target: + description: "Container path." + type: "string" + Source: + description: |- + Mount source (e.g. a volume name, a host path). The source cannot be + specified when using `Type=tmpfs`. For `Type=bind`, the source path + must either exist, or the `CreateMountpoint` must be set to `true` to + create the source path on the host if missing. + + For `Type=npipe`, the pipe must exist prior to creating the container. + type: "string" + Type: + description: | + The mount type. Available types: + + - `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container. + - `cluster` a Swarm cluster volume + - `image` Mounts an image. + - `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container. + - `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs. + - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. + allOf: + - $ref: "#/definitions/MountType" + ReadOnly: + description: "Whether the mount should be read-only." + type: "boolean" + Consistency: + description: "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." + type: "string" + BindOptions: + description: "Optional configuration for the `bind` type." + type: "object" + properties: + Propagation: + description: "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`." + type: "string" + enum: + - "private" + - "rprivate" + - "shared" + - "rshared" + - "slave" + - "rslave" + NonRecursive: + description: "Disable recursive bind mount." + type: "boolean" + default: false + CreateMountpoint: + description: "Create mount point on host if missing" + type: "boolean" + default: false + ReadOnlyNonRecursive: + description: | + Make the mount non-recursively read-only, but still leave the mount recursive + (unless NonRecursive is set to `true` in conjunction). + + Added in v1.44, before that version all read-only mounts were + non-recursive by default. To match the previous behaviour this + will default to `true` for clients on versions prior to v1.44. + type: "boolean" + default: false + ReadOnlyForceRecursive: + description: "Raise an error if the mount cannot be made recursively read-only." + type: "boolean" + default: false + VolumeOptions: + description: "Optional configuration for the `volume` type." + type: "object" + properties: + NoCopy: + description: "Populate volume with data from the target." + type: "boolean" + default: false + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + DriverConfig: + description: "Map of driver specific options" + type: "object" + properties: + Name: + description: "Name of the driver to use to create the volume." + type: "string" + Options: + description: "key/value map of driver specific options." + type: "object" + additionalProperties: + type: "string" + Subpath: + description: "Source path inside the volume. Must be relative without any back traversals." + type: "string" + example: "dir-inside-volume/subdirectory" + ImageOptions: + description: "Optional configuration for the `image` type." + type: "object" + properties: + Subpath: + description: "Source path inside the image. Must be relative without any back traversals." + type: "string" + example: "dir-inside-image/subdirectory" + TmpfsOptions: + description: "Optional configuration for the `tmpfs` type." + type: "object" + properties: + SizeBytes: + description: "The size for the tmpfs mount in bytes." + type: "integer" + format: "int64" + Mode: + description: | + The permission mode for the tmpfs mount in an integer. + The value must not be in octal format (e.g. 755) but rather + the decimal representation of the octal value (e.g. 493). + type: "integer" + Options: + description: | + The options to be passed to the tmpfs mount. An array of arrays. + Flag options should be provided as 1-length arrays. Other types + should be provided as as 2-length arrays, where the first item is + the key and the second the value. + type: "array" + items: + type: "array" + minItems: 1 + maxItems: 2 + items: + type: "string" + example: + [["noexec"]] + + RestartPolicy: + description: | + The behavior to apply when the container exits. The default is not to + restart. + + An ever increasing delay (double the previous delay, starting at 100ms) is + added before each restart to prevent flooding the server. + type: "object" + properties: + Name: + type: "string" + description: | + - Empty string means not to restart + - `no` Do not automatically restart + - `always` Always restart + - `unless-stopped` Restart always except when the user has manually stopped the container + - `on-failure` Restart only when the container exit code is non-zero + enum: + - "" + - "no" + - "always" + - "unless-stopped" + - "on-failure" + MaximumRetryCount: + type: "integer" + description: | + If `on-failure` is used, the number of times to retry before giving up. + + Resources: + description: "A container's resources (cgroups config, ulimits, etc)" + type: "object" + properties: + # Applicable to all platforms + CpuShares: + description: | + An integer value representing this container's relative CPU weight + versus other containers. + type: "integer" + Memory: + description: "Memory limit in bytes." + type: "integer" + format: "int64" + default: 0 + # Applicable to UNIX platforms + CgroupParent: + description: | + Path to `cgroups` under which the container's `cgroup` is created. If + the path is not absolute, the path is considered to be relative to the + `cgroups` path of the init process. Cgroups are created if they do not + already exist. + type: "string" + BlkioWeight: + description: "Block IO weight (relative weight)." + type: "integer" + minimum: 0 + maximum: 1000 + BlkioWeightDevice: + description: | + Block IO weight (relative device weight) in the form: + + ``` + [{"Path": "device_path", "Weight": weight}] + ``` + type: "array" + items: + type: "object" + properties: + Path: + type: "string" + Weight: + type: "integer" + minimum: 0 + BlkioDeviceReadBps: + description: | + Limit read rate (bytes per second) from a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: "array" + items: + $ref: "#/definitions/ThrottleDevice" + BlkioDeviceWriteBps: + description: | + Limit write rate (bytes per second) to a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: "array" + items: + $ref: "#/definitions/ThrottleDevice" + BlkioDeviceReadIOps: + description: | + Limit read rate (IO per second) from a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: "array" + items: + $ref: "#/definitions/ThrottleDevice" + BlkioDeviceWriteIOps: + description: | + Limit write rate (IO per second) to a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: "array" + items: + $ref: "#/definitions/ThrottleDevice" + CpuPeriod: + description: "The length of a CPU period in microseconds." + type: "integer" + format: "int64" + CpuQuota: + description: | + Microseconds of CPU time that the container can get in a CPU period. + type: "integer" + format: "int64" + CpuRealtimePeriod: + description: | + The length of a CPU real-time period in microseconds. Set to 0 to + allocate no time allocated to real-time tasks. + type: "integer" + format: "int64" + CpuRealtimeRuntime: + description: | + The length of a CPU real-time runtime in microseconds. Set to 0 to + allocate no time allocated to real-time tasks. + type: "integer" + format: "int64" + CpusetCpus: + description: | + CPUs in which to allow execution (e.g., `0-3`, `0,1`). + type: "string" + example: "0-3" + CpusetMems: + description: | + Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + effective on NUMA systems. + type: "string" + Devices: + description: "A list of devices to add to the container." + type: "array" + items: + $ref: "#/definitions/DeviceMapping" + DeviceCgroupRules: + description: "a list of cgroup rules to apply to the container" + type: "array" + items: + type: "string" + example: "c 13:* rwm" + DeviceRequests: + description: | + A list of requests for devices to be sent to device drivers. + type: "array" + items: + $ref: "#/definitions/DeviceRequest" + MemoryReservation: + description: "Memory soft limit in bytes." + type: "integer" + format: "int64" + MemorySwap: + description: | + Total memory limit (memory + swap). Set as `-1` to enable unlimited + swap. + type: "integer" + format: "int64" + MemorySwappiness: + description: | + Tune a container's memory swappiness behavior. Accepts an integer + between 0 and 100. + type: "integer" + format: "int64" + minimum: 0 + maximum: 100 + NanoCpus: + description: "CPU quota in units of 10-9 CPUs." + type: "integer" + format: "int64" + OomKillDisable: + description: "Disable OOM Killer for the container." + type: "boolean" + Init: + description: | + Run an init inside the container that forwards signals and reaps + processes. This field is omitted if empty, and the default (as + configured on the daemon) is used. + type: "boolean" + x-nullable: true + PidsLimit: + description: | + Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + to not change. + type: "integer" + format: "int64" + x-nullable: true + Ulimits: + description: | + A list of resource limits to set in the container. For example: + + ``` + {"Name": "nofile", "Soft": 1024, "Hard": 2048} + ``` + type: "array" + items: + type: "object" + properties: + Name: + description: "Name of ulimit" + type: "string" + Soft: + description: "Soft limit" + type: "integer" + Hard: + description: "Hard limit" + type: "integer" + # Applicable to Windows + CpuCount: + description: | + The number of usable CPUs (Windows only). + + On Windows Server containers, the processor resource controls are + mutually exclusive. The order of precedence is `CPUCount` first, then + `CPUShares`, and `CPUPercent` last. + type: "integer" + format: "int64" + CpuPercent: + description: | + The usable percentage of the available CPUs (Windows only). + + On Windows Server containers, the processor resource controls are + mutually exclusive. The order of precedence is `CPUCount` first, then + `CPUShares`, and `CPUPercent` last. + type: "integer" + format: "int64" + IOMaximumIOps: + description: "Maximum IOps for the container system drive (Windows only)" + type: "integer" + format: "int64" + IOMaximumBandwidth: + description: | + Maximum IO in bytes per second for the container system drive + (Windows only). + type: "integer" + format: "int64" + + Limit: + description: | + An object describing a limit on resources which can be requested by a task. + type: "object" + properties: + NanoCPUs: + type: "integer" + format: "int64" + example: 4000000000 + MemoryBytes: + type: "integer" + format: "int64" + example: 8272408576 + Pids: + description: | + Limits the maximum number of PIDs in the container. Set `0` for unlimited. + type: "integer" + format: "int64" + default: 0 + example: 100 + + ResourceObject: + description: | + An object describing the resources which can be advertised by a node and + requested by a task. + type: "object" + properties: + NanoCPUs: + type: "integer" + format: "int64" + example: 4000000000 + MemoryBytes: + type: "integer" + format: "int64" + example: 8272408576 + GenericResources: + $ref: "#/definitions/GenericResources" + + GenericResources: + description: | + User-defined resources can be either Integer resources (e.g, `SSD=3`) or + String resources (e.g, `GPU=UUID1`). + type: "array" + items: + type: "object" + properties: + NamedResourceSpec: + type: "object" + properties: + Kind: + type: "string" + Value: + type: "string" + DiscreteResourceSpec: + type: "object" + properties: + Kind: + type: "string" + Value: + type: "integer" + format: "int64" + example: + - DiscreteResourceSpec: + Kind: "SSD" + Value: 3 + - NamedResourceSpec: + Kind: "GPU" + Value: "UUID1" + - NamedResourceSpec: + Kind: "GPU" + Value: "UUID2" + + HealthConfig: + description: | + A test to perform to check that the container is healthy. + Healthcheck commands should be side-effect free. + type: "object" + properties: + Test: + description: | + The test to perform. Possible values are: + + - `[]` inherit healthcheck from image or parent image + - `["NONE"]` disable healthcheck + - `["CMD", args...]` exec arguments directly + - `["CMD-SHELL", command]` run command with system's default shell + + A non-zero exit code indicates a failed healthcheck: + - `0` healthy + - `1` unhealthy + - `2` reserved (treated as unhealthy) + - other values: error running probe + type: "array" + items: + type: "string" + Interval: + description: | + The time to wait between checks in nanoseconds. It should be 0 or at + least 1000000 (1 ms). 0 means inherit. + type: "integer" + format: "int64" + Timeout: + description: | + The time to wait before considering the check to have hung. It should + be 0 or at least 1000000 (1 ms). 0 means inherit. + + If the health check command does not complete within this timeout, + the check is considered failed and the health check process is + forcibly terminated without a graceful shutdown. + type: "integer" + format: "int64" + Retries: + description: | + The number of consecutive failures needed to consider a container as + unhealthy. 0 means inherit. + type: "integer" + StartPeriod: + description: | + Start period for the container to initialize before starting + health-retries countdown in nanoseconds. It should be 0 or at least + 1000000 (1 ms). 0 means inherit. + type: "integer" + format: "int64" + StartInterval: + description: | + The time to wait between checks in nanoseconds during the start period. + It should be 0 or at least 1000000 (1 ms). 0 means inherit. + type: "integer" + format: "int64" + + Health: + description: | + Health stores information about the container's healthcheck results. + type: "object" + x-nullable: true + properties: + Status: + description: | + Status is one of `none`, `starting`, `healthy` or `unhealthy` + + - "none" Indicates there is no healthcheck + - "starting" Starting indicates that the container is not yet ready + - "healthy" Healthy indicates that the container is running correctly + - "unhealthy" Unhealthy indicates that the container has a problem + type: "string" + enum: + - "none" + - "starting" + - "healthy" + - "unhealthy" + example: "healthy" + FailingStreak: + description: "FailingStreak is the number of consecutive failures" + type: "integer" + example: 0 + Log: + type: "array" + description: | + Log contains the last few results (oldest first) + items: + $ref: "#/definitions/HealthcheckResult" + + HealthcheckResult: + description: | + HealthcheckResult stores information about a single run of a healthcheck probe + type: "object" + x-nullable: true + properties: + Start: + description: | + Date and time at which this check started in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "date-time" + example: "2020-01-04T10:44:24.496525531Z" + End: + description: | + Date and time at which this check ended in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2020-01-04T10:45:21.364524523Z" + ExitCode: + description: | + ExitCode meanings: + + - `0` healthy + - `1` unhealthy + - `2` reserved (considered unhealthy) + - other values: error running probe + type: "integer" + example: 0 + Output: + description: "Output from last check" + type: "string" + + HostConfig: + description: "Container configuration that depends on the host we are running on" + allOf: + - $ref: "#/definitions/Resources" + - type: "object" + properties: + # Applicable to all platforms + Binds: + type: "array" + description: | + A list of volume bindings for this container. Each volume binding + is a string in one of these forms: + + - `host-src:container-dest[:options]` to bind-mount a host path + into the container. Both `host-src`, and `container-dest` must + be an _absolute_ path. + - `volume-name:container-dest[:options]` to bind-mount a volume + managed by a volume driver into the container. `container-dest` + must be an _absolute_ path. + + `options` is an optional, comma-delimited list of: + + - `nocopy` disables automatic copying of data from the container + path to the volume. The `nocopy` flag only applies to named volumes. + - `[ro|rw]` mounts a volume read-only or read-write, respectively. + If omitted or set to `rw`, volumes are mounted read-write. + - `[z|Z]` applies SELinux labels to allow or deny multiple containers + to read and write to the same volume. + - `z`: a _shared_ content label is applied to the content. This + label indicates that multiple containers can share the volume + content, for both reading and writing. + - `Z`: a _private unshared_ label is applied to the content. + This label indicates that only the current container can use + a private volume. Labeling systems such as SELinux require + proper labels to be placed on volume content that is mounted + into a container. Without a label, the security system can + prevent a container's processes from using the content. By + default, the labels set by the host operating system are not + modified. + - `[[r]shared|[r]slave|[r]private]` specifies mount + [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). + This only applies to bind-mounted volumes, not internal volumes + or named volumes. Mount propagation requires the source mount + point (the location where the source directory is mounted in the + host operating system) to have the correct propagation properties. + For shared volumes, the source mount point must be set to `shared`. + For slave volumes, the mount must be set to either `shared` or + `slave`. + items: + type: "string" + ContainerIDFile: + type: "string" + description: "Path to a file where the container ID is written" + example: "" + LogConfig: + type: "object" + description: "The logging configuration for this container" + properties: + Type: + description: |- + Name of the logging driver used for the container or "none" + if logging is disabled. + type: "string" + enum: + - "local" + - "json-file" + - "syslog" + - "journald" + - "gelf" + - "fluentd" + - "awslogs" + - "splunk" + - "etwlogs" + - "none" + Config: + description: |- + Driver-specific configuration options for the logging driver. + type: "object" + additionalProperties: + type: "string" + example: + "max-file": "5" + "max-size": "10m" + NetworkMode: + type: "string" + description: | + Network mode to use for this container. Supported standard values + are: `bridge`, `host`, `none`, and `container:`. Any + other value is taken as a custom network's name to which this + container should connect to. + PortBindings: + $ref: "#/definitions/PortMap" + RestartPolicy: + $ref: "#/definitions/RestartPolicy" + AutoRemove: + type: "boolean" + description: | + Automatically remove the container when the container's process + exits. This has no effect if `RestartPolicy` is set. + VolumeDriver: + type: "string" + description: "Driver that this container uses to mount volumes." + VolumesFrom: + type: "array" + description: | + A list of volumes to inherit from another container, specified in + the form `[:]`. + items: + type: "string" + Mounts: + description: | + Specification for mounts to be added to the container. + type: "array" + items: + $ref: "#/definitions/Mount" + ConsoleSize: + type: "array" + description: | + Initial console size, as an `[height, width]` array. + x-nullable: true + minItems: 2 + maxItems: 2 + items: + type: "integer" + minimum: 0 + example: [80, 64] + Annotations: + type: "object" + description: | + Arbitrary non-identifying metadata attached to container and + provided to the runtime when the container is started. + additionalProperties: + type: "string" + + # Applicable to UNIX platforms + CapAdd: + type: "array" + description: | + A list of kernel capabilities to add to the container. Conflicts + with option 'Capabilities'. + items: + type: "string" + CapDrop: + type: "array" + description: | + A list of kernel capabilities to drop from the container. Conflicts + with option 'Capabilities'. + items: + type: "string" + CgroupnsMode: + type: "string" + enum: + - "private" + - "host" + description: | + cgroup namespace mode for the container. Possible values are: + + - `"private"`: the container runs in its own private cgroup namespace + - `"host"`: use the host system's cgroup namespace + + If not specified, the daemon default is used, which can either be `"private"` + or `"host"`, depending on daemon version, kernel support and configuration. + Dns: + type: "array" + description: "A list of DNS servers for the container to use." + items: + type: "string" + format: "ip-address" + x-go-type: + type: Addr + import: + package: net/netip + DnsOptions: + type: "array" + description: "A list of DNS options." + items: + type: "string" + DnsSearch: + type: "array" + description: "A list of DNS search domains." + items: + type: "string" + ExtraHosts: + type: "array" + description: | + A list of hostnames/IP mappings to add to the container's `/etc/hosts` + file. Specified in the form `["hostname:IP"]`. + items: + type: "string" + GroupAdd: + type: "array" + description: | + A list of additional groups that the container process will run as. + items: + type: "string" + IpcMode: + type: "string" + description: | + IPC sharing mode for the container. Possible values are: + + - `"none"`: own private IPC namespace, with /dev/shm not mounted + - `"private"`: own private IPC namespace + - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers + - `"container:"`: join another (shareable) container's IPC namespace + - `"host"`: use the host system's IPC namespace + + If not specified, daemon default is used, which can either be `"private"` + or `"shareable"`, depending on daemon version and configuration. + Cgroup: + type: "string" + description: "Cgroup to use for the container." + Links: + type: "array" + description: | + A list of links for the container in the form `container_name:alias`. + items: + type: "string" + OomScoreAdj: + type: "integer" + description: | + An integer value containing the score given to the container in + order to tune OOM killer preferences. + example: 500 + PidMode: + type: "string" + description: | + Set the PID (Process) Namespace mode for the container. It can be + either: + + - `"container:"`: joins another container's PID namespace + - `"host"`: use the host's PID namespace inside the container + Privileged: + type: "boolean" + description: |- + Gives the container full access to the host. + PublishAllPorts: + type: "boolean" + description: | + Allocates an ephemeral host port for all of a container's + exposed ports. + + Ports are de-allocated when the container stops and allocated when + the container starts. The allocated port might be changed when + restarting the container. + + The port is selected from the ephemeral port range that depends on + the kernel. For example, on Linux the range is defined by + `/proc/sys/net/ipv4/ip_local_port_range`. + ReadonlyRootfs: + type: "boolean" + description: "Mount the container's root filesystem as read only." + SecurityOpt: + type: "array" + description: | + A list of string values to customize labels for MLS systems, such + as SELinux. + items: + type: "string" + StorageOpt: + type: "object" + description: | + Storage driver options for this container, in the form `{"size": "120G"}`. + additionalProperties: + type: "string" + Tmpfs: + type: "object" + description: | + A map of container directories which should be replaced by tmpfs + mounts, and their corresponding mount options. For example: + + ``` + { "/run": "rw,noexec,nosuid,size=65536k" } + ``` + additionalProperties: + type: "string" + UTSMode: + type: "string" + description: "UTS namespace to use for the container." + UsernsMode: + type: "string" + description: | + Sets the usernamespace mode for the container when usernamespace + remapping option is enabled. + ShmSize: + type: "integer" + format: "int64" + description: | + Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. + minimum: 0 + Sysctls: + type: "object" + x-nullable: true + description: |- + A list of kernel parameters (sysctls) to set in the container. + + This field is omitted if not set. + additionalProperties: + type: "string" + example: + "net.ipv4.ip_forward": "1" + Runtime: + type: "string" + x-nullable: true + description: |- + Runtime to use with this container. + # Applicable to Windows + Isolation: + type: "string" + description: | + Isolation technology of the container. (Windows only) + enum: + - "default" + - "process" + - "hyperv" + - "" + MaskedPaths: + type: "array" + description: | + The list of paths to be masked inside the container (this overrides + the default set of paths). + items: + type: "string" + example: + - "/proc/asound" + - "/proc/acpi" + - "/proc/kcore" + - "/proc/keys" + - "/proc/latency_stats" + - "/proc/timer_list" + - "/proc/timer_stats" + - "/proc/sched_debug" + - "/proc/scsi" + - "/sys/firmware" + - "/sys/devices/virtual/powercap" + ReadonlyPaths: + type: "array" + description: | + The list of paths to be set as read-only inside the container + (this overrides the default set of paths). + items: + type: "string" + example: + - "/proc/bus" + - "/proc/fs" + - "/proc/irq" + - "/proc/sys" + - "/proc/sysrq-trigger" + + ContainerConfig: + description: | + Configuration for a container that is portable between hosts. + type: "object" + properties: + Hostname: + description: | + The hostname to use for the container, as a valid RFC 1123 hostname. + type: "string" + example: "439f4e91bd1d" + Domainname: + description: | + The domain name to use for the container. + type: "string" + User: + description: |- + Commands run as this user inside the container. If omitted, commands + run as the user specified in the image the container was started from. + + Can be either user-name or UID, and optional group-name or GID, + separated by a colon (`[<:group-name|GID>]`). + type: "string" + example: "123:456" + AttachStdin: + description: "Whether to attach to `stdin`." + type: "boolean" + default: false + AttachStdout: + description: "Whether to attach to `stdout`." + type: "boolean" + default: true + AttachStderr: + description: "Whether to attach to `stderr`." + type: "boolean" + default: true + ExposedPorts: + description: | + An object mapping ports to an empty object in the form: + + `{"/": {}}` + type: "object" + x-nullable: true + additionalProperties: + type: "object" + enum: + - {} + default: {} + example: { + "80/tcp": {}, + "443/tcp": {} + } + Tty: + description: | + Attach standard streams to a TTY, including `stdin` if it is not closed. + type: "boolean" + default: false + OpenStdin: + description: "Open `stdin`" + type: "boolean" + default: false + StdinOnce: + description: "Close `stdin` after one attached client disconnects" + type: "boolean" + default: false + Env: + description: | + A list of environment variables to set inside the container in the + form `["VAR=value", ...]`. A variable without `=` is removed from the + environment, rather than to have an empty value. + type: "array" + items: + type: "string" + example: + - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + Cmd: + description: | + Command to run specified as a string or an array of strings. + type: "array" + items: + type: "string" + example: ["/bin/sh"] + Healthcheck: + $ref: "#/definitions/HealthConfig" + ArgsEscaped: + description: "Command is already escaped (Windows only)" + type: "boolean" + default: false + example: false + x-nullable: true + Image: + description: | + The name (or reference) of the image to use when creating the container, + or which was used when the container was created. + type: "string" + example: "example-image:1.0" + Volumes: + description: | + An object mapping mount point paths inside the container to empty + objects. + type: "object" + additionalProperties: + type: "object" + enum: + - {} + default: {} + WorkingDir: + description: "The working directory for commands to run in." + type: "string" + example: "/public/" + Entrypoint: + description: | + The entry point for the container as a string or an array of strings. + + If the array consists of exactly one empty string (`[""]`) then the + entry point is reset to system default (i.e., the entry point used by + docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + type: "array" + items: + type: "string" + example: [] + NetworkDisabled: + description: "Disable networking for the container." + type: "boolean" + x-nullable: true + OnBuild: + description: | + `ONBUILD` metadata that were defined in the image's `Dockerfile`. + type: "array" + x-nullable: true + items: + type: "string" + example: [] + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + StopSignal: + description: | + Signal to stop a container as a string or unsigned integer. + type: "string" + example: "SIGTERM" + x-nullable: true + StopTimeout: + description: | + Timeout to stop a container in seconds. If omitted, the daemon-wide + default (`default-stop-timeout`) is used. + type: "integer" + x-nullable: true + Shell: + description: | + Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + type: "array" + x-nullable: true + items: + type: "string" + example: ["/bin/sh", "-c"] + + ImageConfig: + description: | + Configuration of the image. These fields are used as defaults + when starting a container from the image. + type: "object" + properties: + User: + description: "The user that commands are run as inside the container." + type: "string" + example: "web:web" + ExposedPorts: + description: | + An object mapping ports to an empty object in the form: + + `{"/": {}}` + type: "object" + x-nullable: true + additionalProperties: + type: "object" + enum: + - {} + default: {} + example: { + "80/tcp": {}, + "443/tcp": {} + } + Env: + description: | + A list of environment variables to set inside the container in the + form `["VAR=value", ...]`. A variable without `=` is removed from the + environment, rather than to have an empty value. + type: "array" + items: + type: "string" + example: + - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + Cmd: + description: | + Command to run specified as a string or an array of strings. + type: "array" + items: + type: "string" + example: ["/bin/sh"] + Healthcheck: + $ref: "#/definitions/HealthConfig" + ArgsEscaped: + description: "Command is already escaped (Windows only)" + type: "boolean" + default: false + example: false + x-nullable: true + Volumes: + description: | + An object mapping mount point paths inside the container to empty + objects. + type: "object" + additionalProperties: + type: "object" + enum: + - {} + default: {} + example: + "/app/data": {} + "/app/config": {} + WorkingDir: + description: "The working directory for commands to run in." + type: "string" + example: "/public/" + Entrypoint: + description: | + The entry point for the container as a string or an array of strings. + + If the array consists of exactly one empty string (`[""]`) then the + entry point is reset to system default (i.e., the entry point used by + docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + type: "array" + items: + type: "string" + example: [] + OnBuild: + description: | + `ONBUILD` metadata that were defined in the image's `Dockerfile`. + type: "array" + x-nullable: true + items: + type: "string" + example: [] + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + StopSignal: + description: | + Signal to stop a container as a string or unsigned integer. + type: "string" + example: "SIGTERM" + x-nullable: true + Shell: + description: | + Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + type: "array" + x-nullable: true + items: + type: "string" + example: ["/bin/sh", "-c"] + + NetworkingConfig: + description: | + NetworkingConfig represents the container's networking configuration for + each of its interfaces. + It is used for the networking configs specified in the `docker create` + and `docker network connect` commands. + type: "object" + properties: + EndpointsConfig: + description: | + A mapping of network name to endpoint configuration for that network. + The endpoint configuration can be left empty to connect to that + network with no particular endpoint configuration. + type: "object" + additionalProperties: + $ref: "#/definitions/EndpointSettings" + example: + # putting an example here, instead of using the example values from + # /definitions/EndpointSettings, because EndpointSettings contains + # operational data returned when inspecting a container that we don't + # accept here. + EndpointsConfig: + isolated_nw: + IPAMConfig: + IPv4Address: "172.20.30.33" + IPv6Address: "2001:db8:abcd::3033" + LinkLocalIPs: + - "169.254.34.68" + - "fe80::3468" + MacAddress: "02:42:ac:12:05:02" + Links: + - "container_1" + - "container_2" + Aliases: + - "server_x" + - "server_y" + database_nw: {} + + NetworkSettings: + description: "NetworkSettings exposes the network settings in the API" + type: "object" + properties: + SandboxID: + description: SandboxID uniquely represents a container's network stack. + type: "string" + example: "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + SandboxKey: + description: SandboxKey is the full path of the netns handle + type: "string" + example: "/var/run/docker/netns/8ab54b426c38" + Ports: + $ref: "#/definitions/PortMap" + Networks: + description: | + Information about all networks that the container is connected to. + type: "object" + additionalProperties: + $ref: "#/definitions/EndpointSettings" + + Address: + description: Address represents an IPv4 or IPv6 IP address. + type: "object" + properties: + Addr: + description: IP address. + type: "string" + PrefixLen: + description: Mask length of the IP address. + type: "integer" + + PortMap: + description: | + PortMap describes the mapping of container ports to host ports, using the + container's port-number and protocol as key in the format `/`, + for example, `80/udp`. + + If a container's port is mapped for multiple protocols, separate entries + are added to the mapping table. + type: "object" + additionalProperties: + type: "array" + x-nullable: true + items: + $ref: "#/definitions/PortBinding" + example: + "443/tcp": + - HostIp: "127.0.0.1" + HostPort: "4443" + "80/tcp": + - HostIp: "0.0.0.0" + HostPort: "80" + - HostIp: "0.0.0.0" + HostPort: "8080" + "80/udp": + - HostIp: "0.0.0.0" + HostPort: "80" + "53/udp": + - HostIp: "0.0.0.0" + HostPort: "53" + "2377/tcp": null + + PortBinding: + description: | + PortBinding represents a binding between a host IP address and a host + port. + type: "object" + properties: + HostIp: + description: "Host IP address that the container's port is mapped to." + type: "string" + example: "127.0.0.1" + x-go-type: + type: Addr + import: + package: net/netip + HostPort: + description: "Host port number that the container's port is mapped to." + type: "string" + example: "4443" + + DriverData: + description: | + Information about the storage driver used to store the container's and + image's filesystem. + type: "object" + required: [Name, Data] + properties: + Name: + description: "Name of the storage driver." + type: "string" + x-nullable: false + example: "overlay2" + Data: + description: | + Low-level storage metadata, provided as key/value pairs. + + This information is driver-specific, and depends on the storage-driver + in use, and should be used for informational purposes only. + type: "object" + x-nullable: false + additionalProperties: + type: "string" + example: { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + } + + Storage: + description: | + Information about the storage used by the container. + type: "object" + properties: + RootFS: + description: | + Information about the storage used for the container's root filesystem. + type: "object" + x-nullable: true + $ref: "#/definitions/RootFSStorage" + + RootFSStorage: + description: | + Information about the storage used for the container's root filesystem. + type: "object" + x-go-name: RootFSStorage + properties: + Snapshot: + description: | + Information about the snapshot used for the container's root filesystem. + type: "object" + x-nullable: true + $ref: "#/definitions/RootFSStorageSnapshot" + + RootFSStorageSnapshot: + description: | + Information about a snapshot backend of the container's root filesystem. + type: "object" + x-go-name: RootFSStorageSnapshot + properties: + Name: + description: "Name of the snapshotter." + type: "string" + x-nullable: false + + FilesystemChange: + description: | + Change in the container's filesystem. + type: "object" + required: [Path, Kind] + properties: + Path: + description: | + Path to file or directory that has changed. + type: "string" + x-nullable: false + Kind: + $ref: "#/definitions/ChangeType" + + ChangeType: + description: | + Kind of change + + Can be one of: + + - `0`: Modified ("C") + - `1`: Added ("A") + - `2`: Deleted ("D") + type: "integer" + format: "uint8" + enum: [0, 1, 2] + x-nullable: false + + ImageInspect: + description: | + Information about an image in the local image cache. + type: "object" + properties: + Id: + description: | + ID is the content-addressable ID of an image. + + This identifier is a content-addressable digest calculated from the + image's configuration (which includes the digests of layers used by + the image). + + Note that this digest differs from the `RepoDigests` below, which + holds digests of image manifests that reference the image. + type: "string" + x-nullable: false + example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + Descriptor: + description: | + Descriptor is an OCI descriptor of the image target. + In case of a multi-platform image, this descriptor points to the OCI index + or a manifest list. + + This field is only present if the daemon provides a multi-platform image store. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + x-nullable: true + $ref: "#/definitions/OCIDescriptor" + Manifests: + description: | + Manifests is a list of image manifests available in this image. It + provides a more detailed view of the platform-specific image manifests or + other image-attached data like build attestations. + + Only available if the daemon provides a multi-platform image store + and the `manifests` option is set in the inspect request. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + type: "array" + x-nullable: true + items: + $ref: "#/definitions/ImageManifestSummary" + Identity: + description: |- + Identity holds information about the identity and origin of the image. + This is trusted information verified by the daemon and cannot be modified + by tagging an image to a different name. + x-nullable: true + $ref: "#/definitions/Identity" + RepoTags: + description: | + List of image names/tags in the local image cache that reference this + image. + + Multiple image tags can refer to the same image, and this list may be + empty if no tags reference the image, in which case the image is + "untagged", in which case it can still be referenced by its ID. + type: "array" + items: + type: "string" + example: + - "example:1.0" + - "example:latest" + - "example:stable" + - "internal.registry.example.com:5000/example:1.0" + RepoDigests: + description: | + List of content-addressable digests of locally available image manifests + that the image is referenced from. Multiple manifests can refer to the + same image. + + These digests are usually only available if the image was either pulled + from a registry, or if the image was pushed to a registry, which is when + the manifest is generated and its digest calculated. + type: "array" + items: + type: "string" + example: + - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb" + - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + Comment: + description: | + Optional message that was set when committing or importing the image. + type: "string" + x-nullable: true + example: "" + Created: + description: | + Date and time at which the image was created, formatted in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + + This information is only available if present in the image, + and omitted otherwise. + type: "string" + format: "dateTime" + x-nullable: true + example: "2022-02-04T21:20:12.497794809Z" + Author: + description: | + Name of the author that was specified when committing the image, or as + specified through MAINTAINER (deprecated) in the Dockerfile. + type: "string" + x-nullable: true + example: "" + Config: + $ref: "#/definitions/ImageConfig" + Architecture: + description: | + Hardware CPU architecture that the image runs on. + type: "string" + x-nullable: false + example: "arm" + Variant: + description: | + CPU architecture variant (presently ARM-only). + type: "string" + x-nullable: true + example: "v7" + Os: + description: | + Operating System the image is built to run on. + type: "string" + x-nullable: false + example: "linux" + OsVersion: + description: | + Operating System version the image is built to run on (especially + for Windows). + type: "string" + example: "" + x-nullable: true + Size: + description: | + Total size of the image including all layers it is composed of. + type: "integer" + format: "int64" + x-nullable: false + example: 1239828 + GraphDriver: + x-nullable: true + $ref: "#/definitions/DriverData" + RootFS: + description: | + Information about the image's RootFS, including the layer IDs. + type: "object" + required: [Type] + properties: + Type: + type: "string" + x-nullable: false + example: "layers" + Layers: + type: "array" + items: + type: "string" + example: + - "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6" + - "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + Metadata: + description: | + Additional metadata of the image in the local cache. This information + is local to the daemon, and not part of the image itself. + type: "object" + properties: + LastTagTime: + description: | + Date and time at which the image was last tagged in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + + This information is only available if the image was tagged locally, + and omitted otherwise. + type: "string" + format: "dateTime" + example: "2022-02-28T14:40:02.623929178Z" + x-nullable: true + + Identity: + description: |- + Identity holds information about the identity and origin of the image. + This is trusted information verified by the daemon and cannot be modified + by tagging an image to a different name. + type: "object" + properties: + Signature: + description: |- + Signature contains the properties of verified signatures for the image. + type: "array" + items: + $ref: "#/definitions/SignatureIdentity" + Pull: + description: |- + Pull contains remote location information if image was created via pull. + If image was pulled via mirror, this contains the original repository location. + After successful push this images also contains the pushed repository location. + type: "array" + items: + $ref: "#/definitions/PullIdentity" + Build: + description: |- + Build contains build reference information if image was created via build. + type: "array" + items: + $ref: "#/definitions/BuildIdentity" + + BuildIdentity: + description: |- + BuildIdentity contains build reference information if image was created via build. + type: "object" + properties: + Ref: + description: |- + Ref is the identifier for the build request. This reference can be used to + look up the build details in BuildKit history API. + type: "string" + CreatedAt: + description: |- + CreatedAt is the time when the build ran. + type: "string" + format: "date-time" + + PullIdentity: + description: |- + PullIdentity contains remote location information if image was created via pull. + If image was pulled via mirror, this contains the original repository location. + type: "object" + properties: + Repository: + description: |- + Repository is the remote repository location the image was pulled from. + type: "string" + + SignatureIdentity: + description: |- + SignatureIdentity contains the properties of verified signatures for the image. + type: "object" + properties: + Name: + description: |- + Name is a textual description summarizing the type of signature. + type: "string" + Timestamps: + description: |- + Timestamps contains a list of verified signed timestamps for the signature. + type: "array" + items: + $ref: "#/definitions/SignatureTimestamp" + KnownSigner: + description: |- + KnownSigner is an identifier for a special signer identity that is known to the implementation. + $ref: "#/definitions/KnownSignerIdentity" + DockerReference: + description: |- + DockerReference is the Docker image reference associated with the signature. + This is an optional field only present in older hashedrecord signatures. + type: "string" + Signer: + description: |- + Signer contains information about the signer certificate used to sign the image. + $ref: "#/definitions/SignerIdentity" + SignatureType: + description: |- + SignatureType is the type of signature format. E.g. "bundle-v0.3" or "hashedrecord". + $ref: "#/definitions/SignatureType" + Error: + description: |- + Error contains error information if signature verification failed. + Other fields will be empty in this case. + type: "string" + Warnings: + description: |- + Warnings contains any warnings that occurred during signature verification. + For example, if there was no internet connectivity and cached trust roots were used. + Warning does not indicate a failed verification but may point to configuration issues. + type: "array" + items: + type: "string" + + SignatureTimestamp: + description: |- + SignatureTimestamp contains information about a verified signed timestamp for an image signature. + type: "object" + properties: + Type: + $ref: "#/definitions/SignatureTimestampType" + URI: + type: "string" + Timestamp: + type: "string" + format: "date-time" + + SignatureTimestampType: + description: |- + SignatureTimestampType is the type of timestamp used in the signature. + type: "string" + enum: + - "Tlog" + - "TimestampAuthority" + + SignatureType: + description: |- + SignatureType is the type of signature format. + type: "string" + enum: + - "bundle-v0.3" + - "simplesigning-v1" + + KnownSignerIdentity: + description: |- + KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation. + type: "string" + enum: + - "DHI" + + SignerIdentity: + description: |- + SignerIdentity contains information about the signer certificate used to sign the image. + type: "object" + properties: + CertificateIssuer: + type: "string" + description: |- + CertificateIssuer is the certificate issuer. + SubjectAlternativeName: + type: "string" + description: |- + SubjectAlternativeName is the certificate subject alternative name. + Issuer: + type: "string" + description: |- + The OIDC issuer. Should match `iss` claim of ID token or, in the case of + a federated login like Dex it should match the issuer URL of the + upstream issuer. The issuer is not set the extensions are invalid and + will fail to render. + BuildSignerURI: + type: "string" + description: |- + Reference to specific build instructions that are responsible for signing. + BuildSignerDigest: + type: "string" + description: |- + Immutable reference to the specific version of the build instructions that is responsible for signing. + RunnerEnvironment: + type: "string" + description: |- + Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure. + SourceRepositoryURI: + type: "string" + description: |- + Source repository URL that the build was based on. + SourceRepositoryDigest: + type: "string" + description: |- + Immutable reference to a specific version of the source code that the build was based upon. + SourceRepositoryRef: + type: "string" + description: |- + Source Repository Ref that the build run was based upon. + SourceRepositoryIdentifier: + type: "string" + description: |- + Immutable identifier for the source repository the workflow was based upon. + SourceRepositoryOwnerURI: + type: "string" + description: |- + Source repository owner URL of the owner of the source repository that the build was based on. + SourceRepositoryOwnerIdentifier: + type: "string" + description: |- + Immutable identifier for the owner of the source repository that the workflow was based upon. + BuildConfigURI: + type: "string" + description: |- + Build Config URL to the top-level/initiating build instructions. + BuildConfigDigest: + type: "string" + description: |- + Immutable reference to the specific version of the top-level/initiating build instructions. + BuildTrigger: + type: "string" + description: |- + Event or action that initiated the build. + RunInvocationURI: + type: "string" + description: |- + Run Invocation URL to uniquely identify the build execution. + SourceRepositoryVisibilityAtSigning: + type: "string" + description: |- + Source repository visibility at the time of signing the certificate. + + ImageSummary: + type: "object" + x-go-name: "Summary" + required: + - Id + - ParentId + - RepoTags + - RepoDigests + - Created + - Size + - SharedSize + - Labels + - Containers + properties: + Id: + description: | + ID is the content-addressable ID of an image. + + This identifier is a content-addressable digest calculated from the + image's configuration (which includes the digests of layers used by + the image). + + Note that this digest differs from the `RepoDigests` below, which + holds digests of image manifests that reference the image. + type: "string" + x-nullable: false + example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + ParentId: + description: | + ID of the parent image. + + Depending on how the image was created, this field may be empty and + is only set for images that were built/created locally. This field + is empty if the image was pulled from an image registry. + type: "string" + x-nullable: false + example: "" + RepoTags: + description: | + List of image names/tags in the local image cache that reference this + image. + + Multiple image tags can refer to the same image, and this list may be + empty if no tags reference the image, in which case the image is + "untagged", in which case it can still be referenced by its ID. + type: "array" + x-nullable: false + items: + type: "string" + example: + - "example:1.0" + - "example:latest" + - "example:stable" + - "internal.registry.example.com:5000/example:1.0" + RepoDigests: + description: | + List of content-addressable digests of locally available image manifests + that the image is referenced from. Multiple manifests can refer to the + same image. + + These digests are usually only available if the image was either pulled + from a registry, or if the image was pushed to a registry, which is when + the manifest is generated and its digest calculated. + type: "array" + x-nullable: false + items: + type: "string" + example: + - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb" + - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + Created: + description: | + Date and time at which the image was created as a Unix timestamp + (number of seconds since EPOCH). + type: "integer" + x-nullable: false + example: "1644009612" + Size: + description: | + Total size of the image including all layers it is composed of. + type: "integer" + format: "int64" + x-nullable: false + example: 172064416 + SharedSize: + description: | + Total size of image layers that are shared between this image and other + images. + + This size is not calculated by default. `-1` indicates that the value + has not been set / calculated. + type: "integer" + format: "int64" + x-nullable: false + example: 1239828 + Labels: + description: "User-defined key/value metadata." + type: "object" + x-nullable: false + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + Containers: + description: | + Number of containers using this image. Includes both stopped and running + containers. + + `-1` indicates that the value has not been set / calculated. + x-nullable: false + type: "integer" + example: 2 + Manifests: + description: | + Manifests is a list of manifests available in this image. + It provides a more detailed view of the platform-specific image manifests + or other image-attached data like build attestations. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + type: "array" + x-nullable: false + x-omitempty: true + items: + $ref: "#/definitions/ImageManifestSummary" + Descriptor: + description: | + Descriptor is an OCI descriptor of the image target. + In case of a multi-platform image, this descriptor points to the OCI index + or a manifest list. + + This field is only present if the daemon provides a multi-platform image store. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + x-nullable: true + $ref: "#/definitions/OCIDescriptor" + + ImagesDiskUsage: + type: "object" + x-go-name: "DiskUsage" + x-go-package: "github.com/moby/moby/api/types/image" + description: | + represents system data usage for image resources. + properties: + ActiveCount: + description: | + Count of active images. + type: "integer" + format: "int64" + example: 1 + TotalCount: + description: | + Count of all images. + type: "integer" + format: "int64" + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing unused images. + type: "integer" + format: "int64" + example: 12345678 + TotalSize: + description: | + Disk space in use by images. + type: "integer" + format: "int64" + example: 98765432 + Items: + description: | + List of image summaries. + type: "array" + x-omitempty: true + items: + x-go-type: + type: Summary + + AuthConfig: + type: "object" + properties: + username: + type: "string" + password: + type: "string" + serveraddress: + type: "string" + example: + username: "hannibal" + password: "xxxx" + serveraddress: "https://index.docker.io/v1/" + + AuthResponse: + description: | + An identity token was generated successfully. + type: "object" + required: [Status] + properties: + Status: + description: "The status of the authentication" + type: "string" + example: "Login Succeeded" + x-nullable: false + IdentityToken: + description: "An opaque token used to authenticate a user after a successful login" + type: "string" + example: "9cbaf023786cd7..." + x-nullable: false + + ProcessConfig: + type: "object" + properties: + privileged: + type: "boolean" + user: + type: "string" + tty: + type: "boolean" + entrypoint: + type: "string" + arguments: + type: "array" + items: + type: "string" + + Volume: + type: "object" + required: [Name, Driver, Mountpoint, Labels, Scope, Options] + x-nullable: false + properties: + Name: + type: "string" + description: "Name of the volume." + x-nullable: false + example: "tardis" + Driver: + type: "string" + description: "Name of the volume driver used by the volume." + x-nullable: false + example: "custom" + Mountpoint: + type: "string" + description: "Mount path of the volume on the host." + x-nullable: false + example: "/var/lib/docker/volumes/tardis" + CreatedAt: + type: "string" + format: "dateTime" + description: "Date/Time the volume was created." + example: "2016-06-07T20:31:11.853781916Z" + Status: + type: "object" + description: | + Low-level details about the volume, provided by the volume driver. + Details are returned as a map with key/value pairs: + `{"key":"value","key2":"value2"}`. + + The `Status` field is optional, and is omitted if the volume driver + does not support this feature. + additionalProperties: + type: "object" + example: + hello: "world" + Labels: + type: "object" + description: "User-defined key/value metadata." + x-nullable: false + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + Scope: + type: "string" + description: | + The level at which the volume exists. Either `global` for cluster-wide, + or `local` for machine level. + default: "local" + x-nullable: false + enum: ["local", "global"] + example: "local" + ClusterVolume: + $ref: "#/definitions/ClusterVolume" + Options: + type: "object" + description: | + The driver specific options used when creating the volume. + additionalProperties: + type: "string" + example: + device: "tmpfs" + o: "size=100m,uid=1000" + type: "tmpfs" + UsageData: + type: "object" + x-nullable: true + x-go-name: "UsageData" + required: [Size, RefCount] + description: | + Usage details about the volume. This information is used by the + `GET /system/df` endpoint, and omitted in other endpoints. + properties: + Size: + type: "integer" + format: "int64" + default: -1 + description: | + Amount of disk space used by the volume (in bytes). This information + is only available for volumes created with the `"local"` volume + driver. For volumes created with other volume drivers, this field + is set to `-1` ("not available") + x-nullable: false + RefCount: + type: "integer" + format: "int64" + default: -1 + description: | + The number of containers referencing this volume. This field + is set to `-1` if the reference-count is not available. + x-nullable: false + + VolumesDiskUsage: + type: "object" + x-go-name: "DiskUsage" + x-go-package: "github.com/moby/moby/api/types/volume" + description: | + represents system data usage for volume resources. + properties: + ActiveCount: + description: | + Count of active volumes. + type: "integer" + format: "int64" + example: 1 + TotalCount: + description: | + Count of all volumes. + type: "integer" + format: "int64" + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive volumes. + type: "integer" + format: "int64" + example: 12345678 + TotalSize: + description: | + Disk space in use by volumes. + type: "integer" + format: "int64" + example: 98765432 + Items: + description: | + List of volumes. + type: "array" + x-omitempty: true + items: + x-go-type: + type: Volume + + VolumeCreateRequest: + description: "Volume configuration" + type: "object" + title: "VolumeConfig" + x-go-name: "CreateRequest" + properties: + Name: + description: | + The new volume's name. If not specified, Docker generates a name. + type: "string" + x-nullable: false + example: "tardis" + Driver: + description: "Name of the volume driver to use." + type: "string" + default: "local" + x-nullable: false + example: "custom" + DriverOpts: + description: | + A mapping of driver options and values. These options are + passed directly to the driver and are driver specific. + type: "object" + additionalProperties: + type: "string" + example: + device: "tmpfs" + o: "size=100m,uid=1000" + type: "tmpfs" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + ClusterVolumeSpec: + $ref: "#/definitions/ClusterVolumeSpec" + + VolumeListResponse: + type: "object" + title: "VolumeListResponse" + x-go-name: "ListResponse" + description: "Volume list response" + properties: + Volumes: + type: "array" + description: "List of volumes" + items: + $ref: "#/definitions/Volume" + Warnings: + type: "array" + description: | + Warnings that occurred when fetching the list of volumes. + items: + type: "string" + example: [] + + Network: + type: "object" + properties: + Name: + description: | + Name of the network. + type: "string" + example: "my_network" + x-omitempty: false + Id: + description: | + ID that uniquely identifies a network on a single machine. + type: "string" + x-go-name: "ID" + x-omitempty: false + example: "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99" + Created: + description: | + Date and time at which the network was created in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + x-omitempty: false + x-go-type: + type: Time + import: + package: time + hints: + nullable: false + example: "2016-10-19T04:33:30.360899459Z" + Scope: + description: | + The level at which the network exists (e.g. `swarm` for cluster-wide + or `local` for machine level) + type: "string" + x-omitempty: false + example: "local" + Driver: + description: | + The name of the driver used to create the network (e.g. `bridge`, + `overlay`). + type: "string" + x-omitempty: false + example: "overlay" + EnableIPv4: + description: | + Whether the network was created with IPv4 enabled. + type: "boolean" + x-omitempty: false + example: true + EnableIPv6: + description: | + Whether the network was created with IPv6 enabled. + type: "boolean" + x-omitempty: false + example: false + IPAM: + description: | + The network's IP Address Management. + $ref: "#/definitions/IPAM" + x-nullable: false + x-omitempty: false + Internal: + description: | + Whether the network is created to only allow internal networking + connectivity. + type: "boolean" + x-nullable: false + x-omitempty: false + default: false + example: false + Attachable: + description: | + Whether a global / swarm scope network is manually attachable by regular + containers from workers in swarm mode. + type: "boolean" + x-nullable: false + x-omitempty: false + default: false + example: false + Ingress: + description: | + Whether the network is providing the routing-mesh for the swarm cluster. + type: "boolean" + x-nullable: false + x-omitempty: false + default: false + example: false + ConfigFrom: + $ref: "#/definitions/ConfigReference" + x-nullable: false + x-omitempty: false + ConfigOnly: + description: | + Whether the network is a config-only network. Config-only networks are + placeholder networks for network configurations to be used by other + networks. Config-only networks cannot be used directly to run containers + or services. + type: "boolean" + x-omitempty: false + x-nullable: false + default: false + Options: + description: | + Network-specific options uses when creating the network. + type: "object" + x-omitempty: false + additionalProperties: + type: "string" + example: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" + com.docker.network.bridge.name: "docker0" + com.docker.network.driver.mtu: "1500" + Labels: + description: | + Metadata specific to the network being created. + type: "object" + x-omitempty: false + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + Peers: + description: | + List of peer nodes for an overlay network. This field is only present + for overlay networks, and omitted for other network types. + type: "array" + x-omitempty: true + items: + $ref: "#/definitions/PeerInfo" + + NetworkSummary: + description: "Network list response item" + x-go-name: Summary + type: "object" + allOf: + - $ref: "#/definitions/Network" + + NetworkInspect: + description: 'The body of the "get network" http response message.' + x-go-name: Inspect + type: "object" + allOf: + - $ref: "#/definitions/Network" + properties: + Containers: + description: | + Contains endpoints attached to the network. + type: "object" + x-omitempty: false + additionalProperties: + $ref: "#/definitions/EndpointResource" + example: + 19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c: + Name: "test" + EndpointID: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" + MacAddress: "02:42:ac:13:00:02" + IPv4Address: "172.19.0.2/16" + IPv6Address: "" + Services: + description: | + List of services using the network. This field is only present for + swarm scope networks, and omitted for local scope networks. + type: "object" + x-omitempty: true + additionalProperties: + x-go-type: + type: ServiceInfo + hints: + nullable: false + Status: + description: > + provides runtime information about the network + such as the number of allocated IPs. + $ref: "#/definitions/NetworkStatus" + + NetworkStatus: + description: > + provides runtime information about the network + such as the number of allocated IPs. + type: "object" + x-go-name: Status + properties: + IPAM: + $ref: "#/definitions/IPAMStatus" + + ServiceInfo: + x-nullable: false + x-omitempty: false + description: > + represents service parameters with the list of service's tasks + type: "object" + properties: + VIP: + type: "string" + x-omitempty: false + x-go-type: + type: Addr + import: + package: net/netip + Ports: + type: "array" + x-omitempty: false + items: + type: "string" + LocalLBIndex: + type: "integer" + format: "int" + x-omitempty: false + x-go-type: + type: int + Tasks: + type: "array" + x-omitempty: false + items: + $ref: "#/definitions/NetworkTaskInfo" + + NetworkTaskInfo: + x-nullable: false + x-omitempty: false + x-go-name: Task + description: > + carries the information about one backend task + type: "object" + properties: + Name: + type: "string" + x-omitempty: false + EndpointID: + type: "string" + x-omitempty: false + EndpointIP: + type: "string" + x-omitempty: false + x-go-type: + type: Addr + import: + package: net/netip + Info: + type: "object" + x-omitempty: false + additionalProperties: + type: "string" + + ConfigReference: + x-nullable: false + x-omitempty: false + description: | + The config-only network source to provide the configuration for + this network. + type: "object" + properties: + Network: + description: | + The name of the config-only network that provides the network's + configuration. The specified network must be an existing config-only + network. Only network names are allowed, not network IDs. + type: "string" + x-omitempty: false + example: "config_only_network_01" + + IPAM: + type: "object" + x-nullable: false + x-omitempty: false + properties: + Driver: + description: "Name of the IPAM driver to use." + type: "string" + default: "default" + example: "default" + Config: + description: | + List of IPAM configuration options, specified as a map: + + ``` + {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } + ``` + type: "array" + items: + $ref: "#/definitions/IPAMConfig" + Options: + description: "Driver-specific options, specified as a map." + type: "object" + additionalProperties: + type: "string" + example: + foo: "bar" + + IPAMConfig: + type: "object" + properties: + Subnet: + type: "string" + example: "172.20.0.0/16" + IPRange: + type: "string" + example: "172.20.10.0/24" + Gateway: + type: "string" + example: "172.20.10.11" + AuxiliaryAddresses: + type: "object" + additionalProperties: + type: "string" + + IPAMStatus: + type: "object" + x-nullable: false + x-omitempty: false + properties: + Subnets: + type: "object" + additionalProperties: + $ref: "#/definitions/SubnetStatus" + example: + "172.16.0.0/16": + IPsInUse: 3 + DynamicIPsAvailable: 65533 + "2001:db8:abcd:0012::0/96": + IPsInUse: 5 + DynamicIPsAvailable: 4294967291 + x-go-type: + type: SubnetStatuses + kind: map + + SubnetStatus: + type: "object" + x-nullable: false + x-omitempty: false + properties: + IPsInUse: + description: > + Number of IP addresses in the subnet that are in use or reserved and + are therefore unavailable for allocation, saturating at 264 - 1. + type: integer + format: uint64 + x-omitempty: false + DynamicIPsAvailable: + description: > + Number of IP addresses within the network's IPRange for the subnet + that are available for allocation, saturating at 264 - 1. + type: integer + format: uint64 + x-omitempty: false + + EndpointResource: + type: "object" + description: > + contains network resources allocated and used for a + container in a network. + properties: + Name: + type: "string" + x-omitempty: false + example: "container_1" + EndpointID: + type: "string" + x-omitempty: false + example: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" + MacAddress: + type: "string" + x-omitempty: false + example: "02:42:ac:13:00:02" + x-go-type: + type: HardwareAddr + IPv4Address: + type: "string" + x-omitempty: false + example: "172.19.0.2/16" + x-go-type: + type: Prefix + import: + package: net/netip + IPv6Address: + type: "string" + x-omitempty: false + example: "" + x-go-type: + type: Prefix + import: + package: net/netip + + PeerInfo: + description: > + represents one peer of an overlay network. + type: "object" + x-nullable: false + properties: + Name: + description: + ID of the peer-node in the Swarm cluster. + type: "string" + x-omitempty: false + example: "6869d7c1732b" + IP: + description: + IP-address of the peer-node in the Swarm cluster. + type: "string" + x-omitempty: false + example: "10.133.77.91" + x-go-type: + type: Addr + import: + package: net/netip + + NetworkCreateResponse: + description: "OK response to NetworkCreate operation" + type: "object" + title: "NetworkCreateResponse" + x-go-name: "CreateResponse" + required: [Id, Warning] + properties: + Id: + description: "The ID of the created network." + type: "string" + x-nullable: false + example: "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d" + Warning: + description: "Warnings encountered when creating the container" + type: "string" + x-nullable: false + example: "" + + BuildInfo: + type: "object" + properties: + id: + type: "string" + stream: + type: "string" + errorDetail: + $ref: "#/definitions/ErrorDetail" + status: + type: "string" + progressDetail: + $ref: "#/definitions/ProgressDetail" + aux: + $ref: "#/definitions/ImageID" + + BuildCache: + type: "object" + description: | + BuildCache contains information about a build cache record. + properties: + ID: + type: "string" + description: | + Unique ID of the build cache record. + example: "ndlpt0hhvkqcdfkputsk4cq9c" + Parents: + description: | + List of parent build cache record IDs. + type: "array" + items: + type: "string" + x-nullable: true + example: ["hw53o5aio51xtltp5xjp8v7fx"] + Type: + type: "string" + description: | + Cache record type. + example: "regular" + # see https://github.com/moby/buildkit/blob/fce4a32258dc9d9664f71a4831d5de10f0670677/client/diskusage.go#L75-L84 + enum: + - "internal" + - "frontend" + - "source.local" + - "source.git.checkout" + - "exec.cachemount" + - "regular" + Description: + type: "string" + description: | + Description of the build-step that produced the build cache. + example: "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + InUse: + type: "boolean" + description: | + Indicates if the build cache is in use. + example: false + Shared: + type: "boolean" + description: | + Indicates if the build cache is shared. + example: true + Size: + description: | + Amount of disk space used by the build cache (in bytes). + type: "integer" + example: 51 + CreatedAt: + description: | + Date and time at which the build cache was created in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2016-08-18T10:44:24.496525531Z" + LastUsedAt: + description: | + Date and time at which the build cache was last used in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + x-nullable: true + example: "2017-08-09T07:09:37.632105588Z" + UsageCount: + type: "integer" + example: 26 + + BuildCacheDiskUsage: + type: "object" + x-go-name: "DiskUsage" + x-go-package: "github.com/moby/moby/api/types/build" + description: | + represents system data usage for build cache resources. + properties: + ActiveCount: + description: | + Count of active build cache records. + type: "integer" + format: "int64" + example: 1 + TotalCount: + description: | + Count of all build cache records. + type: "integer" + format: "int64" + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive build cache records. + type: "integer" + format: "int64" + example: 12345678 + TotalSize: + description: | + Disk space in use by build cache records. + type: "integer" + format: "int64" + example: 98765432 + Items: + description: | + List of build cache records. + type: "array" + x-omitempty: true + items: + x-go-type: + type: CacheRecord + + ImageID: + type: "object" + description: "Image ID or Digest" + properties: + ID: + type: "string" + example: + ID: "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + + CreateImageInfo: + type: "object" + properties: + id: + type: "string" + errorDetail: + $ref: "#/definitions/ErrorDetail" + status: + type: "string" + progressDetail: + $ref: "#/definitions/ProgressDetail" + + PushImageInfo: + type: "object" + properties: + errorDetail: + $ref: "#/definitions/ErrorDetail" + status: + type: "string" + progressDetail: + $ref: "#/definitions/ProgressDetail" + + DeviceInfo: + type: "object" + description: | + DeviceInfo represents a device that can be used by a container. + properties: + Source: + type: "string" + example: "cdi" + description: | + The origin device driver. + ID: + type: "string" + example: "vendor.com/gpu=0" + description: | + The unique identifier for the device within its source driver. + For CDI devices, this would be an FQDN like "vendor.com/gpu=0". + + NRIInfo: + description: | + Information about the Node Resource Interface (NRI). + + This field is only present if NRI is enabled. + type: "object" + x-nullable: true + properties: + Info: + description: | + Information about NRI, provided as "label" / "value" pairs. + +


+ + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: "array" + items: + type: "array" + items: + type: "string" + example: + - ["plugin-path", "/opt/docker/nri/plugins"] + + ErrorDetail: + type: "object" + properties: + code: + type: "integer" + message: + type: "string" + + ProgressDetail: + type: "object" + properties: + current: + type: "integer" + total: + type: "integer" + + ErrorResponse: + description: "Represents an error." + type: "object" + required: ["message"] + properties: + message: + description: "The error message." + type: "string" + x-nullable: false + example: + message: "Something went wrong." + + IDResponse: + description: "Response to an API call that returns just an Id" + type: "object" + x-go-name: "IDResponse" + required: ["Id"] + properties: + Id: + description: "The id of the newly created object." + type: "string" + x-nullable: false + + NetworkConnectRequest: + description: | + NetworkConnectRequest represents the data to be used to connect a container to a network. + type: "object" + x-go-name: "ConnectRequest" + required: ["Container"] + properties: + Container: + type: "string" + description: "The ID or name of the container to connect to the network." + x-nullable: false + example: "3613f73ba0e4" + EndpointConfig: + $ref: "#/definitions/EndpointSettings" + x-nullable: true + + NetworkDisconnectRequest: + description: | + NetworkDisconnectRequest represents the data to be used to disconnect a container from a network. + type: "object" + x-go-name: "DisconnectRequest" + required: ["Container"] + properties: + Container: + type: "string" + description: "The ID or name of the container to disconnect from the network." + x-nullable: false + example: "3613f73ba0e4" + Force: + type: "boolean" + description: "Force the container to disconnect from the network." + default: false + x-nullable: false + x-omitempty: false + example: false + + EndpointSettings: + description: "Configuration for a network endpoint." + type: "object" + properties: + # Configurations + IPAMConfig: + $ref: "#/definitions/EndpointIPAMConfig" + Links: + type: "array" + items: + type: "string" + example: + - "container_1" + - "container_2" + MacAddress: + description: | + MAC address for the endpoint on this network. The network driver might ignore this parameter. + type: "string" + example: "02:42:ac:11:00:04" + x-go-type: + type: HardwareAddr + Aliases: + type: "array" + items: + type: "string" + example: + - "server_x" + - "server_y" + DriverOpts: + description: | + DriverOpts is a mapping of driver options and values. These options + are passed directly to the driver and are driver specific. + type: "object" + x-nullable: true + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + GwPriority: + description: | + This property determines which endpoint will provide the default + gateway for a container. The endpoint with the highest priority will + be used. If multiple endpoints have the same priority, endpoints are + lexicographically sorted based on their network name, and the one + that sorts first is picked. + type: "integer" + format: "int64" + example: + - 10 + + # Operational data + NetworkID: + description: | + Unique ID of the network. + type: "string" + example: "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + EndpointID: + description: | + Unique ID for the service endpoint in a Sandbox. + type: "string" + example: "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + Gateway: + description: | + Gateway address for this network. + type: "string" + example: "172.17.0.1" + IPAddress: + description: | + IPv4 address. + type: "string" + example: "172.17.0.4" + x-go-type: + type: Addr + import: + package: net/netip + IPPrefixLen: + description: | + Mask length of the IPv4 address. + type: "integer" + example: 16 + IPv6Gateway: + description: | + IPv6 gateway address. + type: "string" + example: "2001:db8:2::100" + x-go-type: + type: Addr + import: + package: net/netip + GlobalIPv6Address: + description: | + Global IPv6 address. + type: "string" + example: "2001:db8::5689" + x-go-type: + type: Addr + import: + package: net/netip + GlobalIPv6PrefixLen: + description: | + Mask length of the global IPv6 address. + type: "integer" + format: "int64" + example: 64 + DNSNames: + description: | + List of all DNS names an endpoint has on a specific network. This + list is based on the container name, network aliases, container short + ID, and hostname. + + These DNS names are non-fully qualified but can contain several dots. + You can get fully qualified DNS names by appending `.`. + For instance, if container name is `my.ctr` and the network is named + `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be + `my.ctr.testnet`. + type: array + items: + type: string + example: ["foobar", "server_x", "server_y", "my.ctr"] + + EndpointIPAMConfig: + description: | + EndpointIPAMConfig represents an endpoint's IPAM configuration. + type: "object" + x-nullable: true + properties: + IPv4Address: + type: "string" + example: "172.20.30.33" + x-go-type: + type: Addr + import: + package: net/netip + IPv6Address: + type: "string" + example: "2001:db8:abcd::3033" + x-go-type: + type: Addr + import: + package: net/netip + LinkLocalIPs: + type: "array" + items: + type: "string" + x-go-type: + type: Addr + import: + package: net/netip + example: + - "169.254.34.68" + - "fe80::3468" + + PluginMount: + type: "object" + x-go-name: "Mount" + x-nullable: false + required: [Name, Description, Settable, Source, Destination, Type, Options] + properties: + Name: + type: "string" + x-nullable: false + example: "some-mount" + Description: + type: "string" + x-nullable: false + example: "This is a mount that's used by the plugin." + Settable: + type: "array" + items: + type: "string" + Source: + type: "string" + example: "/var/lib/docker/plugins/" + Destination: + type: "string" + x-nullable: false + example: "/mnt/state" + Type: + type: "string" + x-nullable: false + example: "bind" + Options: + type: "array" + items: + type: "string" + example: + - "rbind" + - "rw" + + PluginDevice: + type: "object" + x-go-name: "Device" + required: [Name, Description, Settable, Path] + x-nullable: false + properties: + Name: + type: "string" + x-nullable: false + Description: + type: "string" + x-nullable: false + Settable: + type: "array" + items: + type: "string" + Path: + type: "string" + example: "/dev/fuse" + + PluginEnv: + type: "object" + x-go-name: "Env" + x-nullable: false + required: [Name, Description, Settable, Value] + properties: + Name: + x-nullable: false + type: "string" + Description: + x-nullable: false + type: "string" + Settable: + type: "array" + items: + type: "string" + Value: + type: "string" + + PluginPrivilege: + description: | + Describes a permission the user has to accept upon installing + the plugin. + type: "object" + x-go-name: "Privilege" + properties: + Name: + type: "string" + example: "network" + Description: + type: "string" + Value: + type: "array" + items: + type: "string" + example: + - "host" + + Plugin: + description: "A plugin for the Engine API" + type: "object" + x-go-name: "Plugin" + required: [Settings, Enabled, Config, Name] + properties: + Id: + type: "string" + example: "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + Name: + type: "string" + x-nullable: false + example: "tiborvass/sample-volume-plugin" + Enabled: + description: + True if the plugin is running. False if the plugin is not running, + only installed. + type: "boolean" + x-nullable: false + example: true + Settings: + description: "user-configurable settings for the plugin." + type: "object" + x-go-name: "Settings" + x-nullable: false + required: [Args, Devices, Env, Mounts] + properties: + Mounts: + type: "array" + items: + $ref: "#/definitions/PluginMount" + Env: + type: "array" + items: + type: "string" + example: + - "DEBUG=0" + Args: + type: "array" + items: + type: "string" + Devices: + type: "array" + items: + $ref: "#/definitions/PluginDevice" + PluginReference: + description: "plugin remote reference used to push/pull the plugin" + type: "string" + x-go-name: "PluginReference" + x-nullable: false + example: "localhost:5000/tiborvass/sample-volume-plugin:latest" + Config: + description: "The config of a plugin." + type: "object" + x-go-name: "Config" + x-nullable: false + required: + - Description + - Documentation + - Interface + - Entrypoint + - WorkDir + - Network + - Linux + - PidHost + - PropagatedMount + - IpcHost + - Mounts + - Env + - Args + properties: + Description: + type: "string" + x-nullable: false + example: "A sample volume plugin for Docker" + Documentation: + type: "string" + x-nullable: false + example: "https://docs.docker.com/engine/extend/plugins/" + Interface: + description: "The interface between Docker and the plugin" + x-nullable: false + type: "object" + x-go-name: "Interface" + required: [Types, Socket] + properties: + Types: + type: "array" + items: + type: "string" + x-go-type: + type: "CapabilityID" + example: + - "docker.volumedriver/1.0" + Socket: + type: "string" + x-nullable: false + example: "plugins.sock" + ProtocolScheme: + type: "string" + example: "some.protocol/v1.0" + description: "Protocol to use for clients connecting to the plugin." + enum: + - "" + - "moby.plugins.http/v1" + Entrypoint: + type: "array" + items: + type: "string" + example: + - "/usr/bin/sample-volume-plugin" + - "/data" + WorkDir: + type: "string" + x-nullable: false + example: "/bin/" + User: + type: "object" + x-go-name: "User" + x-nullable: false + properties: + UID: + type: "integer" + format: "uint32" + example: 1000 + GID: + type: "integer" + format: "uint32" + example: 1000 + Network: + type: "object" + x-go-name: "NetworkConfig" + x-nullable: false + required: [Type] + properties: + Type: + x-nullable: false + type: "string" + example: "host" + Linux: + type: "object" + x-go-name: "LinuxConfig" + x-nullable: false + required: [Capabilities, AllowAllDevices, Devices] + properties: + Capabilities: + type: "array" + items: + type: "string" + example: + - "CAP_SYS_ADMIN" + - "CAP_SYSLOG" + AllowAllDevices: + type: "boolean" + x-nullable: false + example: false + Devices: + type: "array" + items: + $ref: "#/definitions/PluginDevice" + PropagatedMount: + type: "string" + x-nullable: false + example: "/mnt/volumes" + IpcHost: + type: "boolean" + x-nullable: false + example: false + PidHost: + type: "boolean" + x-nullable: false + example: false + Mounts: + type: "array" + items: + $ref: "#/definitions/PluginMount" + Env: + type: "array" + items: + $ref: "#/definitions/PluginEnv" + example: + - Name: "DEBUG" + Description: "If set, prints debug messages" + Settable: null + Value: "0" + Args: + type: "object" + x-go-name: "Args" + x-nullable: false + required: [Name, Description, Settable, Value] + properties: + Name: + x-nullable: false + type: "string" + example: "args" + Description: + x-nullable: false + type: "string" + example: "command line arguments" + Settable: + type: "array" + items: + type: "string" + Value: + type: "array" + items: + type: "string" + rootfs: + type: "object" + x-go-name: "RootFS" + properties: + type: + type: "string" + example: "layers" + diff_ids: + type: "array" + items: + type: "string" + example: + - "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887" + - "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + + ObjectVersion: + description: | + The version number of the object such as node, service, etc. This is needed + to avoid conflicting writes. The client must send the version number along + with the modified specification when updating these objects. + + This approach ensures safe concurrency and determinism in that the change + on the object may not be applied if the version number has changed from the + last read. In other words, if two update requests specify the same base + version, only one of the requests can succeed. As a result, two separate + update requests that happen at the same time will not unintentionally + overwrite each other. + type: "object" + properties: + Index: + type: "integer" + format: "uint64" + example: 373531 + + NodeSpec: + type: "object" + properties: + Name: + description: "Name for the node." + type: "string" + example: "my-node" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + Role: + description: "Role of the node." + type: "string" + enum: + - "worker" + - "manager" + example: "manager" + Availability: + description: "Availability of the node." + type: "string" + enum: + - "active" + - "pause" + - "drain" + example: "active" + example: + Availability: "active" + Name: "node-name" + Role: "manager" + Labels: + foo: "bar" + + Node: + type: "object" + properties: + ID: + type: "string" + example: "24ifsmvkjbyhk" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + description: | + Date and time at which the node was added to the swarm in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2016-08-18T10:44:24.496525531Z" + UpdatedAt: + description: | + Date and time at which the node was last updated in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2017-08-09T07:09:37.632105588Z" + Spec: + $ref: "#/definitions/NodeSpec" + Description: + $ref: "#/definitions/NodeDescription" + Status: + $ref: "#/definitions/NodeStatus" + ManagerStatus: + $ref: "#/definitions/ManagerStatus" + + NodeDescription: + description: | + NodeDescription encapsulates the properties of the Node as reported by the + agent. + type: "object" + properties: + Hostname: + type: "string" + example: "bf3067039e47" + Platform: + $ref: "#/definitions/Platform" + Resources: + $ref: "#/definitions/ResourceObject" + Engine: + $ref: "#/definitions/EngineDescription" + TLSInfo: + $ref: "#/definitions/TLSInfo" + + Platform: + description: | + Platform represents the platform (Arch/OS). + type: "object" + properties: + Architecture: + description: | + Architecture represents the hardware architecture (for example, + `x86_64`). + type: "string" + example: "x86_64" + OS: + description: | + OS represents the Operating System (for example, `linux` or `windows`). + type: "string" + example: "linux" + + EngineDescription: + description: "EngineDescription provides information about an engine." + type: "object" + properties: + EngineVersion: + type: "string" + example: "17.06.0" + Labels: + type: "object" + additionalProperties: + type: "string" + example: + foo: "bar" + Plugins: + type: "array" + items: + type: "object" + properties: + Type: + type: "string" + Name: + type: "string" + example: + - Type: "Log" + Name: "awslogs" + - Type: "Log" + Name: "fluentd" + - Type: "Log" + Name: "gcplogs" + - Type: "Log" + Name: "gelf" + - Type: "Log" + Name: "journald" + - Type: "Log" + Name: "json-file" + - Type: "Log" + Name: "splunk" + - Type: "Log" + Name: "syslog" + - Type: "Network" + Name: "bridge" + - Type: "Network" + Name: "host" + - Type: "Network" + Name: "ipvlan" + - Type: "Network" + Name: "macvlan" + - Type: "Network" + Name: "null" + - Type: "Network" + Name: "overlay" + - Type: "Volume" + Name: "local" + - Type: "Volume" + Name: "localhost:5000/vieux/sshfs:latest" + - Type: "Volume" + Name: "vieux/sshfs:latest" + + TLSInfo: + description: | + Information about the issuer of leaf TLS certificates and the trusted root + CA certificate. + type: "object" + properties: + TrustRoot: + description: | + The root CA certificate(s) that are used to validate leaf TLS + certificates. + type: "string" + CertIssuerSubject: + description: + The base64-url-safe-encoded raw subject bytes of the issuer. + type: "string" + CertIssuerPublicKey: + description: | + The base64-url-safe-encoded raw public key bytes of the issuer. + type: "string" + example: + TrustRoot: | + -----BEGIN CERTIFICATE----- + MIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw + EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0 + MzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH + A0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf + 3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB + Af8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO + PQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz + pxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H + -----END CERTIFICATE----- + CertIssuerSubject: "MBMxETAPBgNVBAMTCHN3YXJtLWNh" + CertIssuerPublicKey: "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + + NodeStatus: + description: | + NodeStatus represents the status of a node. + + It provides the current status of the node, as seen by the manager. + type: "object" + properties: + State: + $ref: "#/definitions/NodeState" + Message: + type: "string" + example: "" + Addr: + description: "IP address of the node." + type: "string" + example: "172.17.0.2" + + NodeState: + description: "NodeState represents the state of a node." + type: "string" + enum: + - "unknown" + - "down" + - "ready" + - "disconnected" + example: "ready" + + ManagerStatus: + description: | + ManagerStatus represents the status of a manager. + + It provides the current status of a node's manager component, if the node + is a manager. + x-nullable: true + type: "object" + properties: + Leader: + type: "boolean" + default: false + example: true + Reachability: + $ref: "#/definitions/Reachability" + Addr: + description: | + The IP address and port at which the manager is reachable. + type: "string" + example: "10.0.0.46:2377" + + Reachability: + description: "Reachability represents the reachability of a node." + type: "string" + enum: + - "unknown" + - "unreachable" + - "reachable" + example: "reachable" + + SwarmSpec: + description: "User modifiable swarm configuration." + type: "object" + properties: + Name: + description: "Name of the swarm." + type: "string" + example: "default" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.corp.type: "production" + com.example.corp.department: "engineering" + Orchestration: + description: "Orchestration configuration." + type: "object" + x-nullable: true + properties: + TaskHistoryRetentionLimit: + description: | + The number of historic tasks to keep per instance or node. If + negative, never remove completed or failed tasks. + type: "integer" + format: "int64" + example: 10 + Raft: + description: "Raft configuration." + type: "object" + properties: + SnapshotInterval: + description: "The number of log entries between snapshots." + type: "integer" + format: "uint64" + example: 10000 + KeepOldSnapshots: + description: | + The number of snapshots to keep beyond the current snapshot. + type: "integer" + format: "uint64" + LogEntriesForSlowFollowers: + description: | + The number of log entries to keep around to sync up slow followers + after a snapshot is created. + type: "integer" + format: "uint64" + example: 500 + ElectionTick: + description: | + The number of ticks that a follower will wait for a message from + the leader before becoming a candidate and starting an election. + `ElectionTick` must be greater than `HeartbeatTick`. + + A tick currently defaults to one second, so these translate + directly to seconds currently, but this is NOT guaranteed. + type: "integer" + example: 3 + HeartbeatTick: + description: | + The number of ticks between heartbeats. Every HeartbeatTick ticks, + the leader will send a heartbeat to the followers. + + A tick currently defaults to one second, so these translate + directly to seconds currently, but this is NOT guaranteed. + type: "integer" + example: 1 + Dispatcher: + description: "Dispatcher configuration." + type: "object" + x-nullable: true + properties: + HeartbeatPeriod: + description: | + The delay for an agent to send a heartbeat to the dispatcher. + type: "integer" + format: "int64" + example: 5000000000 + CAConfig: + description: "CA configuration." + type: "object" + x-nullable: true + properties: + NodeCertExpiry: + description: "The duration node certificates are issued for." + type: "integer" + format: "int64" + example: 7776000000000000 + ExternalCAs: + description: | + Configuration for forwarding signing requests to an external + certificate authority. + type: "array" + items: + type: "object" + properties: + Protocol: + description: | + Protocol for communication with the external CA (currently + only `cfssl` is supported). + type: "string" + enum: + - "cfssl" + default: "cfssl" + URL: + description: | + URL where certificate signing requests should be sent. + type: "string" + Options: + description: | + An object with key/value pairs that are interpreted as + protocol-specific options for the external CA driver. + type: "object" + additionalProperties: + type: "string" + CACert: + description: | + The root CA certificate (in PEM format) this external CA uses + to issue TLS certificates (assumed to be to the current swarm + root CA certificate if not provided). + type: "string" + SigningCACert: + description: | + The desired signing CA certificate for all swarm node TLS leaf + certificates, in PEM format. + type: "string" + SigningCAKey: + description: | + The desired signing CA key for all swarm node TLS leaf certificates, + in PEM format. + type: "string" + ForceRotate: + description: | + An integer whose purpose is to force swarm to generate a new + signing CA certificate and key, if none have been specified in + `SigningCACert` and `SigningCAKey` + format: "uint64" + type: "integer" + EncryptionConfig: + description: "Parameters related to encryption-at-rest." + type: "object" + properties: + AutoLockManagers: + description: | + If set, generate a key and use it to lock data stored on the + managers. + type: "boolean" + example: false + TaskDefaults: + description: "Defaults for creating tasks in this cluster." + type: "object" + properties: + LogDriver: + description: | + The log driver to use for tasks created in the orchestrator if + unspecified by a service. + + Updating this value only affects new tasks. Existing tasks continue + to use their previously configured log driver until recreated. + type: "object" + properties: + Name: + description: | + The log driver to use as a default for new tasks. + type: "string" + example: "json-file" + Options: + description: | + Driver-specific options for the selected log driver, specified + as key/value pairs. + type: "object" + additionalProperties: + type: "string" + example: + "max-file": "10" + "max-size": "100m" + + # The Swarm information for `GET /info`. It is the same as `GET /swarm`, but + # without `JoinTokens`. + ClusterInfo: + description: | + ClusterInfo represents information about the swarm as is returned by the + "/info" endpoint. Join-tokens are not included. + x-nullable: true + type: "object" + properties: + ID: + description: "The ID of the swarm." + type: "string" + example: "abajmipo7b4xz5ip2nrla6b11" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + description: | + Date and time at which the swarm was initialised in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2016-08-18T10:44:24.496525531Z" + UpdatedAt: + description: | + Date and time at which the swarm was last updated in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2017-08-09T07:09:37.632105588Z" + Spec: + $ref: "#/definitions/SwarmSpec" + TLSInfo: + $ref: "#/definitions/TLSInfo" + RootRotationInProgress: + description: | + Whether there is currently a root CA rotation in progress for the swarm + type: "boolean" + example: false + DataPathPort: + description: | + DataPathPort specifies the data path port number for data traffic. + Acceptable port range is 1024 to 49151. + If no port is set or is set to 0, the default port (4789) is used. + type: "integer" + format: "uint32" + default: 4789 + example: 4789 + DefaultAddrPool: + description: | + Default Address Pool specifies default subnet pools for global scope + networks. + type: "array" + items: + type: "string" + format: "CIDR" + example: ["10.10.0.0/16", "20.20.0.0/16"] + SubnetSize: + description: | + SubnetSize specifies the subnet size of the networks created from the + default subnet pool. + type: "integer" + format: "uint32" + maximum: 29 + default: 24 + example: 24 + + JoinTokens: + description: | + JoinTokens contains the tokens workers and managers need to join the swarm. + type: "object" + properties: + Worker: + description: | + The token workers can use to join the swarm. + type: "string" + example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + Manager: + description: | + The token managers can use to join the swarm. + type: "string" + example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + + Swarm: + type: "object" + allOf: + - $ref: "#/definitions/ClusterInfo" + - type: "object" + properties: + JoinTokens: + $ref: "#/definitions/JoinTokens" + + TaskSpec: + description: "User modifiable task configuration." + type: "object" + properties: + PluginSpec: + type: "object" + description: | + Plugin spec for the service. *(Experimental release only.)* + +


+ + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + properties: + Name: + description: "The name or 'alias' to use for the plugin." + type: "string" + Remote: + description: "The plugin image reference to use." + type: "string" + Disabled: + description: "Disable the plugin once scheduled." + type: "boolean" + PluginPrivilege: + type: "array" + items: + $ref: "#/definitions/PluginPrivilege" + ContainerSpec: + type: "object" + description: | + Container spec for the service. + +


+ + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + properties: + Image: + description: "The image name to use for the container" + type: "string" + Labels: + description: "User-defined key/value data." + type: "object" + additionalProperties: + type: "string" + Command: + description: "The command to be run in the image." + type: "array" + items: + type: "string" + Args: + description: "Arguments to the command." + type: "array" + items: + type: "string" + Hostname: + description: | + The hostname to use for the container, as a valid + [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. + type: "string" + Env: + description: | + A list of environment variables in the form `VAR=value`. + type: "array" + items: + type: "string" + Dir: + description: "The working directory for commands to run in." + type: "string" + User: + description: "The user inside the container." + type: "string" + Groups: + type: "array" + description: | + A list of additional groups that the container process will run as. + items: + type: "string" + Privileges: + type: "object" + description: "Security options for the container" + properties: + CredentialSpec: + type: "object" + description: "CredentialSpec for managed service account (Windows only)" + properties: + Config: + type: "string" + example: "0bt9dmxjvjiqermk6xrop3ekq" + description: | + Load credential spec from a Swarm Config with the given ID. + The specified config must also be present in the Configs + field with the Runtime property set. + +


+ + + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + File: + type: "string" + example: "spec.json" + description: | + Load credential spec from this file. The file is read by + the daemon, and must be present in the `CredentialSpecs` + subdirectory in the docker data directory, which defaults + to `C:\ProgramData\Docker\` on Windows. + + For example, specifying `spec.json` loads + `C:\ProgramData\Docker\CredentialSpecs\spec.json`. + +


+ + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + Registry: + type: "string" + description: | + Load credential spec from this value in the Windows + registry. The specified registry value must be located in: + + `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` + +


+ + + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + SELinuxContext: + type: "object" + description: "SELinux labels of the container" + properties: + Disable: + type: "boolean" + description: "Disable SELinux" + User: + type: "string" + description: "SELinux user label" + Role: + type: "string" + description: "SELinux role label" + Type: + type: "string" + description: "SELinux type label" + Level: + type: "string" + description: "SELinux level label" + Seccomp: + type: "object" + description: "Options for configuring seccomp on the container" + properties: + Mode: + type: "string" + enum: + - "default" + - "unconfined" + - "custom" + Profile: + description: "The custom seccomp profile as a json object" + type: "string" + AppArmor: + type: "object" + description: "Options for configuring AppArmor on the container" + properties: + Mode: + type: "string" + enum: + - "default" + - "disabled" + NoNewPrivileges: + type: "boolean" + description: "Configuration of the no_new_privs bit in the container" + + TTY: + description: "Whether a pseudo-TTY should be allocated." + type: "boolean" + OpenStdin: + description: "Open `stdin`" + type: "boolean" + ReadOnly: + description: "Mount the container's root filesystem as read only." + type: "boolean" + Mounts: + description: | + Specification for mounts to be added to containers created as part + of the service. + type: "array" + items: + $ref: "#/definitions/Mount" + StopSignal: + description: "Signal to stop the container." + type: "string" + StopGracePeriod: + description: | + Amount of time to wait for the container to terminate before + forcefully killing it. + type: "integer" + format: "int64" + Healthcheck: + $ref: "#/definitions/HealthConfig" + Hosts: + type: "array" + description: | + A list of hostname/IP mappings to add to the container's `hosts` + file. The format of extra hosts is specified in the + [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) + man page: + + IP_address canonical_hostname [aliases...] + items: + type: "string" + DNSConfig: + description: | + Specification for DNS related configurations in resolver configuration + file (`resolv.conf`). + type: "object" + properties: + Nameservers: + description: "The IP addresses of the name servers." + type: "array" + items: + type: "string" + Search: + description: "A search list for host-name lookup." + type: "array" + items: + type: "string" + Options: + description: | + A list of internal resolver variables to be modified (e.g., + `debug`, `ndots:3`, etc.). + type: "array" + items: + type: "string" + Secrets: + description: | + Secrets contains references to zero or more secrets that will be + exposed to the service. + type: "array" + items: + type: "object" + properties: + File: + description: | + File represents a specific target that is backed by a file. + type: "object" + properties: + Name: + description: | + Name represents the final filename in the filesystem. + type: "string" + UID: + description: "UID represents the file UID." + type: "string" + GID: + description: "GID represents the file GID." + type: "string" + Mode: + description: "Mode represents the FileMode of the file." + type: "integer" + format: "uint32" + SecretID: + description: | + SecretID represents the ID of the specific secret that we're + referencing. + type: "string" + SecretName: + description: | + SecretName is the name of the secret that this references, + but this is just provided for lookup/display purposes. The + secret in the reference will be identified by its ID. + type: "string" + OomScoreAdj: + type: "integer" + format: "int64" + description: | + An integer value containing the score given to the container in + order to tune OOM killer preferences. + example: 0 + Configs: + description: | + Configs contains references to zero or more configs that will be + exposed to the service. + type: "array" + items: + type: "object" + properties: + File: + description: | + File represents a specific target that is backed by a file. + +


+ + > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive + type: "object" + properties: + Name: + description: | + Name represents the final filename in the filesystem. + type: "string" + UID: + description: "UID represents the file UID." + type: "string" + GID: + description: "GID represents the file GID." + type: "string" + Mode: + description: "Mode represents the FileMode of the file." + type: "integer" + format: "uint32" + Runtime: + description: | + Runtime represents a target that is not mounted into the + container but is used by the task + +


+ + > **Note**: `Configs.File` and `Configs.Runtime` are mutually + > exclusive + type: "object" + ConfigID: + description: | + ConfigID represents the ID of the specific config that we're + referencing. + type: "string" + ConfigName: + description: | + ConfigName is the name of the config that this references, + but this is just provided for lookup/display purposes. The + config in the reference will be identified by its ID. + type: "string" + Isolation: + type: "string" + description: | + Isolation technology of the containers running the service. + (Windows only) + enum: + - "default" + - "process" + - "hyperv" + - "" + Init: + description: | + Run an init inside the container that forwards signals and reaps + processes. This field is omitted if empty, and the default (as + configured on the daemon) is used. + type: "boolean" + x-nullable: true + Sysctls: + description: | + Set kernel namedspaced parameters (sysctls) in the container. + The Sysctls option on services accepts the same sysctls as the + are supported on containers. Note that while the same sysctls are + supported, no guarantees or checks are made about their + suitability for a clustered environment, and it's up to the user + to determine whether a given sysctl will work properly in a + Service. + type: "object" + additionalProperties: + type: "string" + # This option is not used by Windows containers + CapabilityAdd: + type: "array" + description: | + A list of kernel capabilities to add to the default set + for the container. + items: + type: "string" + example: + - "CAP_NET_RAW" + - "CAP_SYS_ADMIN" + - "CAP_SYS_CHROOT" + - "CAP_SYSLOG" + CapabilityDrop: + type: "array" + description: | + A list of kernel capabilities to drop from the default set + for the container. + items: + type: "string" + example: + - "CAP_NET_RAW" + Ulimits: + description: | + A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`" + type: "array" + items: + type: "object" + properties: + Name: + description: "Name of ulimit" + type: "string" + Soft: + description: "Soft limit" + type: "integer" + Hard: + description: "Hard limit" + type: "integer" + NetworkAttachmentSpec: + description: | + Read-only spec type for non-swarm containers attached to swarm overlay + networks. + +


+ + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + type: "object" + properties: + ContainerID: + description: "ID of the container represented by this task" + type: "string" + Resources: + description: | + Resource requirements which apply to each individual container created + as part of the service. + type: "object" + properties: + Limits: + description: "Define resources limits." + $ref: "#/definitions/Limit" + Reservations: + description: "Define resources reservation." + $ref: "#/definitions/ResourceObject" + SwapBytes: + description: | + Amount of swap in bytes - can only be used together with a memory limit. + If not specified, the default behaviour is to grant a swap space twice + as big as the memory limit. + Set to -1 to enable unlimited swap. + type: "integer" + format: "int64" + minimum: -1 + x-nullable: true + x-omitempty: true + MemorySwappiness: + description: | + Tune the service's containers' memory swappiness (0 to 100). + If not specified, defaults to the containers' OS' default, generally 60, + or whatever value was predefined in the image. + Set to -1 to unset a previously set value. + type: "integer" + format: "int64" + minimum: -1 + maximum: 100 + x-nullable: true + x-omitempty: true + RestartPolicy: + description: | + Specification for the restart policy which applies to containers + created as part of this service. + type: "object" + properties: + Condition: + description: "Condition for restart." + type: "string" + enum: + - "none" + - "on-failure" + - "any" + Delay: + description: "Delay between restart attempts." + type: "integer" + format: "int64" + MaxAttempts: + description: | + Maximum attempts to restart a given container before giving up + (default value is 0, which is ignored). + type: "integer" + format: "int64" + default: 0 + Window: + description: | + Windows is the time window used to evaluate the restart policy + (default value is 0, which is unbounded). + type: "integer" + format: "int64" + default: 0 + Placement: + type: "object" + properties: + Constraints: + description: | + An array of constraint expressions to limit the set of nodes where + a task can be scheduled. Constraint expressions can either use a + _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find + nodes that satisfy every expression (AND match). Constraints can + match node or Docker Engine labels as follows: + + node attribute | matches | example + ---------------------|--------------------------------|----------------------------------------------- + `node.id` | Node ID | `node.id==2ivku8v2gvtg4` + `node.hostname` | Node hostname | `node.hostname!=node-2` + `node.role` | Node role (`manager`/`worker`) | `node.role==manager` + `node.platform.os` | Node operating system | `node.platform.os==windows` + `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` + `node.labels` | User-defined node labels | `node.labels.security==high` + `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04` + + `engine.labels` apply to Docker Engine labels like operating system, + drivers, etc. Swarm administrators add `node.labels` for operational + purposes by using the [`node update endpoint`](#operation/NodeUpdate). + + type: "array" + items: + type: "string" + example: + - "node.hostname!=node3.corp.example.com" + - "node.role!=manager" + - "node.labels.type==production" + - "node.platform.os==linux" + - "node.platform.arch==x86_64" + Preferences: + description: | + Preferences provide a way to make the scheduler aware of factors + such as topology. They are provided in order from highest to + lowest precedence. + type: "array" + items: + type: "object" + properties: + Spread: + type: "object" + properties: + SpreadDescriptor: + description: | + label descriptor, such as `engine.labels.az`. + type: "string" + example: + - Spread: + SpreadDescriptor: "node.labels.datacenter" + - Spread: + SpreadDescriptor: "node.labels.rack" + MaxReplicas: + description: | + Maximum number of replicas for per node (default value is 0, which + is unlimited) + type: "integer" + format: "int64" + default: 0 + Platforms: + description: | + Platforms stores all the platforms that the service's image can + run on. This field is used in the platform filter for scheduling. + If empty, then the platform filter is off, meaning there are no + scheduling restrictions. + type: "array" + items: + $ref: "#/definitions/Platform" + ForceUpdate: + description: | + A counter that triggers an update even if no relevant parameters have + been changed. + type: "integer" + format: "uint64" + Runtime: + description: | + Runtime is the type of runtime specified for the task executor. + type: "string" + Networks: + description: "Specifies which networks the service should attach to." + type: "array" + items: + $ref: "#/definitions/NetworkAttachmentConfig" + LogDriver: + description: | + Specifies the log driver to use for tasks created from this spec. If + not present, the default one for the swarm will be used, finally + falling back to the engine default if not specified. + type: "object" + properties: + Name: + type: "string" + Options: + type: "object" + additionalProperties: + type: "string" + + TaskState: + type: "string" + enum: + - "new" + - "allocated" + - "pending" + - "assigned" + - "accepted" + - "preparing" + - "ready" + - "starting" + - "running" + - "complete" + - "shutdown" + - "failed" + - "rejected" + - "remove" + - "orphaned" + + ContainerStatus: + type: "object" + description: "represents the status of a container." + properties: + ContainerID: + type: "string" + PID: + type: "integer" + ExitCode: + type: "integer" + + PortStatus: + type: "object" + description: "represents the port status of a task's host ports whose service has published host ports" + properties: + Ports: + type: "array" + items: + $ref: "#/definitions/EndpointPortConfig" + + TaskStatus: + type: "object" + description: "represents the status of a task." + properties: + Timestamp: + type: "string" + format: "dateTime" + State: + $ref: "#/definitions/TaskState" + Message: + type: "string" + Err: + type: "string" + ContainerStatus: + $ref: "#/definitions/ContainerStatus" + PortStatus: + $ref: "#/definitions/PortStatus" + + NetworkAttachment: + description: | + Specifies how a task is attached to a network, and the addresses the + task was assigned on that network. + type: "object" + properties: + Network: + $ref: "#/definitions/Network" + Addresses: + description: | + The IP addresses (in CIDR notation) assigned to the task on this + network. To maintain backward compatibility this field accepts CIDR + notation, but only the IP address is used. + type: "array" + items: + type: "string" + format: "cidr" + example: + Network: + ID: "4qvuz4ko70xaltuqbt8956gd1" + Addresses: + - "10.255.0.10/16" + + Task: + type: "object" + properties: + ID: + description: "The ID of the task." + type: "string" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + type: "string" + format: "dateTime" + UpdatedAt: + type: "string" + format: "dateTime" + Name: + description: "Name of the task." + type: "string" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + Spec: + $ref: "#/definitions/TaskSpec" + ServiceID: + description: "The ID of the service this task is part of." + type: "string" + Slot: + type: "integer" + NodeID: + description: "The ID of the node that this task is on." + type: "string" + AssignedGenericResources: + $ref: "#/definitions/GenericResources" + Status: + $ref: "#/definitions/TaskStatus" + DesiredState: + $ref: "#/definitions/TaskState" + JobIteration: + description: | + If the Service this Task belongs to is a job-mode service, contains + the JobIteration of the Service this Task was created for. Absent if + the Task was created for a Replicated or Global Service. + $ref: "#/definitions/ObjectVersion" + NetworksAttachments: + description: | + The networks that this task is attached to, and the addresses the + task was assigned on each of them. + type: "array" + items: + $ref: "#/definitions/NetworkAttachment" + example: + ID: "0kzzo1i0y4jz6027t0k7aezc7" + Version: + Index: 71 + CreatedAt: "2016-06-07T21:07:31.171892745Z" + UpdatedAt: "2016-06-07T21:07:31.376370513Z" + Spec: + ContainerSpec: + Image: "redis" + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: "any" + MaxAttempts: 0 + Placement: {} + ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" + Slot: 1 + NodeID: "60gvrl6tm78dmak4yl7srz94v" + Status: + Timestamp: "2016-06-07T21:07:31.290032978Z" + State: "running" + Message: "started" + ContainerStatus: + ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035" + PID: 677 + DesiredState: "running" + NetworksAttachments: + - Network: + ID: "4qvuz4ko70xaltuqbt8956gd1" + Version: + Index: 18 + CreatedAt: "2016-06-07T20:31:11.912919752Z" + UpdatedAt: "2016-06-07T21:07:29.955277358Z" + Spec: + Name: "ingress" + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + DriverState: + Name: "overlay" + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: "default" + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + Addresses: + - "10.255.0.10/16" + AssignedGenericResources: + - DiscreteResourceSpec: + Kind: "SSD" + Value: 3 + - NamedResourceSpec: + Kind: "GPU" + Value: "UUID1" + - NamedResourceSpec: + Kind: "GPU" + Value: "UUID2" + + ServiceSpec: + description: "User modifiable configuration for a service." + type: object + properties: + Name: + description: "Name of the service." + type: "string" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + TaskTemplate: + $ref: "#/definitions/TaskSpec" + Mode: + description: "Scheduling mode for the service." + type: "object" + properties: + Replicated: + type: "object" + properties: + Replicas: + type: "integer" + format: "int64" + Global: + type: "object" + ReplicatedJob: + description: | + The mode used for services with a finite number of tasks that run + to a completed state. + type: "object" + properties: + MaxConcurrent: + description: | + The maximum number of replicas to run simultaneously. + type: "integer" + format: "int64" + default: 1 + TotalCompletions: + description: | + The total number of replicas desired to reach the Completed + state. If unset, will default to the value of `MaxConcurrent` + type: "integer" + format: "int64" + GlobalJob: + description: | + The mode used for services which run a task to the completed state + on each valid node. + type: "object" + UpdateConfig: + description: "Specification for the update strategy of the service." + type: "object" + properties: + Parallelism: + description: | + Maximum number of tasks to be updated in one iteration (0 means + unlimited parallelism). + type: "integer" + format: "int64" + Delay: + description: "Amount of time between updates, in nanoseconds." + type: "integer" + format: "int64" + FailureAction: + description: | + Action to take if an updated task fails to run, or stops running + during the update. + type: "string" + enum: + - "continue" + - "pause" + - "rollback" + Monitor: + description: | + Amount of time to monitor each updated task for failures, in + nanoseconds. + type: "integer" + format: "int64" + MaxFailureRatio: + description: | + The fraction of tasks that may fail during an update before the + failure action is invoked, specified as a floating point number + between 0 and 1. + type: "number" + default: 0 + Order: + description: | + The order of operations when rolling out an updated task. Either + the old task is shut down before the new task is started, or the + new task is started before the old task is shut down. + type: "string" + enum: + - "stop-first" + - "start-first" + RollbackConfig: + description: "Specification for the rollback strategy of the service." + type: "object" + properties: + Parallelism: + description: | + Maximum number of tasks to be rolled back in one iteration (0 means + unlimited parallelism). + type: "integer" + format: "int64" + Delay: + description: | + Amount of time between rollback iterations, in nanoseconds. + type: "integer" + format: "int64" + FailureAction: + description: | + Action to take if an rolled back task fails to run, or stops + running during the rollback. + type: "string" + enum: + - "continue" + - "pause" + Monitor: + description: | + Amount of time to monitor each rolled back task for failures, in + nanoseconds. + type: "integer" + format: "int64" + MaxFailureRatio: + description: | + The fraction of tasks that may fail during a rollback before the + failure action is invoked, specified as a floating point number + between 0 and 1. + type: "number" + default: 0 + Order: + description: | + The order of operations when rolling back a task. Either the old + task is shut down before the new task is started, or the new task + is started before the old task is shut down. + type: "string" + enum: + - "stop-first" + - "start-first" + Networks: + description: | + Specifies which networks the service should attach to. + + Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + type: "array" + items: + $ref: "#/definitions/NetworkAttachmentConfig" + + EndpointSpec: + $ref: "#/definitions/EndpointSpec" + + EndpointPortConfig: + type: "object" + properties: + Name: + type: "string" + Protocol: + type: "string" + enum: + - "tcp" + - "udp" + - "sctp" + TargetPort: + description: "The port inside the container." + type: "integer" + PublishedPort: + description: "The port on the swarm hosts." + type: "integer" + PublishMode: + description: | + The mode in which port is published. + +


+ + - "ingress" makes the target port accessible on every node, + regardless of whether there is a task for the service running on + that node or not. + - "host" bypasses the routing mesh and publish the port directly on + the swarm node where that service is running. + + type: "string" + enum: + - "ingress" + - "host" + default: "ingress" + example: "ingress" + + EndpointSpec: + description: "Properties that can be configured to access and load balance a service." + type: "object" + properties: + Mode: + description: | + The mode of resolution to use for internal load balancing between tasks. + type: "string" + enum: + - "vip" + - "dnsrr" + default: "vip" + Ports: + description: | + List of exposed ports that this service is accessible on from the + outside. Ports can only be provided if `vip` resolution mode is used. + type: "array" + items: + $ref: "#/definitions/EndpointPortConfig" + + Service: + type: "object" + properties: + ID: + type: "string" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + type: "string" + format: "dateTime" + UpdatedAt: + type: "string" + format: "dateTime" + Spec: + $ref: "#/definitions/ServiceSpec" + Endpoint: + type: "object" + properties: + Spec: + $ref: "#/definitions/EndpointSpec" + Ports: + type: "array" + items: + $ref: "#/definitions/EndpointPortConfig" + VirtualIPs: + type: "array" + items: + type: "object" + properties: + NetworkID: + type: "string" + Addr: + type: "string" + UpdateStatus: + description: "The status of a service update." + type: "object" + properties: + State: + type: "string" + enum: + - "updating" + - "paused" + - "completed" + StartedAt: + type: "string" + format: "dateTime" + CompletedAt: + type: "string" + format: "dateTime" + Message: + type: "string" + ServiceStatus: + description: | + The status of the service's tasks. Provided only when requested as + part of a ServiceList operation. + type: "object" + properties: + RunningTasks: + description: | + The number of tasks for the service currently in the Running state. + type: "integer" + format: "uint64" + example: 7 + DesiredTasks: + description: | + The number of tasks for the service desired to be running. + For replicated services, this is the replica count from the + service spec. For global services, this is computed by taking + count of all tasks for the service with a Desired State other + than Shutdown. + type: "integer" + format: "uint64" + example: 10 + CompletedTasks: + description: | + The number of tasks for a job that are in the Completed state. + This field must be cross-referenced with the service type, as the + value of 0 may mean the service is not in a job mode, or it may + mean the job-mode service has no tasks yet Completed. + type: "integer" + format: "uint64" + JobStatus: + description: | + The status of the service when it is in one of ReplicatedJob or + GlobalJob modes. Absent on Replicated and Global mode services. The + JobIteration is an ObjectVersion, but unlike the Service's version, + does not need to be sent with an update request. + type: "object" + properties: + JobIteration: + description: | + JobIteration is a value increased each time a Job is executed, + successfully or otherwise. "Executed", in this case, means the + job as a whole has been started, not that an individual Task has + been launched. A job is "Executed" when its ServiceSpec is + updated. JobIteration can be used to disambiguate Tasks belonging + to different executions of a job. Though JobIteration will + increase with each subsequent execution, it may not necessarily + increase by 1, and so JobIteration should not be used to + $ref: "#/definitions/ObjectVersion" + LastExecution: + description: | + The last time, as observed by the server, that this job was + started. + type: "string" + format: "dateTime" + example: + ID: "9mnpnzenvg8p8tdbtq4wvbkcz" + Version: + Index: 19 + CreatedAt: "2016-06-07T21:05:51.880065305Z" + UpdatedAt: "2016-06-07T21:07:29.962229872Z" + Spec: + Name: "hopeful_cori" + TaskTemplate: + ContainerSpec: + Image: "redis" + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: "any" + MaxAttempts: 0 + Placement: {} + ForceUpdate: 0 + Mode: + Replicated: + Replicas: 1 + UpdateConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Mode: "vip" + Ports: + - + Protocol: "tcp" + TargetPort: 6379 + PublishedPort: 30001 + Endpoint: + Spec: + Mode: "vip" + Ports: + - + Protocol: "tcp" + TargetPort: 6379 + PublishedPort: 30001 + Ports: + - + Protocol: "tcp" + TargetPort: 6379 + PublishedPort: 30001 + VirtualIPs: + - + NetworkID: "4qvuz4ko70xaltuqbt8956gd1" + Addr: "10.255.0.2/16" + - + NetworkID: "4qvuz4ko70xaltuqbt8956gd1" + Addr: "10.255.0.3/16" + + ImageDeleteResponseItem: + type: "object" + x-go-name: "DeleteResponse" + properties: + Untagged: + description: "The image ID of an image that was untagged" + type: "string" + Deleted: + description: "The image ID of an image that was deleted" + type: "string" + + ServiceCreateResponse: + type: "object" + description: | + contains the information returned to a client on the + creation of a new service. + properties: + ID: + description: "The ID of the created service." + type: "string" + x-nullable: false + example: "ak7w3gjqoa3kuz8xcpnyy0pvl" + Warnings: + description: | + Optional warning message. + + FIXME(thaJeztah): this should have "omitempty" in the generated type. + type: "array" + x-nullable: true + items: + type: "string" + example: + - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + + ServiceUpdateResponse: + type: "object" + properties: + Warnings: + description: "Optional warning messages" + type: "array" + items: + type: "string" + example: + Warnings: + - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + + ContainerInspectResponse: + type: "object" + title: "ContainerInspectResponse" + x-go-name: "InspectResponse" + properties: + Id: + description: |- + The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). + type: "string" + x-go-name: "ID" + minLength: 64 + maxLength: 64 + pattern: "^[0-9a-fA-F]{64}$" + example: "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + Created: + description: |- + Date and time at which the container was created, formatted in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + x-nullable: true + example: "2025-02-17T17:43:39.64001363Z" + Path: + description: |- + The path to the command being run + type: "string" + example: "/bin/sh" + Args: + description: "The arguments to the command being run" + type: "array" + items: + type: "string" + example: + - "-c" + - "exit 9" + State: + $ref: "#/definitions/ContainerState" + Image: + description: |- + The ID (digest) of the image that this container was created from. + type: "string" + example: "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + ResolvConfPath: + description: |- + Location of the `/etc/resolv.conf` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: "string" + example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf" + HostnamePath: + description: |- + Location of the `/etc/hostname` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: "string" + example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname" + HostsPath: + description: |- + Location of the `/etc/hosts` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: "string" + example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts" + LogPath: + description: |- + Location of the file used to buffer the container's logs. Depending on + the logging-driver used for the container, this field may be omitted. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: "string" + x-nullable: true + example: "/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log" + Name: + description: |- + The name associated with this container. + + For historic reasons, the name may be prefixed with a forward-slash (`/`). + type: "string" + example: "/funny_chatelet" + RestartCount: + description: |- + Number of times the container was restarted since it was created, + or since daemon was started. + type: "integer" + example: 0 + Driver: + description: |- + The storage-driver used for the container's filesystem (graph-driver + or snapshotter). + type: "string" + example: "overlayfs" + Platform: + description: |- + The platform (operating system) for which the container was created. + + This field was introduced for the experimental "LCOW" (Linux Containers + On Windows) features, which has been removed. In most cases, this field + is equal to the host's operating system (`linux` or `windows`). + type: "string" + example: "linux" + ImageManifestDescriptor: + $ref: "#/definitions/OCIDescriptor" + description: |- + OCI descriptor of the platform-specific manifest of the image + the container was created from. + + Note: Only available if the daemon provides a multi-platform + image store. + MountLabel: + description: |- + SELinux mount label set for the container. + type: "string" + example: "" + ProcessLabel: + description: |- + SELinux process label set for the container. + type: "string" + example: "" + AppArmorProfile: + description: |- + The AppArmor profile set for the container. + type: "string" + example: "" + ExecIDs: + description: |- + IDs of exec instances that are running in the container. + type: "array" + items: + type: "string" + x-nullable: true + example: + - "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca" + - "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + HostConfig: + $ref: "#/definitions/HostConfig" + GraphDriver: + $ref: "#/definitions/DriverData" + x-nullable: true + Storage: + $ref: "#/definitions/Storage" + x-nullable: true + SizeRw: + description: |- + The size of files that have been created or changed by this container. + + This field is omitted by default, and only set when size is requested + in the API request. + type: "integer" + format: "int64" + x-nullable: true + example: "122880" + SizeRootFs: + description: |- + The total size of all files in the read-only layers from the image + that the container uses. These layers can be shared between containers. + + This field is omitted by default, and only set when size is requested + in the API request. + type: "integer" + format: "int64" + x-nullable: true + example: "1653948416" + Mounts: + description: |- + List of mounts used by the container. + type: "array" + items: + $ref: "#/definitions/MountPoint" + Config: + $ref: "#/definitions/ContainerConfig" + NetworkSettings: + $ref: "#/definitions/NetworkSettings" + + ContainerSummary: + type: "object" + properties: + Id: + description: |- + The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). + type: "string" + x-go-name: "ID" + minLength: 64 + maxLength: 64 + pattern: "^[0-9a-fA-F]{64}$" + example: "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + Names: + description: |- + The names associated with this container. Most containers have a single + name, but when using legacy "links", the container can have multiple + names. + + For historic reasons, names are prefixed with a forward-slash (`/`). + type: "array" + items: + type: "string" + example: + - "/funny_chatelet" + Image: + description: |- + The name or ID of the image used to create the container. + + This field shows the image reference as was specified when creating the container, + which can be in its canonical form (e.g., `docker.io/library/ubuntu:latest` + or `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`), + short form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`). + + The content of this field can be updated at runtime if the image used to + create the container is untagged, in which case the field is updated to + contain the the image ID (digest) it was resolved to in its canonical, + non-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`). + type: "string" + example: "docker.io/library/ubuntu:latest" + ImageID: + description: |- + The ID (digest) of the image that this container was created from. + type: "string" + example: "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + ImageManifestDescriptor: + $ref: "#/definitions/OCIDescriptor" + x-nullable: true + description: | + OCI descriptor of the platform-specific manifest of the image + the container was created from. + + Note: Only available if the daemon provides a multi-platform + image store. + + This field is not populated in the `GET /system/df` endpoint. + Command: + description: "Command to run when starting the container" + type: "string" + example: "/bin/bash" + Created: + description: |- + Date and time at which the container was created as a Unix timestamp + (number of seconds since EPOCH). + type: "integer" + format: "int64" + example: "1739811096" + Ports: + description: |- + Port-mappings for the container. + type: "array" + items: + $ref: "#/definitions/PortSummary" + SizeRw: + description: |- + The size of files that have been created or changed by this container. + + This field is omitted by default, and only set when size is requested + in the API request. + type: "integer" + format: "int64" + x-nullable: true + example: "122880" + SizeRootFs: + description: |- + The total size of all files in the read-only layers from the image + that the container uses. These layers can be shared between containers. + + This field is omitted by default, and only set when size is requested + in the API request. + type: "integer" + format: "int64" + x-nullable: true + example: "1653948416" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.vendor: "Acme" + com.example.license: "GPL" + com.example.version: "1.0" + State: + description: | + The state of this container. + type: "string" + enum: + - "created" + - "running" + - "paused" + - "restarting" + - "exited" + - "removing" + - "dead" + example: "running" + Status: + description: |- + Additional human-readable status of this container (e.g. `Exit 0`) + type: "string" + example: "Up 4 days" + HostConfig: + type: "object" + description: |- + Summary of host-specific runtime information of the container. This + is a reduced set of information in the container's "HostConfig" as + available in the container "inspect" response. + properties: + NetworkMode: + description: |- + Networking mode (`host`, `none`, `container:`) or name of the + primary network the container is using. + + This field is primarily for backward compatibility. The container + can be connected to multiple networks for which information can be + found in the `NetworkSettings.Networks` field, which enumerates + settings per network. + type: "string" + example: "mynetwork" + Annotations: + description: |- + Arbitrary key-value metadata attached to the container. + type: "object" + x-nullable: true + additionalProperties: + type: "string" + example: + io.kubernetes.docker.type: "container" + io.kubernetes.sandbox.id: "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" + NetworkSettings: + description: |- + Summary of the container's network settings + type: "object" + properties: + Networks: + type: "object" + description: |- + Summary of network-settings for each network the container is + attached to. + additionalProperties: + $ref: "#/definitions/EndpointSettings" + Mounts: + type: "array" + description: |- + List of mounts used by the container. + items: + $ref: "#/definitions/MountPoint" + Health: + type: "object" + description: |- + Summary of health status + + Added in v1.52, before that version all container summary not include Health. + After this attribute introduced, it includes containers with no health checks configured, + or containers that are not running with none + properties: + Status: + type: "string" + description: |- + the health status of the container + enum: + - "none" + - "starting" + - "healthy" + - "unhealthy" + example: "healthy" + FailingStreak: + description: "FailingStreak is the number of consecutive failures" + type: "integer" + example: 0 + + ContainersDiskUsage: + type: "object" + x-go-name: "DiskUsage" + x-go-package: "github.com/moby/moby/api/types/container" + description: | + represents system data usage information for container resources. + properties: + ActiveCount: + description: | + Count of active containers. + type: "integer" + format: "int64" + example: 1 + TotalCount: + description: | + Count of all containers. + type: "integer" + format: "int64" + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive containers. + type: "integer" + format: "int64" + example: 12345678 + TotalSize: + description: | + Disk space in use by containers. + type: "integer" + format: "int64" + example: 98765432 + Items: + description: | + List of container summaries. + type: "array" + x-omitempty: true + items: + x-go-type: + type: Summary + + Driver: + description: "Driver represents a driver (network, logging, secrets)." + type: "object" + required: [Name] + properties: + Name: + description: "Name of the driver." + type: "string" + x-nullable: false + example: "some-driver" + Options: + description: "Key/value map of driver-specific options." + type: "object" + x-nullable: false + additionalProperties: + type: "string" + example: + OptionA: "value for driver-specific option A" + OptionB: "value for driver-specific option B" + + SecretSpec: + type: "object" + properties: + Name: + description: "User-defined name of the secret." + type: "string" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + Data: + description: | + Data is the data to store as a secret, formatted as a standard base64-encoded + ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. + It must be empty if the Driver field is set, in which case the data is + loaded from an external secret store. The maximum allowed size is 500KB, + as defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize). + + This field is only used to _create_ a secret, and is not returned by + other endpoints. + type: "string" + example: "" + Driver: + description: | + Name of the secrets driver used to fetch the secret's value from an + external secret store. + $ref: "#/definitions/Driver" + Templating: + description: | + Templating driver, if applicable + + Templating controls whether and how to evaluate the config payload as + a template. If no driver is set, no templating is used. + $ref: "#/definitions/Driver" + + Secret: + type: "object" + properties: + ID: + type: "string" + example: "blt1owaxmitz71s9v5zh81zun" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + type: "string" + format: "dateTime" + example: "2017-07-20T13:55:28.678958722Z" + UpdatedAt: + type: "string" + format: "dateTime" + example: "2017-07-20T13:55:28.678958722Z" + Spec: + $ref: "#/definitions/SecretSpec" + + ConfigSpec: + type: "object" + properties: + Name: + description: "User-defined name of the config." + type: "string" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + Data: + description: | + Data is the data to store as a config, formatted as a standard base64-encoded + ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. + The maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize). + type: "string" + Templating: + description: | + Templating driver, if applicable + + Templating controls whether and how to evaluate the config payload as + a template. If no driver is set, no templating is used. + $ref: "#/definitions/Driver" + + Config: + type: "object" + properties: + ID: + type: "string" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + type: "string" + format: "dateTime" + UpdatedAt: + type: "string" + format: "dateTime" + Spec: + $ref: "#/definitions/ConfigSpec" + + ContainerState: + description: | + ContainerState stores container's running state. It's part of ContainerJSONBase + and will be returned by the "inspect" command. + type: "object" + x-nullable: true + properties: + Status: + description: | + String representation of the container state. Can be one of "created", + "running", "paused", "restarting", "removing", "exited", or "dead". + type: "string" + enum: ["created", "running", "paused", "restarting", "removing", "exited", "dead"] + example: "running" + Running: + description: | + Whether this container is running. + + Note that a running container can be _paused_. The `Running` and `Paused` + booleans are not mutually exclusive: + + When pausing a container (on Linux), the freezer cgroup is used to suspend + all processes in the container. Freezing the process requires the process to + be running. As a result, paused containers are both `Running` _and_ `Paused`. + + Use the `Status` field instead to determine if a container's state is "running". + type: "boolean" + example: true + Paused: + description: "Whether this container is paused." + type: "boolean" + example: false + Restarting: + description: "Whether this container is restarting." + type: "boolean" + example: false + OOMKilled: + description: | + Whether a process within this container has been killed because it ran + out of memory since the container was last started. + type: "boolean" + example: false + Dead: + type: "boolean" + example: false + Pid: + description: "The process ID of this container" + type: "integer" + example: 1234 + ExitCode: + description: "The last exit code of this container" + type: "integer" + example: 0 + Error: + type: "string" + StartedAt: + description: "The time when this container was last started." + type: "string" + example: "2020-01-06T09:06:59.461876391Z" + FinishedAt: + description: "The time when this container last exited." + type: "string" + example: "2020-01-06T09:07:59.461876391Z" + Health: + $ref: "#/definitions/Health" + + ContainerCreateResponse: + description: "OK response to ContainerCreate operation" + type: "object" + title: "ContainerCreateResponse" + x-go-name: "CreateResponse" + required: [Id, Warnings] + properties: + Id: + description: "The ID of the created container" + type: "string" + x-nullable: false + example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + Warnings: + description: "Warnings encountered when creating the container" + type: "array" + x-nullable: false + items: + type: "string" + example: [] + + ContainerUpdateResponse: + type: "object" + title: "ContainerUpdateResponse" + x-go-name: "UpdateResponse" + description: |- + Response for a successful container-update. + properties: + Warnings: + type: "array" + description: |- + Warnings encountered when updating the container. + items: + type: "string" + example: ["Published ports are discarded when using host network mode"] + + ContainerStatsResponse: + description: | + Statistics sample for a container. + type: "object" + x-go-name: "StatsResponse" + title: "ContainerStatsResponse" + properties: + id: + description: | + ID of the container for which the stats were collected. + type: "string" + x-nullable: true + example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + name: + description: | + Name of the container for which the stats were collected. + type: "string" + x-nullable: true + example: "boring_wozniak" + os_type: + description: | + OSType is the OS of the container ("linux" or "windows") to allow + platform-specific handling of stats. + type: "string" + x-nullable: true + example: "linux" + read: + description: | + Date and time at which this sample was collected. + The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + with nano-seconds. + type: "string" + format: "date-time" + example: "2025-01-16T13:55:22.165243637Z" + cpu_stats: + $ref: "#/definitions/ContainerCPUStats" + memory_stats: + $ref: "#/definitions/ContainerMemoryStats" + networks: + description: | + Network statistics for the container per interface. + + This field is omitted if the container has no networking enabled. + x-nullable: true + additionalProperties: + $ref: "#/definitions/ContainerNetworkStats" + example: + eth0: + rx_bytes: 5338 + rx_dropped: 0 + rx_errors: 0 + rx_packets: 36 + tx_bytes: 648 + tx_dropped: 0 + tx_errors: 0 + tx_packets: 8 + eth5: + rx_bytes: 4641 + rx_dropped: 0 + rx_errors: 0 + rx_packets: 26 + tx_bytes: 690 + tx_dropped: 0 + tx_errors: 0 + tx_packets: 9 + pids_stats: + $ref: "#/definitions/ContainerPidsStats" + blkio_stats: + $ref: "#/definitions/ContainerBlkioStats" + num_procs: + description: | + The number of processors on the system. + + This field is Windows-specific and always zero for Linux containers. + type: "integer" + format: "uint32" + example: 16 + storage_stats: + $ref: "#/definitions/ContainerStorageStats" + preread: + description: | + Date and time at which this first sample was collected. This field + is not propagated if the "one-shot" option is set. If the "one-shot" + option is set, this field may be omitted, empty, or set to a default + date (`0001-01-01T00:00:00Z`). + + The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + with nano-seconds. + type: "string" + format: "date-time" + example: "2025-01-16T13:55:21.160452595Z" + precpu_stats: + $ref: "#/definitions/ContainerCPUStats" + + ContainerBlkioStats: + description: | + BlkioStats stores all IO service stats for data read and write. + + This type is Linux-specific and holds many fields that are specific to cgroups v1. + On a cgroup v2 host, all fields other than `io_service_bytes_recursive` + are omitted or `null`. + + This type is only populated on Linux and omitted for Windows containers. + type: "object" + x-go-name: "BlkioStats" + x-nullable: true + properties: + io_service_bytes_recursive: + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_serviced_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_queue_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_service_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_wait_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_merged_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + sectors_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + example: + io_service_bytes_recursive: [ + {"major": 254, "minor": 0, "op": "read", "value": 7593984}, + {"major": 254, "minor": 0, "op": "write", "value": 100} + ] + io_serviced_recursive: null + io_queue_recursive: null + io_service_time_recursive: null + io_wait_time_recursive: null + io_merged_recursive: null + io_time_recursive: null + sectors_recursive: null + + ContainerBlkioStatEntry: + description: | + Blkio stats entry. + + This type is Linux-specific and omitted for Windows containers. + type: "object" + x-go-name: "BlkioStatEntry" + x-nullable: true + properties: + major: + type: "integer" + format: "uint64" + example: 254 + minor: + type: "integer" + format: "uint64" + example: 0 + op: + type: "string" + example: "read" + value: + type: "integer" + format: "uint64" + example: 7593984 + + ContainerCPUStats: + description: | + CPU related info of the container + type: "object" + x-go-name: "CPUStats" + x-nullable: true + properties: + cpu_usage: + $ref: "#/definitions/ContainerCPUUsage" + system_cpu_usage: + description: | + System Usage. + + This field is Linux-specific and omitted for Windows containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 5 + online_cpus: + description: | + Number of online CPUs. + + This field is Linux-specific and omitted for Windows containers. + type: "integer" + format: "uint32" + x-nullable: true + example: 5 + throttling_data: + $ref: "#/definitions/ContainerThrottlingData" + + ContainerCPUUsage: + description: | + All CPU stats aggregated since container inception. + type: "object" + x-go-name: "CPUUsage" + x-nullable: true + properties: + total_usage: + description: | + Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows). + type: "integer" + format: "uint64" + example: 29912000 + percpu_usage: + description: | + Total CPU time (in nanoseconds) consumed per core (Linux). + + This field is Linux-specific when using cgroups v1. It is omitted + when using cgroups v2 and Windows containers. + type: "array" + x-nullable: true + items: + type: "integer" + format: "uint64" + example: 29912000 + + usage_in_kernelmode: + description: | + Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux), + or time spent (in 100's of nanoseconds) by all container processes in + kernel mode (Windows). + + Not populated for Windows containers using Hyper-V isolation. + type: "integer" + format: "uint64" + example: 21994000 + usage_in_usermode: + description: | + Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux), + or time spent (in 100's of nanoseconds) by all container processes in + kernel mode (Windows). + + Not populated for Windows containers using Hyper-V isolation. + type: "integer" + format: "uint64" + example: 7918000 + + ContainerPidsStats: + description: | + PidsStats contains Linux-specific stats of a container's process-IDs (PIDs). + + This type is Linux-specific and omitted for Windows containers. + type: "object" + x-go-name: "PidsStats" + x-nullable: true + properties: + current: + description: | + Current is the number of PIDs in the cgroup. + type: "integer" + format: "uint64" + x-nullable: true + example: 5 + limit: + description: | + Limit is the hard limit on the number of pids in the cgroup. + A "Limit" of 0 means that there is no limit. + type: "integer" + format: "uint64" + x-nullable: true + example: "18446744073709551615" + + ContainerThrottlingData: + description: | + CPU throttling stats of the container. + + This type is Linux-specific and omitted for Windows containers. + type: "object" + x-go-name: "ThrottlingData" + x-nullable: true + properties: + periods: + description: | + Number of periods with throttling active. + type: "integer" + format: "uint64" + example: 0 + throttled_periods: + description: | + Number of periods when the container hit its throttling limit. + type: "integer" + format: "uint64" + example: 0 + throttled_time: + description: | + Aggregated time (in nanoseconds) the container was throttled for. + type: "integer" + format: "uint64" + example: 0 + + ContainerMemoryStats: + description: | + Aggregates all memory stats since container inception on Linux. + Windows returns stats for commit and private working set only. + type: "object" + x-go-name: "MemoryStats" + properties: + usage: + description: | + Current `res_counter` usage for memory. + + This field is Linux-specific and omitted for Windows containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + max_usage: + description: | + Maximum usage ever recorded. + + This field is Linux-specific and only supported on cgroups v1. + It is omitted when using cgroups v2 and for Windows containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + stats: + description: | + All the stats exported via memory.stat. + + The fields in this object differ between cgroups v1 and v2. + On cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available. + On cgroups v2, fields such as `file`, `anon`, `inactive_file` are available. + + This field is Linux-specific and omitted for Windows containers. + type: "object" + additionalProperties: + type: "integer" + format: "uint64" + x-nullable: true + example: + { + "active_anon": 1572864, + "active_file": 5115904, + "anon": 1572864, + "anon_thp": 0, + "file": 7626752, + "file_dirty": 0, + "file_mapped": 2723840, + "file_writeback": 0, + "inactive_anon": 0, + "inactive_file": 2510848, + "kernel_stack": 16384, + "pgactivate": 0, + "pgdeactivate": 0, + "pgfault": 2042, + "pglazyfree": 0, + "pglazyfreed": 0, + "pgmajfault": 45, + "pgrefill": 0, + "pgscan": 0, + "pgsteal": 0, + "shmem": 0, + "slab": 1180928, + "slab_reclaimable": 725576, + "slab_unreclaimable": 455352, + "sock": 0, + "thp_collapse_alloc": 0, + "thp_fault_alloc": 1, + "unevictable": 0, + "workingset_activate": 0, + "workingset_nodereclaim": 0, + "workingset_refault": 0 + } + failcnt: + description: | + Number of times memory usage hits limits. + + This field is Linux-specific and only supported on cgroups v1. + It is omitted when using cgroups v2 and for Windows containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + limit: + description: | + This field is Linux-specific and omitted for Windows containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 8217579520 + commitbytes: + description: | + Committed bytes. + + This field is Windows-specific and omitted for Linux containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + commitpeakbytes: + description: | + Peak committed bytes. + + This field is Windows-specific and omitted for Linux containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + privateworkingset: + description: | + Private working set. + + This field is Windows-specific and omitted for Linux containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + + ContainerNetworkStats: + description: | + Aggregates the network stats of one container + type: "object" + x-go-name: "NetworkStats" + x-nullable: true + properties: + rx_bytes: + description: | + Bytes received. Windows and Linux. + type: "integer" + format: "uint64" + example: 5338 + rx_packets: + description: | + Packets received. Windows and Linux. + type: "integer" + format: "uint64" + example: 36 + rx_errors: + description: | + Received errors. Not used on Windows. + + This field is Linux-specific and always zero for Windows containers. + type: "integer" + format: "uint64" + example: 0 + rx_dropped: + description: | + Incoming packets dropped. Windows and Linux. + type: "integer" + format: "uint64" + example: 0 + tx_bytes: + description: | + Bytes sent. Windows and Linux. + type: "integer" + format: "uint64" + example: 1200 + tx_packets: + description: | + Packets sent. Windows and Linux. + type: "integer" + format: "uint64" + example: 12 + tx_errors: + description: | + Sent errors. Not used on Windows. + + This field is Linux-specific and always zero for Windows containers. + type: "integer" + format: "uint64" + example: 0 + tx_dropped: + description: | + Outgoing packets dropped. Windows and Linux. + type: "integer" + format: "uint64" + example: 0 + endpoint_id: + description: | + Endpoint ID. Not used on Linux. + + This field is Windows-specific and omitted for Linux containers. + type: "string" + x-nullable: true + instance_id: + description: | + Instance ID. Not used on Linux. + + This field is Windows-specific and omitted for Linux containers. + type: "string" + x-nullable: true + + ContainerStorageStats: + description: | + StorageStats is the disk I/O stats for read/write on Windows. + + This type is Windows-specific and omitted for Linux containers. + type: "object" + x-go-name: "StorageStats" + x-nullable: true + properties: + read_count_normalized: + type: "integer" + format: "uint64" + x-nullable: true + example: 7593984 + read_size_bytes: + type: "integer" + format: "uint64" + x-nullable: true + example: 7593984 + write_count_normalized: + type: "integer" + format: "uint64" + x-nullable: true + example: 7593984 + write_size_bytes: + type: "integer" + format: "uint64" + x-nullable: true + example: 7593984 + + ContainerTopResponse: + type: "object" + x-go-name: "TopResponse" + title: "ContainerTopResponse" + description: |- + Container "top" response. + properties: + Titles: + description: "The ps column titles" + type: "array" + items: + type: "string" + example: + Titles: + - "UID" + - "PID" + - "PPID" + - "C" + - "STIME" + - "TTY" + - "TIME" + - "CMD" + Processes: + description: |- + Each process running in the container, where each process + is an array of values corresponding to the titles. + type: "array" + items: + type: "array" + items: + type: "string" + example: + Processes: + - + - "root" + - "13642" + - "882" + - "0" + - "17:03" + - "pts/0" + - "00:00:00" + - "/bin/bash" + - + - "root" + - "13735" + - "13642" + - "0" + - "17:06" + - "pts/0" + - "00:00:00" + - "sleep 10" + + ContainerWaitResponse: + description: "OK response to ContainerWait operation" + type: "object" + x-go-name: "WaitResponse" + title: "ContainerWaitResponse" + required: [StatusCode] + properties: + StatusCode: + description: "Exit code of the container" + type: "integer" + format: "int64" + x-nullable: false + Error: + $ref: "#/definitions/ContainerWaitExitError" + + ContainerWaitExitError: + description: "container waiting error, if any" + type: "object" + x-go-name: "WaitExitError" + properties: + Message: + description: "Details of an error" + type: "string" + + SystemVersion: + type: "object" + description: | + Response of Engine API: GET "/version" + properties: + Platform: + type: "object" + required: [Name] + properties: + Name: + type: "string" + Components: + type: "array" + description: | + Information about system components + items: + type: "object" + x-go-name: ComponentVersion + required: [Name, Version] + properties: + Name: + description: | + Name of the component + type: "string" + example: "Engine" + Version: + description: | + Version of the component + type: "string" + x-nullable: false + example: "27.0.1" + Details: + description: | + Key/value pairs of strings with additional information about the + component. These values are intended for informational purposes + only, and their content is not defined, and not part of the API + specification. + + These messages can be printed by the client as information to the user. + type: "object" + x-nullable: true + Version: + description: "The version of the daemon" + type: "string" + example: "27.0.1" + ApiVersion: + description: | + The default (and highest) API version that is supported by the daemon + type: "string" + example: "1.47" + MinAPIVersion: + description: | + The minimum API version that is supported by the daemon + type: "string" + example: "1.24" + GitCommit: + description: | + The Git commit of the source code that was used to build the daemon + type: "string" + example: "48a66213fe" + GoVersion: + description: | + The version Go used to compile the daemon, and the version of the Go + runtime in use. + type: "string" + example: "go1.22.7" + Os: + description: | + The operating system that the daemon is running on ("linux" or "windows") + type: "string" + example: "linux" + Arch: + description: | + Architecture of the daemon, as returned by the Go runtime (`GOARCH`). + + A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + type: "string" + example: "amd64" + KernelVersion: + description: | + The kernel version (`uname -r`) that the daemon is running on. + + This field is omitted when empty. + type: "string" + example: "6.8.0-31-generic" + Experimental: + description: | + Indicates if the daemon is started with experimental features enabled. + + This field is omitted when empty / false. + type: "boolean" + example: true + BuildTime: + description: | + The date and time that the daemon was compiled. + type: "string" + example: "2020-06-22T15:49:27.000000000+00:00" + + SystemInfo: + type: "object" + properties: + ID: + description: | + Unique identifier of the daemon. + +


+ + > **Note**: The format of the ID itself is not part of the API, and + > should not be considered stable. + type: "string" + example: "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + Containers: + description: "Total number of containers on the host." + type: "integer" + example: 14 + ContainersRunning: + description: | + Number of containers with status `"running"`. + type: "integer" + example: 3 + ContainersPaused: + description: | + Number of containers with status `"paused"`. + type: "integer" + example: 1 + ContainersStopped: + description: | + Number of containers with status `"stopped"`. + type: "integer" + example: 10 + Images: + description: | + Total number of images on the host. + + Both _tagged_ and _untagged_ (dangling) images are counted. + type: "integer" + example: 508 + Driver: + description: "Name of the storage driver in use." + type: "string" + example: "overlay2" + DriverStatus: + description: | + Information specific to the storage driver, provided as + "label" / "value" pairs. + + This information is provided by the storage driver, and formatted + in a way consistent with the output of `docker info` on the command + line. + +


+ + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: "array" + items: + type: "array" + items: + type: "string" + example: + - ["Backing Filesystem", "extfs"] + - ["Supports d_type", "true"] + - ["Native Overlay Diff", "true"] + DockerRootDir: + description: | + Root directory of persistent Docker state. + + Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` + on Windows. + type: "string" + example: "/var/lib/docker" + Plugins: + $ref: "#/definitions/PluginsInfo" + MemoryLimit: + description: "Indicates if the host has memory limit support enabled." + type: "boolean" + example: true + SwapLimit: + description: "Indicates if the host has memory swap limit support enabled." + type: "boolean" + example: true + CpuCfsPeriod: + description: | + Indicates if CPU CFS(Completely Fair Scheduler) period is supported by + the host. + type: "boolean" + example: true + CpuCfsQuota: + description: | + Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by + the host. + type: "boolean" + example: true + CPUShares: + description: | + Indicates if CPU Shares limiting is supported by the host. + type: "boolean" + example: true + CPUSet: + description: | + Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. + + See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) + type: "boolean" + example: true + PidsLimit: + description: "Indicates if the host kernel has PID limit support enabled." + type: "boolean" + example: true + OomKillDisable: + description: "Indicates if OOM killer disable is supported on the host." + type: "boolean" + IPv4Forwarding: + description: "Indicates IPv4 forwarding is enabled." + type: "boolean" + example: true + Debug: + description: | + Indicates if the daemon is running in debug-mode / with debug-level + logging enabled. + type: "boolean" + example: true + NFd: + description: | + The total number of file Descriptors in use by the daemon process. + + This information is only returned if debug-mode is enabled. + type: "integer" + example: 64 + NGoroutines: + description: | + The number of goroutines that currently exist. + + This information is only returned if debug-mode is enabled. + type: "integer" + example: 174 + SystemTime: + description: | + Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + format with nano-seconds. + type: "string" + example: "2017-08-08T20:28:29.06202363Z" + LoggingDriver: + description: | + The logging driver to use as a default for new containers. + type: "string" + CgroupDriver: + description: | + The driver to use for managing cgroups. + type: "string" + enum: ["cgroupfs", "systemd", "none"] + default: "cgroupfs" + example: "cgroupfs" + CgroupVersion: + description: | + The version of the cgroup. + type: "string" + enum: ["1", "2"] + default: "1" + example: "1" + NEventsListener: + description: "Number of event listeners subscribed." + type: "integer" + example: 30 + KernelVersion: + description: | + Kernel version of the host. + + On Linux, this information obtained from `uname`. On Windows this + information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ + registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. + type: "string" + example: "6.8.0-31-generic" + OperatingSystem: + description: | + Name of the host's operating system, for example: "Ubuntu 24.04 LTS" + or "Windows Server 2016 Datacenter" + type: "string" + example: "Ubuntu 24.04 LTS" + OSVersion: + description: | + Version of the host's operating system + +


+ + > **Note**: The information returned in this field, including its + > very existence, and the formatting of values, should not be considered + > stable, and may change without notice. + type: "string" + example: "24.04" + OSType: + description: | + Generic type of the operating system of the host, as returned by the + Go runtime (`GOOS`). + + Currently returned values are "linux" and "windows". A full list of + possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + type: "string" + example: "linux" + Architecture: + description: | + Hardware architecture of the host, as returned by the operating system. + This is equivalent to the output of `uname -m` on Linux. + + Unlike `Arch` (from `/version`), this reports the machine's native + architecture, which can differ from the Go runtime architecture when + running a binary compiled for a different architecture (for example, + a 32-bit binary running on 64-bit hardware). + type: "string" + example: "x86_64" + NCPU: + description: | + The number of logical CPUs usable by the daemon. + + The number of available CPUs is checked by querying the operating + system when the daemon starts. Changes to operating system CPU + allocation after the daemon is started are not reflected. + type: "integer" + example: 4 + MemTotal: + description: | + Total amount of physical memory available on the host, in bytes. + type: "integer" + format: "int64" + example: 2095882240 + + IndexServerAddress: + description: | + Address / URL of the index server that is used for image search, + and as a default for user authentication for Docker Hub and Docker Cloud. + default: "https://index.docker.io/v1/" + type: "string" + example: "https://index.docker.io/v1/" + RegistryConfig: + $ref: "#/definitions/RegistryServiceConfig" + GenericResources: + $ref: "#/definitions/GenericResources" + HttpProxy: + description: | + HTTP-proxy configured for the daemon. This value is obtained from the + [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + are masked in the API response. + + Containers do not automatically inherit this configuration. + type: "string" + example: "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + HttpsProxy: + description: | + HTTPS-proxy configured for the daemon. This value is obtained from the + [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + are masked in the API response. + + Containers do not automatically inherit this configuration. + type: "string" + example: "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + NoProxy: + description: | + Comma-separated list of domain extensions for which no proxy should be + used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) + environment variable. + + Containers do not automatically inherit this configuration. + type: "string" + example: "*.local, 169.254/16" + Name: + description: "Hostname of the host." + type: "string" + example: "node5.corp.example.com" + Labels: + description: | + User-defined labels (key/value metadata) as set on the daemon. + +


+ + > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, + > set through the daemon configuration, and _node_ labels, set from a + > manager node in the Swarm. Node labels are not included in this + > field. Node labels can be retrieved using the `/nodes/(id)` endpoint + > on a manager node in the Swarm. + type: "array" + items: + type: "string" + example: ["storage=ssd", "production"] + ExperimentalBuild: + description: | + Indicates if experimental features are enabled on the daemon. + type: "boolean" + example: true + ServerVersion: + description: | + Version string of the daemon. + type: "string" + example: "27.0.1" + Runtimes: + description: | + List of [OCI compliant](https://github.com/opencontainers/runtime-spec) + runtimes configured on the daemon. Keys hold the "name" used to + reference the runtime. + + The Docker daemon relies on an OCI compliant runtime (invoked via the + `containerd` daemon) as its interface to the Linux kernel namespaces, + cgroups, and SELinux. + + The default runtime is `runc`, and automatically configured. Additional + runtimes can be configured by the user and will be listed here. + type: "object" + additionalProperties: + $ref: "#/definitions/Runtime" + default: + runc: + path: "runc" + example: + runc: + path: "runc" + runc-master: + path: "/go/bin/runc" + custom: + path: "/usr/local/bin/my-oci-runtime" + runtimeArgs: ["--debug", "--systemd-cgroup=false"] + DefaultRuntime: + description: | + Name of the default OCI runtime that is used when starting containers. + + The default can be overridden per-container at create time. + type: "string" + default: "runc" + example: "runc" + Swarm: + $ref: "#/definitions/SwarmInfo" + LiveRestoreEnabled: + description: | + Indicates if live restore is enabled. + + If enabled, containers are kept running when the daemon is shutdown + or upon daemon start if running containers are detected. + type: "boolean" + default: false + example: false + Isolation: + description: | + Represents the isolation technology to use as a default for containers. + The supported values are platform-specific. + + If no isolation value is specified on daemon start, on Windows client, + the default is `hyperv`, and on Windows server, the default is `process`. + + This option is currently not used on other platforms. + default: "default" + type: "string" + enum: + - "default" + - "hyperv" + - "process" + - "" + InitBinary: + description: | + Name and, optional, path of the `docker-init` binary. + + If the path is omitted, the daemon searches the host's `$PATH` for the + binary and uses the first result. + type: "string" + example: "docker-init" + ContainerdCommit: + $ref: "#/definitions/Commit" + RuncCommit: + $ref: "#/definitions/Commit" + InitCommit: + $ref: "#/definitions/Commit" + SecurityOptions: + description: | + List of security features that are enabled on the daemon, such as + apparmor, seccomp, SELinux, user-namespaces (userns), rootless and + no-new-privileges. + + Additional configuration options for each security feature may + be present, and are included as a comma-separated list of key/value + pairs. + type: "array" + items: + type: "string" + example: + - "name=apparmor" + - "name=seccomp,profile=default" + - "name=selinux" + - "name=userns" + - "name=rootless" + ProductLicense: + description: | + Reports a summary of the product license on the daemon. + + If a commercial license has been applied to the daemon, information + such as number of nodes, and expiration are included. + type: "string" + example: "Community Engine" + DefaultAddressPools: + description: | + List of custom default address pools for local networks, which can be + specified in the daemon.json file or dockerd option. + + Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 + 10.10.[0-255].0/24 address pools. + type: "array" + items: + type: "object" + properties: + Base: + description: "The network address in CIDR format" + type: "string" + example: "10.10.0.0/16" + Size: + description: "The network pool size" + type: "integer" + example: "24" + FirewallBackend: + $ref: "#/definitions/FirewallInfo" + DiscoveredDevices: + description: | + List of devices discovered by device drivers. + + Each device includes information about its source driver, kind, name, + and additional driver-specific attributes. + type: "array" + items: + $ref: "#/definitions/DeviceInfo" + NRI: + $ref: "#/definitions/NRIInfo" + Warnings: + description: | + List of warnings / informational messages about missing features, or + issues related to the daemon configuration. + + These messages can be printed by the client as information to the user. + type: "array" + items: + type: "string" + example: + - "WARNING: No memory limit support" + CDISpecDirs: + description: | + List of directories where (Container Device Interface) CDI + specifications are located. + + These specifications define vendor-specific modifications to an OCI + runtime specification for a container being created. + + An empty list indicates that CDI device injection is disabled. + + Note that since using CDI device injection requires the daemon to have + experimental enabled. For non-experimental daemons an empty list will + always be returned. + type: "array" + items: + type: "string" + example: + - "/etc/cdi" + - "/var/run/cdi" + Containerd: + $ref: "#/definitions/ContainerdInfo" + + ContainerdInfo: + description: | + Information for connecting to the containerd instance that is used by the daemon. + This is included for debugging purposes only. + type: "object" + x-nullable: true + properties: + Address: + description: "The address of the containerd socket." + type: "string" + example: "/run/containerd/containerd.sock" + Namespaces: + description: | + The namespaces that the daemon uses for running containers and + plugins in containerd. These namespaces can be configured in the + daemon configuration, and are considered to be used exclusively + by the daemon, Tampering with the containerd instance may cause + unexpected behavior. + + As these namespaces are considered to be exclusively accessed + by the daemon, it is not recommended to change these values, + or to change them to a value that is used by other systems, + such as cri-containerd. + type: "object" + properties: + Containers: + description: | + The default containerd namespace used for containers managed + by the daemon. + + The default namespace for containers is "moby", but will be + suffixed with the `.` of the remapped `root` if + user-namespaces are enabled and the containerd image-store + is used. + type: "string" + default: "moby" + example: "moby" + Plugins: + description: | + The default containerd namespace used for plugins managed by + the daemon. + + The default namespace for plugins is "plugins.moby", but will be + suffixed with the `.` of the remapped `root` if + user-namespaces are enabled and the containerd image-store + is used. + type: "string" + default: "plugins.moby" + example: "plugins.moby" + + FirewallInfo: + description: | + Information about the daemon's firewalling configuration. + + This field is currently only used on Linux, and omitted on other platforms. + type: "object" + x-nullable: true + properties: + Driver: + description: | + The name of the firewall backend driver. + type: "string" + example: "nftables" + Info: + description: | + Information about the firewall backend, provided as + "label" / "value" pairs. + +


+ + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: "array" + items: + type: "array" + items: + type: "string" + example: + - ["ReloadedAt", "2025-01-01T00:00:00Z"] + + # PluginsInfo is a temp struct holding Plugins name + # registered with docker daemon. It is used by Info struct + PluginsInfo: + description: | + Available plugins per type. + +


+ + > **Note**: Only unmanaged (V1) plugins are included in this list. + > V1 plugins are "lazily" loaded, and are not returned in this list + > if there is no resource using the plugin. + type: "object" + properties: + Volume: + description: "Names of available volume-drivers, and network-driver plugins." + type: "array" + items: + type: "string" + example: ["local"] + Network: + description: "Names of available network-drivers, and network-driver plugins." + type: "array" + items: + type: "string" + example: ["bridge", "host", "ipvlan", "macvlan", "null", "overlay"] + Authorization: + description: "Names of available authorization plugins." + type: "array" + items: + type: "string" + example: ["img-authz-plugin", "hbm"] + Log: + description: "Names of available logging-drivers, and logging-driver plugins." + type: "array" + items: + type: "string" + example: ["awslogs", "fluentd", "gcplogs", "gelf", "journald", "json-file", "splunk", "syslog"] + + + RegistryServiceConfig: + description: | + RegistryServiceConfig stores daemon registry services configuration. + type: "object" + x-nullable: true + properties: + InsecureRegistryCIDRs: + description: | + List of IP ranges of insecure registries, using the CIDR syntax + ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries + accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates + from unknown CAs) communication. + + By default, local registries (`::1/128` and `127.0.0.0/8`) are configured as + insecure. All other registries are secure. Communicating with an + insecure registry is not possible if the daemon assumes that registry + is secure. + + This configuration override this behavior, insecure communication with + registries whose resolved IP address is within the subnet described by + the CIDR syntax. + + Registries can also be marked insecure by hostname. Those registries + are listed under `IndexConfigs` and have their `Secure` field set to + `false`. + + > **Warning**: Using this option can be useful when running a local + > registry, but introduces security vulnerabilities. This option + > should therefore ONLY be used for testing purposes. For increased + > security, users should add their CA to their system's list of trusted + > CAs instead of enabling this option. + type: "array" + items: + type: "string" + example: ["::1/128", "127.0.0.0/8"] + IndexConfigs: + type: "object" + additionalProperties: + $ref: "#/definitions/IndexInfo" + example: + "127.0.0.1:5000": + "Name": "127.0.0.1:5000" + "Mirrors": [] + "Secure": false + "Official": false + "[2001:db8:a0b:12f0::1]:80": + "Name": "[2001:db8:a0b:12f0::1]:80" + "Mirrors": [] + "Secure": false + "Official": false + "docker.io": + Name: "docker.io" + Mirrors: ["https://hub-mirror.corp.example.com:5000/"] + Secure: true + Official: true + "registry.internal.corp.example.com:3000": + Name: "registry.internal.corp.example.com:3000" + Mirrors: [] + Secure: false + Official: false + Mirrors: + description: | + List of registry URLs that act as a mirror for the official + (`docker.io`) registry. + + type: "array" + items: + type: "string" + example: + - "https://hub-mirror.corp.example.com:5000/" + - "https://[2001:db8:a0b:12f0::1]/" + + IndexInfo: + description: + IndexInfo contains information about a registry. + type: "object" + x-nullable: true + properties: + Name: + description: | + Name of the registry, such as "docker.io". + type: "string" + example: "docker.io" + Mirrors: + description: | + List of mirrors, expressed as URIs. + type: "array" + items: + type: "string" + example: + - "https://hub-mirror.corp.example.com:5000/" + - "https://registry-2.docker.io/" + - "https://registry-3.docker.io/" + Secure: + description: | + Indicates if the registry is part of the list of insecure + registries. + + If `false`, the registry is insecure. Insecure registries accept + un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from + unknown CAs) communication. + + > **Warning**: Insecure registries can be useful when running a local + > registry. However, because its use creates security vulnerabilities + > it should ONLY be enabled for testing purposes. For increased + > security, users should add their CA to their system's list of + > trusted CAs instead of enabling this option. + type: "boolean" + example: true + Official: + description: | + Indicates whether this is an official registry (i.e., Docker Hub / docker.io) + type: "boolean" + example: true + + Runtime: + description: | + Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec) + runtime. + + The runtime is invoked by the daemon via the `containerd` daemon. OCI + runtimes act as an interface to the Linux kernel namespaces, cgroups, + and SELinux. + type: "object" + properties: + path: + description: | + Name and, optional, path, of the OCI executable binary. + + If the path is omitted, the daemon searches the host's `$PATH` for the + binary and uses the first result. + type: "string" + example: "/usr/local/bin/my-oci-runtime" + runtimeArgs: + description: | + List of command-line arguments to pass to the runtime when invoked. + type: "array" + x-nullable: true + items: + type: "string" + example: ["--debug", "--systemd-cgroup=false"] + status: + description: | + Information specific to the runtime. + + While this API specification does not define data provided by runtimes, + the following well-known properties may be provided by runtimes: + + `org.opencontainers.runtime-spec.features`: features structure as defined + in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), + in a JSON string representation. + +


+ + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: "object" + x-nullable: true + additionalProperties: + type: "string" + example: + "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" + + Commit: + description: | + Commit holds the Git-commit (SHA1) that a binary was built from, as + reported in the version-string of external tools, such as `containerd`, + or `runC`. + type: "object" + properties: + ID: + description: "Actual commit ID of external tool." + type: "string" + example: "cfb82a876ecc11b5ca0977d1733adbe58599088a" + + SwarmInfo: + description: | + Represents generic information about swarm. + type: "object" + properties: + NodeID: + description: "Unique identifier of for this node in the swarm." + type: "string" + default: "" + example: "k67qz4598weg5unwwffg6z1m1" + NodeAddr: + description: | + IP address at which this node can be reached by other nodes in the + swarm. + type: "string" + default: "" + example: "10.0.0.46" + LocalNodeState: + $ref: "#/definitions/LocalNodeState" + ControlAvailable: + type: "boolean" + default: false + example: true + Error: + type: "string" + default: "" + RemoteManagers: + description: | + List of ID's and addresses of other managers in the swarm. + type: "array" + default: null + x-nullable: true + items: + $ref: "#/definitions/PeerNode" + example: + - NodeID: "71izy0goik036k48jg985xnds" + Addr: "10.0.0.158:2377" + - NodeID: "79y6h1o4gv8n120drcprv5nmc" + Addr: "10.0.0.159:2377" + - NodeID: "k67qz4598weg5unwwffg6z1m1" + Addr: "10.0.0.46:2377" + Nodes: + description: "Total number of nodes in the swarm." + type: "integer" + x-nullable: true + example: 4 + Managers: + description: "Total number of managers in the swarm." + type: "integer" + x-nullable: true + example: 3 + Cluster: + $ref: "#/definitions/ClusterInfo" + + LocalNodeState: + description: "Current local status of this node." + type: "string" + default: "" + enum: + - "" + - "inactive" + - "pending" + - "active" + - "error" + - "locked" + example: "active" + + PeerNode: + description: "Represents a peer-node in the swarm" + type: "object" + properties: + NodeID: + description: "Unique identifier of for this node in the swarm." + type: "string" + Addr: + description: | + IP address and ports at which this node can be reached. + type: "string" + + NetworkAttachmentConfig: + description: | + Specifies how a service should be attached to a particular network. + type: "object" + properties: + Target: + description: | + The target network for attachment. Must be a network name or ID. + type: "string" + Aliases: + description: | + Discoverable alternate names for the service on this network. + type: "array" + items: + type: "string" + DriverOpts: + description: | + Driver attachment options for the network target. + type: "object" + additionalProperties: + type: "string" + + EventActor: + description: | + Actor describes something that generates events, like a container, network, + or a volume. + type: "object" + properties: + ID: + description: "The ID of the object emitting the event" + type: "string" + example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + Attributes: + description: | + Various key/value attributes of the object, depending on its type. + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-label-value" + image: "alpine:latest" + name: "my-container" + + EventMessage: + description: | + EventMessage represents the information an event contains. + type: "object" + title: "SystemEventsResponse" + properties: + Type: + description: "The type of object emitting the event" + type: "string" + enum: ["builder", "config", "container", "daemon", "image", "network", "node", "plugin", "secret", "service", "volume"] + example: "container" + Action: + description: "The type of event" + type: "string" + example: "create" + Actor: + $ref: "#/definitions/EventActor" + scope: + description: | + Scope of the event. Engine events are `local` scope. Cluster (Swarm) + events are `swarm` scope. + type: "string" + enum: ["local", "swarm"] + time: + description: "Timestamp of event" + type: "integer" + format: "int64" + example: 1629574695 + timeNano: + description: "Timestamp of event, with nanosecond accuracy" + type: "integer" + format: "int64" + example: 1629574695515050031 + + OCIDescriptor: + type: "object" + x-go-name: Descriptor + description: | + A descriptor struct containing digest, media type, and size, as defined in + the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). + properties: + mediaType: + description: | + The media type of the object this schema refers to. + type: "string" + example: "application/vnd.oci.image.manifest.v1+json" + digest: + description: | + The digest of the targeted content. + type: "string" + example: "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + size: + description: | + The size in bytes of the blob. + type: "integer" + format: "int64" + example: 424 + urls: + description: |- + List of URLs from which this object MAY be downloaded. + type: "array" + items: + type: "string" + format: "uri" + x-nullable: true + annotations: + description: |- + Arbitrary metadata relating to the targeted content. + type: "object" + x-nullable: true + additionalProperties: + type: "string" + example: + "com.docker.official-images.bashbrew.arch": "amd64" + "org.opencontainers.image.base.digest": "sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8" + "org.opencontainers.image.base.name": "scratch" + "org.opencontainers.image.created": "2025-01-27T00:00:00Z" + "org.opencontainers.image.revision": "9fabb4bad5138435b01857e2fe9363e2dc5f6a79" + "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base" + "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu" + "org.opencontainers.image.version": "24.04" + data: + type: string + x-nullable: true + description: |- + Data is an embedding of the targeted content. This is encoded as a base64 + string when marshalled to JSON (automatically, by encoding/json). If + present, Data can be used directly to avoid fetching the targeted content. + example: null + platform: + $ref: "#/definitions/OCIPlatform" + artifactType: + description: |- + ArtifactType is the IANA media type of this artifact. + type: "string" + x-nullable: true + example: null + + OCIPlatform: + type: "object" + x-go-name: Platform + x-nullable: true + description: | + Describes the platform which the image in the manifest runs on, as defined + in the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md). + properties: + architecture: + description: | + The CPU architecture, for example `amd64` or `ppc64`. + type: "string" + example: "arm" + os: + description: | + The operating system, for example `linux` or `windows`. + type: "string" + example: "windows" + os.version: + description: | + Optional field specifying the operating system version, for example on + Windows `10.0.19041.1165`. + type: "string" + example: "10.0.19041.1165" + os.features: + description: | + Optional field specifying an array of strings, each listing a required + OS feature (for example on Windows `win32k`). + type: "array" + items: + type: "string" + example: + - "win32k" + variant: + description: | + Optional field specifying a variant of the CPU, for example `v7` to + specify ARMv7 when architecture is `arm`. + type: "string" + example: "v7" + + DistributionInspect: + type: "object" + x-go-name: DistributionInspect + title: "DistributionInspectResponse" + required: [Descriptor, Platforms] + description: | + Describes the result obtained from contacting the registry to retrieve + image metadata. + properties: + Descriptor: + $ref: "#/definitions/OCIDescriptor" + Platforms: + type: "array" + description: | + An array containing all platforms supported by the image. + items: + $ref: "#/definitions/OCIPlatform" + + ClusterVolume: + type: "object" + description: | + Options and information specific to, and only present on, Swarm CSI + cluster volumes. + properties: + ID: + type: "string" + description: | + The Swarm ID of this volume. Because cluster volumes are Swarm + objects, they have an ID, unlike non-cluster volumes. This ID can + be used to refer to the Volume instead of the name. + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + type: "string" + format: "dateTime" + UpdatedAt: + type: "string" + format: "dateTime" + Spec: + $ref: "#/definitions/ClusterVolumeSpec" + Info: + type: "object" + description: | + Information about the global status of the volume. + properties: + CapacityBytes: + type: "integer" + format: "int64" + description: | + The capacity of the volume in bytes. A value of 0 indicates that + the capacity is unknown. + VolumeContext: + type: "object" + description: | + A map of strings to strings returned from the storage plugin when + the volume is created. + additionalProperties: + type: "string" + VolumeID: + type: "string" + description: | + The ID of the volume as returned by the CSI storage plugin. This + is distinct from the volume's ID as provided by Docker. This ID + is never used by the user when communicating with Docker to refer + to this volume. If the ID is blank, then the Volume has not been + successfully created in the plugin yet. + AccessibleTopology: + type: "array" + description: | + The topology this volume is actually accessible from. + items: + $ref: "#/definitions/Topology" + PublishStatus: + type: "array" + description: | + The status of the volume as it pertains to its publishing and use on + specific nodes + items: + type: "object" + properties: + NodeID: + type: "string" + description: | + The ID of the Swarm node the volume is published on. + State: + type: "string" + description: | + The published state of the volume. + * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. + * `published` The volume is published successfully to the node. + * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. + * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. + enum: + - "pending-publish" + - "published" + - "pending-node-unpublish" + - "pending-controller-unpublish" + PublishContext: + type: "object" + description: | + A map of strings to strings returned by the CSI controller + plugin when a volume is published. + additionalProperties: + type: "string" + + ClusterVolumeSpec: + type: "object" + description: | + Cluster-specific options used to create the volume. + properties: + Group: + type: "string" + description: | + Group defines the volume group of this volume. Volumes belonging to + the same group can be referred to by group name when creating + Services. Referring to a volume by group instructs Swarm to treat + volumes in that group interchangeably for the purpose of scheduling. + Volumes with an empty string for a group technically all belong to + the same, emptystring group. + AccessMode: + type: "object" + description: | + Defines how the volume is used by tasks. + properties: + Scope: + type: "string" + description: | + The set of nodes this volume can be used on at one time. + - `single` The volume may only be scheduled to one node at a time. + - `multi` the volume may be scheduled to any supported number of nodes at a time. + default: "single" + enum: ["single", "multi"] + x-nullable: false + Sharing: + type: "string" + description: | + The number and way that different tasks can use this volume + at one time. + - `none` The volume may only be used by one task at a time. + - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly + - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. + - `all` The volume may have any number of readers and writers. + default: "none" + enum: ["none", "readonly", "onewriter", "all"] + x-nullable: false + MountVolume: + type: "object" + description: | + Options for using this volume as a Mount-type volume. + + Either MountVolume or BlockVolume, but not both, must be + present. + properties: + FsType: + type: "string" + description: | + Specifies the filesystem type for the mount volume. + Optional. + MountFlags: + type: "array" + description: | + Flags to pass when mounting the volume. Optional. + items: + type: "string" + BlockVolume: + type: "object" + description: | + Options for using this volume as a Block-type volume. + Intentionally empty. + Secrets: + type: "array" + description: | + Swarm Secrets that are passed to the CSI storage plugin when + operating on this volume. + items: + type: "object" + description: | + One cluster volume secret entry. Defines a key-value pair that + is passed to the plugin. + properties: + Key: + type: "string" + description: | + Key is the name of the key of the key-value pair passed to + the plugin. + Secret: + type: "string" + description: | + Secret is the swarm Secret object from which to read data. + This can be a Secret name or ID. The Secret data is + retrieved by swarm and used as the value of the key-value + pair passed to the plugin. + AccessibilityRequirements: + type: "object" + description: | + Requirements for the accessible topology of the volume. These + fields are optional. For an in-depth description of what these + fields mean, see the CSI specification. + properties: + Requisite: + type: "array" + description: | + A list of required topologies, at least one of which the + volume must be accessible from. + items: + $ref: "#/definitions/Topology" + Preferred: + type: "array" + description: | + A list of topologies that the volume should attempt to be + provisioned in. + items: + $ref: "#/definitions/Topology" + CapacityRange: + type: "object" + description: | + The desired capacity that the volume should be created with. If + empty, the plugin will decide the capacity. + properties: + RequiredBytes: + type: "integer" + format: "int64" + description: | + The volume must be at least this big. The value of 0 + indicates an unspecified minimum + LimitBytes: + type: "integer" + format: "int64" + description: | + The volume must not be bigger than this. The value of 0 + indicates an unspecified maximum. + Availability: + type: "string" + description: | + The availability of the volume for use in tasks. + - `active` The volume is fully available for scheduling on the cluster + - `pause` No new workloads should use the volume, but existing workloads are not stopped. + - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. + default: "active" + x-nullable: false + enum: + - "active" + - "pause" + - "drain" + + Topology: + description: | + A map of topological domains to topological segments. For in depth + details, see documentation for the Topology object in the CSI + specification. + type: "object" + properties: + Segments: + type: "object" + additionalProperties: + type: "string" + + AttestationStatement: + x-go-name: "AttestationStatement" + description: | + AttestationStatement is a single in-toto statement attached to an image. + type: "object" + required: ["Descriptor", "PredicateType"] + properties: + Descriptor: + $ref: "#/definitions/OCIDescriptor" + PredicateType: + description: The in-toto predicate type URI of this statement. + type: "string" + example: "https://slsa.dev/provenance/v0.2" + Statement: + description: | + The verbatim in-toto statement JSON. Only included when the caller + opts in via the `statement=true` query parameter; otherwise absent. + type: "object" + x-nullable: true + ImageManifestSummary: + x-go-name: "ManifestSummary" + description: | + ImageManifestSummary represents a summary of an image manifest. + type: "object" + required: ["ID", "Descriptor", "Available", "Size", "Kind"] + properties: + ID: + description: | + ID is the content-addressable ID of an image and is the same as the + digest of the image manifest. + type: "string" + example: "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + Descriptor: + $ref: "#/definitions/OCIDescriptor" + Available: + description: Indicates whether all the child content (image config, layers) is fully available locally. + type: "boolean" + example: true + Size: + type: "object" + x-nullable: false + required: ["Content", "Total"] + properties: + Total: + type: "integer" + format: "int64" + example: 8213251 + description: | + Total is the total size (in bytes) of all the locally present + data (both distributable and non-distributable) that's related to + this manifest and its children. + This equal to the sum of [Content] size AND all the sizes in the + [Size] struct present in the Kind-specific data struct. + For example, for an image kind (Kind == "image") + this would include the size of the image content and unpacked + image snapshots ([Size.Content] + [ImageData.Size.Unpacked]). + Content: + description: | + Content is the size (in bytes) of all the locally present + content in the content store (e.g. image config, layers) + referenced by this manifest and its children. + This only includes blobs in the content store. + type: "integer" + format: "int64" + example: 3987495 + Kind: + type: "string" + example: "image" + enum: + - "image" + - "attestation" + - "unknown" + description: | + The kind of the manifest. + + kind | description + -------------|----------------------------------------------------------- + image | Image manifest that can be used to start a container. + attestation | Attestation manifest produced by the Buildkit builder for a specific image manifest. + ImageData: + description: | + The image data for the image manifest. + This field is only populated when Kind is "image". + type: "object" + x-nullable: true + x-omitempty: true + required: ["Platform", "Containers", "Size", "UnpackedSize"] + properties: + Platform: + $ref: "#/definitions/OCIPlatform" + description: | + OCI platform of the image. This will be the platform specified in the + manifest descriptor from the index/manifest list. + If it's not available, it will be obtained from the image config. + Identity: + description: | + Identity holds information about the identity and origin of this image. + For image list responses, this can duplicate Build/Pull fields across + image manifests, because those parts are image-level metadata. + x-nullable: true + $ref: "#/definitions/Identity" + Containers: + description: | + The IDs of the containers that are using this image. + type: "array" + items: + type: "string" + example: ["ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430", "abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e"] + Size: + type: "object" + x-nullable: false + required: ["Unpacked"] + properties: + Unpacked: + type: "integer" + format: "int64" + example: 3987495 + description: | + Unpacked is the size (in bytes) of the locally unpacked + (uncompressed) image content that's directly usable by the containers + running this image. + It's independent of the distributable content - e.g. + the image might still have an unpacked data that's still used by + some container even when the distributable/compressed content is + already gone. + AttestationData: + description: | + The image data for the attestation manifest. + This field is only populated when Kind is "attestation". + type: "object" + x-nullable: true + x-omitempty: true + required: ["For"] + properties: + For: + description: | + The digest of the image manifest that this attestation is for. + type: "string" + example: "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + +paths: + /containers/json: + get: + summary: "List containers" + description: | + Returns a list of containers. For details on the format, see the + [inspect endpoint](#operation/ContainerInspect). + + Note that it uses a different, smaller representation of a container + than inspecting a single container. For example, the list of linked + containers is not propagated . + operationId: "ContainerList" + produces: + - "application/json" + parameters: + - name: "all" + in: "query" + description: | + Return all containers. By default, only running containers are shown. + type: "boolean" + default: false + - name: "limit" + in: "query" + description: | + Return this number of most recently created containers, including + non-running ones. + type: "integer" + - name: "size" + in: "query" + description: | + Return the size of container as fields `SizeRw` and `SizeRootFs`. + type: "boolean" + default: false + - name: "filters" + in: "query" + description: | + Filters to process on the container list, encoded as JSON (a + `map[string][]string`). For example, `{"status": ["paused"]}` will + only return paused containers. + + Available filters: + + - `ancestor`=(`[:]`, ``, or ``) + - `before`=(`` or ``) + - `expose`=(`[/]`|`/[]`) + - `exited=` containers with exit code of `` + - `health`=(`starting`|`healthy`|`unhealthy`|`none`) + - `id=` a container's ID + - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) + - `is-task=`(`true`|`false`) + - `label=key` or `label="key=value"` of a container label + - `name=` a container's name + - `network`=(`` or ``) + - `publish`=(`[/]`|`/[]`) + - `since`=(`` or ``) + - `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`) + - `volume`=(`` or ``) + type: "string" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/ContainerSummary" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Container"] + /containers/create: + post: + summary: "Create a container" + operationId: "ContainerCreate" + consumes: + - "application/json" + - "application/octet-stream" + produces: + - "application/json" + parameters: + - name: "name" + in: "query" + description: | + Assign the specified name to the container. Must match + `/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`. + type: "string" + pattern: "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$" + - name: "platform" + in: "query" + description: | + Platform in the format `os[/arch[/variant]]` used for image lookup. + + When specified, the daemon checks if the requested image is present + in the local image cache with the given OS and Architecture, and + otherwise returns a `404` status. + + If the option is not set, the host's native OS and Architecture are + used to look up the image in the image cache. However, if no platform + is passed and the given image does exist in the local image cache, + but its OS or architecture does not match, the container is created + with the available image, and a warning is added to the `Warnings` + field in the response, for example; + + WARNING: The requested image's platform (linux/arm64/v8) does not + match the detected host platform (linux/amd64) and no + specific platform was requested + + type: "string" + default: "" + - name: "body" + in: "body" + description: "Container to create" + schema: + allOf: + - $ref: "#/definitions/ContainerConfig" + - type: "object" + properties: + HostConfig: + $ref: "#/definitions/HostConfig" + NetworkingConfig: + $ref: "#/definitions/NetworkingConfig" + example: + Hostname: "" + Domainname: "" + User: "" + AttachStdin: false + AttachStdout: true + AttachStderr: true + Tty: false + OpenStdin: false + StdinOnce: false + Env: + - "FOO=bar" + - "BAZ=quux" + Cmd: + - "date" + Entrypoint: "" + Image: "ubuntu" + Labels: + com.example.vendor: "Acme" + com.example.license: "GPL" + com.example.version: "1.0" + Volumes: + /volumes/data: {} + WorkingDir: "" + NetworkDisabled: false + ExposedPorts: + 22/tcp: {} + StopSignal: "SIGTERM" + StopTimeout: 10 + HostConfig: + Binds: + - "/tmp:/tmp" + Links: + - "redis3:redis" + Memory: 0 + MemorySwap: 0 + MemoryReservation: 0 + NanoCpus: 500000 + CpuPercent: 80 + CpuShares: 512 + CpuPeriod: 100000 + CpuRealtimePeriod: 1000000 + CpuRealtimeRuntime: 10000 + CpuQuota: 50000 + CpusetCpus: "0,1" + CpusetMems: "0,1" + MaximumIOps: 0 + MaximumIOBps: 0 + BlkioWeight: 300 + BlkioWeightDevice: + - {} + BlkioDeviceReadBps: + - {} + BlkioDeviceReadIOps: + - {} + BlkioDeviceWriteBps: + - {} + BlkioDeviceWriteIOps: + - {} + DeviceRequests: + - Driver: "nvidia" + Count: -1 + DeviceIDs": ["0", "1", "GPU-fef8089b-4820-abfc-e83e-94318197576e"] + Capabilities: [["gpu", "nvidia", "compute"]] + Options: + property1: "string" + property2: "string" + MemorySwappiness: 60 + OomKillDisable: false + OomScoreAdj: 500 + PidMode: "" + PidsLimit: 0 + PortBindings: + 22/tcp: + - HostPort: "11022" + PublishAllPorts: false + Privileged: false + ReadonlyRootfs: false + Dns: + - "8.8.8.8" + DnsOptions: + - "" + DnsSearch: + - "" + VolumesFrom: + - "parent" + - "other:ro" + CapAdd: + - "NET_ADMIN" + CapDrop: + - "MKNOD" + GroupAdd: + - "newgroup" + RestartPolicy: + Name: "" + MaximumRetryCount: 0 + AutoRemove: true + NetworkMode: "bridge" + Devices: [] + Ulimits: + - {} + LogConfig: + Type: "json-file" + Config: {} + SecurityOpt: [] + StorageOpt: {} + CgroupParent: "" + VolumeDriver: "" + ShmSize: 67108864 + NetworkingConfig: + EndpointsConfig: + isolated_nw: + IPAMConfig: + IPv4Address: "172.20.30.33" + IPv6Address: "2001:db8:abcd::3033" + LinkLocalIPs: + - "169.254.34.68" + - "fe80::3468" + Links: + - "container_1" + - "container_2" + Aliases: + - "server_x" + - "server_y" + database_nw: {} + + required: true + responses: + 201: + description: "Container created successfully" + schema: + $ref: "#/definitions/ContainerCreateResponse" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such image" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such image: c2ada9df5af8" + 409: + description: "conflict" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Container"] + /containers/{id}/json: + get: + summary: "Inspect a container" + description: "Return low-level information about a container." + operationId: "ContainerInspect" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/ContainerInspectResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "size" + in: "query" + type: "boolean" + default: false + description: "Return the size of container as fields `SizeRw` and `SizeRootFs`" + tags: ["Container"] + /containers/{id}/top: + get: + summary: "List processes running inside a container" + description: | + On Unix systems, this is done by running the `ps` command. This endpoint + is not supported on Windows. + operationId: "ContainerTop" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/ContainerTopResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "ps_args" + in: "query" + description: "The arguments to pass to `ps`. For example, `aux`" + type: "string" + default: "-ef" + tags: ["Container"] + /containers/{id}/logs: + get: + summary: "Get container logs" + description: | + Get `stdout` and `stderr` logs from a container. + + Note: This endpoint works only for containers with the `json-file` or + `journald` logging driver. + produces: + - "application/vnd.docker.raw-stream" + - "application/vnd.docker.multiplexed-stream" + operationId: "ContainerLogs" + responses: + 200: + description: | + logs returned as a stream in response body. + For the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach). + Note that unlike the attach endpoint, the logs endpoint does not + upgrade the connection and does not set Content-Type. + schema: + type: "string" + format: "binary" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "follow" + in: "query" + description: "Keep connection after returning logs." + type: "boolean" + default: false + - name: "stdout" + in: "query" + description: "Return logs from `stdout`" + type: "boolean" + default: false + - name: "stderr" + in: "query" + description: "Return logs from `stderr`" + type: "boolean" + default: false + - name: "since" + in: "query" + description: "Only return logs since this time, as a UNIX timestamp" + type: "integer" + default: 0 + - name: "until" + in: "query" + description: "Only return logs before this time, as a UNIX timestamp" + type: "integer" + default: 0 + - name: "timestamps" + in: "query" + description: "Add timestamps to every log line" + type: "boolean" + default: false + - name: "tail" + in: "query" + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + type: "string" + default: "all" + tags: ["Container"] + /containers/{id}/changes: + get: + summary: "Get changes on a container’s filesystem" + description: | + Returns which files in a container's filesystem have been added, deleted, + or modified. The `Kind` of modification can be one of: + + - `0`: Modified ("C") + - `1`: Added ("A") + - `2`: Deleted ("D") + operationId: "ContainerChanges" + produces: ["application/json"] + responses: + 200: + description: "The list of changes" + schema: + type: "array" + items: + $ref: "#/definitions/FilesystemChange" + examples: + application/json: + - Path: "/dev" + Kind: 0 + - Path: "/dev/kmsg" + Kind: 1 + - Path: "/test" + Kind: 1 + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + tags: ["Container"] + /containers/{id}/export: + get: + summary: "Export a container" + description: "Export the contents of a container as a tarball." + operationId: "ContainerExport" + produces: + - "application/octet-stream" + responses: + 200: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + tags: ["Container"] + /containers/{id}/stats: + get: + summary: "Get container stats based on resource usage" + description: | + This endpoint returns a live stream of a container’s resource usage + statistics. + + The `precpu_stats` is the CPU statistic of the *previous* read, and is + used to calculate the CPU usage percentage. It is not an exact copy + of the `cpu_stats` field. + + If either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is + nil then for compatibility with older daemons the length of the + corresponding `cpu_usage.percpu_usage` array should be used. + + On a cgroup v2 host, the following fields are not set + * `blkio_stats`: all fields other than `io_service_bytes_recursive` + * `cpu_stats`: `cpu_usage.percpu_usage` + * `memory_stats`: `max_usage` and `failcnt` + Also, `memory_stats.stats` fields are incompatible with cgroup v1. + + To calculate the values shown by the `stats` command of the docker cli tool + the following formulas can be used: + * used_memory = `memory_stats.usage - memory_stats.stats.cache` (cgroups v1) + * used_memory = `memory_stats.usage - memory_stats.stats.inactive_file` (cgroups v2) + * available_memory = `memory_stats.limit` + * Memory usage % = `(used_memory / available_memory) * 100.0` + * cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage` + * system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage` + * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus` + * CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0` + operationId: "ContainerStats" + produces: ["application/json"] + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/ContainerStatsResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "stream" + in: "query" + description: | + Stream the output. If false, the stats will be output once and then + it will disconnect. + type: "boolean" + default: true + - name: "one-shot" + in: "query" + description: | + Only get a single stat instead of waiting for 2 cycles. Must be used + with `stream=false`. + type: "boolean" + default: false + tags: ["Container"] + /containers/{id}/resize: + post: + summary: "Resize a container TTY" + description: "Resize the TTY for a container." + operationId: "ContainerResize" + consumes: + - "application/octet-stream" + produces: + - "text/plain" + responses: + 200: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "cannot resize container" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "h" + in: "query" + required: true + description: "Height of the TTY session in characters" + type: "integer" + - name: "w" + in: "query" + required: true + description: "Width of the TTY session in characters" + type: "integer" + tags: ["Container"] + /containers/{id}/start: + post: + summary: "Start a container" + operationId: "ContainerStart" + responses: + 204: + description: "no error" + 304: + description: "container already started" + 400: + description: "bad parameter, including an invalid checkpoint ID" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "detachKeys" + in: "query" + description: | + Override the key sequence for detaching a container. Format is a + single character `[a-Z]` or `ctrl-` where `` is one + of: `a-z`, `@`, `^`, `[`, `,` or `_`. + type: "string" + tags: ["Container"] + /containers/{id}/stop: + post: + summary: "Stop a container" + operationId: "ContainerStop" + responses: + 204: + description: "no error" + 304: + description: "container already stopped" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "signal" + in: "query" + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + type: "string" + - name: "t" + in: "query" + description: "Number of seconds to wait before killing the container" + type: "integer" + tags: ["Container"] + /containers/{id}/restart: + post: + summary: "Restart a container" + operationId: "ContainerRestart" + responses: + 204: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "signal" + in: "query" + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + type: "string" + - name: "t" + in: "query" + description: "Number of seconds to wait before killing the container" + type: "integer" + tags: ["Container"] + /containers/{id}/kill: + post: + summary: "Kill a container" + description: | + Send a POSIX signal to a container, defaulting to killing to the + container. + operationId: "ContainerKill" + responses: + 204: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 409: + description: "container is not running" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "signal" + in: "query" + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + type: "string" + default: "SIGKILL" + tags: ["Container"] + /containers/{id}/update: + post: + summary: "Update a container" + description: | + Change various configuration options of a container without having to + recreate it. + operationId: "ContainerUpdate" + consumes: ["application/json"] + produces: ["application/json"] + responses: + 200: + description: "The container has been updated." + schema: + $ref: "#/definitions/ContainerUpdateResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "update" + in: "body" + required: true + schema: + allOf: + - $ref: "#/definitions/Resources" + - type: "object" + properties: + RestartPolicy: + $ref: "#/definitions/RestartPolicy" + example: + BlkioWeight: 300 + CpuShares: 512 + CpuPeriod: 100000 + CpuQuota: 50000 + CpuRealtimePeriod: 1000000 + CpuRealtimeRuntime: 10000 + CpusetCpus: "0,1" + CpusetMems: "0" + Memory: 314572800 + MemorySwap: 514288000 + MemoryReservation: 209715200 + RestartPolicy: + MaximumRetryCount: 4 + Name: "on-failure" + tags: ["Container"] + /containers/{id}/rename: + post: + summary: "Rename a container" + operationId: "ContainerRename" + responses: + 204: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 409: + description: "name already in use" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "name" + in: "query" + required: true + description: "New name for the container" + type: "string" + tags: ["Container"] + /containers/{id}/pause: + post: + summary: "Pause a container" + description: | + Use the freezer cgroup to suspend all processes in a container. + + Traditionally, when suspending a process the `SIGSTOP` signal is used, + which is observable by the process being suspended. With the freezer + cgroup the process is unaware, and unable to capture, that it is being + suspended, and subsequently resumed. + operationId: "ContainerPause" + responses: + 204: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + tags: ["Container"] + /containers/{id}/unpause: + post: + summary: "Unpause a container" + description: "Resume a container which has been paused." + operationId: "ContainerUnpause" + responses: + 204: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + tags: ["Container"] + /containers/{id}/attach: + post: + summary: "Attach to a container" + description: | + Attach to a container to read its output or send it input. You can attach + to the same container multiple times and you can reattach to containers + that have been detached. + + Either the `stream` or `logs` parameter must be `true` for this endpoint + to do anything. + + See the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/) + for more details. + + ### Hijacking + + This endpoint hijacks the HTTP connection to transport `stdin`, `stdout`, + and `stderr` on the same socket. + + This is the response from the daemon for an attach request: + + ``` + HTTP/1.1 200 OK + Content-Type: application/vnd.docker.raw-stream + + [STREAM] + ``` + + After the headers and two new lines, the TCP connection can now be used + for raw, bidirectional communication between the client and server. + + To hint potential proxies about connection hijacking, the Docker client + can also optionally send connection upgrade headers. + + For example, the client sends this request to upgrade the connection: + + ``` + POST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1 + Upgrade: tcp + Connection: Upgrade + ``` + + The Docker daemon will respond with a `101 UPGRADED` response, and will + similarly follow with the raw stream: + + ``` + HTTP/1.1 101 UPGRADED + Content-Type: application/vnd.docker.raw-stream + Connection: Upgrade + Upgrade: tcp + + [STREAM] + ``` + + ### Stream format + + When the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate), + the HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream + and the stream over the hijacked connected is multiplexed to separate out + `stdout` and `stderr`. The stream consists of a series of frames, each + containing a header and a payload. + + The header contains the information which the stream writes (`stdout` or + `stderr`). It also contains the size of the associated frame encoded in + the last four bytes (`uint32`). + + It is encoded on the first eight bytes like this: + + ```go + header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} + ``` + + `STREAM_TYPE` can be: + + - 0: `stdin` (is written on `stdout`) + - 1: `stdout` + - 2: `stderr` + + `SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size + encoded as big endian. + + Following the header is the payload, which is the specified number of + bytes of `STREAM_TYPE`. + + The simplest way to implement this protocol is the following: + + 1. Read 8 bytes. + 2. Choose `stdout` or `stderr` depending on the first byte. + 3. Extract the frame size from the last four bytes. + 4. Read the extracted size and output it on the correct output. + 5. Goto 1. + + ### Stream format when using a TTY + + When the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate), + the stream is not multiplexed. The data exchanged over the hijacked + connection is simply the raw data from the process PTY and client's + `stdin`. + + operationId: "ContainerAttach" + produces: + - "application/vnd.docker.raw-stream" + - "application/vnd.docker.multiplexed-stream" + responses: + 101: + description: "no error, hints proxy about hijacking" + 200: + description: "no error, no upgrade header found" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "detachKeys" + in: "query" + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,` or `_`. + type: "string" + - name: "logs" + in: "query" + description: | + Replay previous logs from the container. + + This is useful for attaching to a container that has started and you + want to output everything since the container started. + + If `stream` is also enabled, once all the previous output has been + returned, it will seamlessly transition into streaming current + output. + type: "boolean" + default: false + - name: "stream" + in: "query" + description: | + Stream attached streams from the time the request was made onwards. + type: "boolean" + default: false + - name: "stdin" + in: "query" + description: "Attach to `stdin`" + type: "boolean" + default: false + - name: "stdout" + in: "query" + description: "Attach to `stdout`" + type: "boolean" + default: false + - name: "stderr" + in: "query" + description: "Attach to `stderr`" + type: "boolean" + default: false + tags: ["Container"] + /containers/{id}/attach/ws: + get: + summary: "Attach to a container via a websocket" + operationId: "ContainerAttachWebsocket" + responses: + 101: + description: "no error, hints proxy about hijacking" + 200: + description: "no error, no upgrade header found" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "detachKeys" + in: "query" + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,`, or `_`. + type: "string" + - name: "logs" + in: "query" + description: "Return logs" + type: "boolean" + default: false + - name: "stream" + in: "query" + description: "Return stream" + type: "boolean" + default: false + - name: "stdin" + in: "query" + description: "Attach to `stdin`" + type: "boolean" + default: false + - name: "stdout" + in: "query" + description: "Attach to `stdout`" + type: "boolean" + default: false + - name: "stderr" + in: "query" + description: "Attach to `stderr`" + type: "boolean" + default: false + tags: ["Container"] + /containers/{id}/wait: + post: + summary: "Wait for a container" + description: "Block until a container stops, then returns the exit code." + operationId: "ContainerWait" + produces: ["application/json"] + responses: + 200: + description: "The container has exit." + schema: + $ref: "#/definitions/ContainerWaitResponse" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "condition" + in: "query" + description: | + Wait until a container state reaches the given condition. + + Defaults to `not-running` if omitted or empty. + type: "string" + enum: + - "not-running" + - "next-exit" + - "removed" + default: "not-running" + tags: ["Container"] + /containers/{id}: + delete: + summary: "Remove a container" + operationId: "ContainerDelete" + responses: + 204: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 409: + description: "conflict" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: | + You cannot remove a running container: c2ada9df5af8. Stop the + container before attempting removal or force remove + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "v" + in: "query" + description: "Remove anonymous volumes associated with the container." + type: "boolean" + default: false + - name: "force" + in: "query" + description: "If the container is running, kill it before removing it." + type: "boolean" + default: false + - name: "link" + in: "query" + description: "Remove the specified link associated with the container." + type: "boolean" + default: false + tags: ["Container"] + /containers/{id}/archive: + head: + summary: "Get information about files in a container" + description: | + A response header `X-Docker-Container-Path-Stat` is returned, containing + a base64 - encoded JSON object with some filesystem header information + about the path. + operationId: "ContainerArchiveInfo" + responses: + 200: + description: "no error" + headers: + X-Docker-Container-Path-Stat: + type: "string" + description: | + A base64 - encoded JSON object with some filesystem header + information about the path + 400: + description: "Bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "Container or path does not exist" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "path" + in: "query" + required: true + description: "Resource in the container’s filesystem to archive." + type: "string" + tags: ["Container"] + get: + summary: "Get an archive of a filesystem resource in a container" + description: "Get a tar archive of a resource in the filesystem of container id." + operationId: "ContainerArchive" + produces: ["application/x-tar"] + responses: + 200: + description: "no error" + 400: + description: "Bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "Container or path does not exist" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "path" + in: "query" + required: true + description: "Resource in the container’s filesystem to archive." + type: "string" + tags: ["Container"] + put: + summary: "Extract an archive of files or folders to a directory in a container" + description: | + Upload a tar archive to be extracted to a path in the filesystem of container id. + `path` parameter is asserted to be a directory. If it exists as a file, 400 error + will be returned with message "not a directory". + operationId: "PutContainerArchive" + consumes: ["application/x-tar", "application/octet-stream"] + responses: + 200: + description: "The content was extracted successfully" + 400: + description: "Bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "not a directory" + 403: + description: "Permission denied, the volume or container rootfs is marked as read-only." + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "No such container or path does not exist inside the container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "path" + in: "query" + required: true + description: "Path to a directory in the container to extract the archive’s contents into. " + type: "string" + - name: "noOverwriteDirNonDir" + in: "query" + description: | + If `1`, `true`, or `True` then it will be an error if unpacking the + given content would cause an existing directory to be replaced with + a non-directory and vice versa. + type: "string" + - name: "copyUIDGID" + in: "query" + description: | + If `1`, `true`, then it will copy UID/GID maps to the dest file or + dir + type: "string" + - name: "inputStream" + in: "body" + required: true + description: | + The input stream must be a tar archive compressed with one of the + following algorithms: `identity` (no compression), `gzip`, `bzip2`, + or `xz`. + schema: + type: "string" + format: "binary" + tags: ["Container"] + /containers/prune: + post: + summary: "Delete stopped containers" + produces: + - "application/json" + operationId: "ContainerPrune" + parameters: + - name: "filters" + in: "query" + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels. + type: "string" + responses: + 200: + description: "No error" + schema: + type: "object" + title: "ContainerPruneResponse" + properties: + ContainersDeleted: + description: "Container IDs that were deleted" + type: "array" + items: + type: "string" + SpaceReclaimed: + description: "Disk space reclaimed in bytes" + type: "integer" + format: "int64" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Container"] + /images/json: + get: + summary: "List Images" + description: "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image." + operationId: "ImageList" + produces: + - "application/json" + responses: + 200: + description: "Summary image data for the images matching the query" + schema: + type: "array" + items: + $ref: "#/definitions/ImageSummary" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "all" + in: "query" + description: "Show all images. Only images from a final layer (no children) are shown by default." + type: "boolean" + default: false + - name: "filters" + in: "query" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the images list. + + Available filters: + + - `before`=(`[:]`, `` or ``) + - `dangling=true` + - `label=key` or `label="key=value"` of an image label + - `reference`=(`[:]`) + - `since`=(`[:]`, `` or ``) + - `until=` + type: "string" + - name: "shared-size" + in: "query" + description: "Compute and show shared size as a `SharedSize` field on each image." + type: "boolean" + default: false + - name: "digests" + in: "query" + description: "Show digest information as a `RepoDigests` field on each image." + type: "boolean" + default: false + - name: "manifests" + in: "query" + description: "Include `Manifests` in the image summary." + type: "boolean" + default: false + - name: "identity" + in: "query" + description: "Include `Identity` in each manifest summary. Requires `manifests=1`." + type: "boolean" + default: false + tags: ["Image"] + /build: + post: + summary: "Build an image" + description: | + Build an image from a tar archive with a `Dockerfile` in it. + + The `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/). + + The Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output. + + The build is canceled if the client drops the connection by quitting or being killed. + operationId: "ImageBuild" + consumes: + - "application/octet-stream" + produces: + - "application/json" + parameters: + - name: "inputStream" + in: "body" + description: "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." + schema: + type: "string" + format: "binary" + - name: "dockerfile" + in: "query" + description: "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`." + type: "string" + default: "Dockerfile" + - name: "t" + in: "query" + description: "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters." + type: "string" + - name: "extrahosts" + in: "query" + description: "Extra hosts to add to /etc/hosts" + type: "string" + - name: "remote" + in: "query" + description: "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball." + type: "string" + - name: "q" + in: "query" + description: "Suppress verbose build output." + type: "boolean" + default: false + - name: "nocache" + in: "query" + description: "Do not use the cache when building the image." + type: "boolean" + default: false + - name: "cachefrom" + in: "query" + description: "JSON array of images used for build cache resolution." + type: "string" + - name: "pull" + in: "query" + description: "Attempt to pull the image even if an older image exists locally." + type: "string" + - name: "rm" + in: "query" + description: "Remove intermediate containers after a successful build." + type: "boolean" + default: true + - name: "forcerm" + in: "query" + description: "Always remove intermediate containers, even upon failure." + type: "boolean" + default: false + - name: "memory" + in: "query" + description: "Set memory limit for build." + type: "integer" + format: "int64" + - name: "memswap" + in: "query" + description: "Total memory (memory + swap). Set as `-1` to disable swap." + type: "integer" + format: "int64" + - name: "cpushares" + in: "query" + description: "CPU shares (relative weight)." + type: "integer" + format: "int64" + - name: "cpusetcpus" + in: "query" + description: "CPUs in which to allow execution (e.g., `0-3`, `0,1`)." + type: "string" + - name: "cpuperiod" + in: "query" + description: "The length of a CPU period in microseconds." + type: "integer" + format: "int64" + - name: "cpuquota" + in: "query" + description: "Microseconds of CPU time that the container can get in a CPU period." + type: "integer" + format: "int64" + - name: "buildargs" + in: "query" + description: > + JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker + uses the buildargs as the environment context for commands run via the `Dockerfile` RUN + instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for + passing secret values. + + + For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the + query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded. + + + [Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg) + type: "string" + - name: "shmsize" + in: "query" + description: "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB." + type: "integer" + format: "int64" + - name: "squash" + in: "query" + description: "Squash the resulting images layers into a single layer. *(Experimental release only.)*" + type: "boolean" + - name: "labels" + in: "query" + description: "Arbitrary key/value labels to set on the image, as a JSON map of string pairs." + type: "string" + - name: "networkmode" + in: "query" + description: | + Sets the networking mode for the run commands during build. Supported + standard values are: `bridge`, `host`, `none`, and `container:`. + Any other value is taken as a custom network's name or ID to which this + container should connect to. + type: "string" + - name: "Content-type" + in: "header" + type: "string" + enum: + - "application/x-tar" + default: "application/x-tar" + - name: "X-Registry-Config" + in: "header" + description: | + This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to. + + The key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example: + + ``` + { + "docker.example.com": { + "username": "janedoe", + "password": "hunter2" + }, + "https://index.docker.io/v1/": { + "username": "mobydock", + "password": "conta1n3rize14" + } + } + ``` + + Only the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API. + type: "string" + - name: "platform" + in: "query" + description: "Platform in the format os[/arch[/variant]]" + type: "string" + default: "" + - name: "target" + in: "query" + description: "Target build stage" + type: "string" + default: "" + - name: "outputs" + in: "query" + description: | + BuildKit output configuration in the format of a stringified JSON array of objects. + Each object must have two top-level properties: `Type` and `Attrs`. + The `Type` property must be set to 'moby'. + The `Attrs` property is a map of attributes for the BuildKit output configuration. + See https://docs.docker.com/build/exporters/oci-docker/ for more information. + + Example: + + ``` + [{"Type":"moby","Attrs":{"type":"image","force-compression":"true","compression":"zstd"}}] + ``` + type: "string" + default: "" + - name: "version" + in: "query" + type: "string" + default: "1" + enum: ["1", "2"] + description: | + Version of the builder backend to use. + + - `1` is the first generation classic (deprecated) builder in the Docker daemon (default) + - `2` is [BuildKit](https://github.com/moby/buildkit) + responses: + 200: + description: "no error" + 400: + description: "Bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Image"] + /build/prune: + post: + summary: "Delete builder cache" + produces: + - "application/json" + operationId: "BuildPrune" + parameters: + - name: "reserved-space" + in: "query" + description: "Amount of disk space in bytes to keep for cache" + type: "integer" + format: "int64" + - name: "max-used-space" + in: "query" + description: "Maximum amount of disk space allowed to keep for cache" + type: "integer" + format: "int64" + - name: "min-free-space" + in: "query" + description: "Target amount of free disk space after pruning" + type: "integer" + format: "int64" + - name: "all" + in: "query" + type: "boolean" + description: "Remove all types of build cache" + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the list of build cache objects. + + Available filters: + + - `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time. + - `id=` + - `parent=` + - `type=` + - `description=` + - `inuse` + - `shared` + - `private` + responses: + 200: + description: "No error" + schema: + type: "object" + title: "BuildPruneResponse" + properties: + CachesDeleted: + type: "array" + items: + description: "ID of build cache object" + type: "string" + SpaceReclaimed: + description: "Disk space reclaimed in bytes" + type: "integer" + format: "int64" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Image"] + /images/create: + post: + summary: "Create an image" + description: "Pull or import an image." + operationId: "ImageCreate" + consumes: + - "text/plain" + - "application/octet-stream" + produces: + - "application/json" + responses: + 200: + description: "no error" + 404: + description: "repository does not exist or no read access" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "fromImage" + in: "query" + description: | + Name of the image to pull. If the name includes a tag or digest, specific behavior applies: + + - If only `fromImage` includes a tag, that tag is used. + - If both `fromImage` and `tag` are provided, `tag` takes precedence. + - If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored. + - If neither a tag nor digest is specified, all tags are pulled. + type: "string" + - name: "fromSrc" + in: "query" + description: "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image." + type: "string" + - name: "repo" + in: "query" + description: "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image." + type: "string" + - name: "tag" + in: "query" + description: "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled." + type: "string" + - name: "message" + in: "query" + description: "Set commit message for imported image." + type: "string" + - name: "inputImage" + in: "body" + description: "Image content if the value `-` has been specified in fromSrc query parameter" + schema: + type: "string" + required: false + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + - name: "changes" + in: "query" + description: | + Apply `Dockerfile` instructions to the image that is created, + for example: `changes=ENV DEBUG=true`. + Note that `ENV DEBUG=true` should be URI component encoded. + + Supported `Dockerfile` instructions: + `CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR` + type: "array" + items: + type: "string" + - name: "platform" + in: "query" + description: | + Platform in the format os[/arch[/variant]]. + + When used in combination with the `fromImage` option, the daemon checks + if the given image is present in the local image cache with the given + OS and Architecture, and otherwise attempts to pull the image. If the + option is not set, the host's native OS and Architecture are used. + If the given image does not exist in the local image cache, the daemon + attempts to pull the image with the host's native OS and Architecture. + If the given image does exists in the local image cache, but its OS or + architecture does not match, a warning is produced. + + When used with the `fromSrc` option to import an image from an archive, + this option sets the platform information for the imported image. If + the option is not set, the host's native OS and Architecture are used + for the imported image. + type: "string" + default: "" + tags: ["Image"] + /images/{name}/json: + get: + summary: "Inspect an image" + description: "Return low-level information about an image." + operationId: "ImageInspect" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + $ref: "#/definitions/ImageInspect" + 404: + description: "No such image" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such image: someimage (tag: latest)" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or id" + type: "string" + required: true + - name: "manifests" + in: "query" + description: |- + Include Manifests in the image summary. + + The `manifests` and `platform` options are mutually exclusive, and + an error is produced if both are set. + type: "boolean" + default: false + required: false + - name: "platform" + type: "string" + in: "query" + description: |- + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, + prioritizing the daemon's host platform. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to show inspect. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + The `platform` and `manifests` options are mutually exclusive, and + an error is produced if both are set. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + tags: ["Image"] + /images/{name}/attestations: + get: + summary: "Get attestation statements for an image" + description: | + Return the in-toto attestation statements attached to the image for the + given platform. The daemon locates the attestation manifest(s) that + reference the matching platform image manifest, reads their statement + layers, and returns the verbatim statement JSON together with layer + metadata. + + If the image has no attestations an empty array is returned. + operationId: "ImageAttestations" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + type: "array" + items: + $ref: "#/definitions/AttestationStatement" + 400: + description: "Bad parameter (e.g. malformed `platform` value)" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "No such image, or no manifest found for the requested platform" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + 501: + description: | + The daemon's image backend does not support attestations. This + is returned by the legacy (graphdriver) image store, which does + not preserve OCI image indexes. + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or id" + type: "string" + required: true + - name: "platform" + type: "array" + items: + type: "string" + collectionFormat: "multi" + in: "query" + description: |- + JSON-encoded OCI platform to select the image variant whose + attestations to return. + If omitted, the daemon's default (host) platform is used. + + Only one platform value is currently accepted; passing more than + one returns an error. The parameter is declared as an array so the + wire shape can accept multiple values in the future without an + API version bump. + + Example: `{"os": "linux", "architecture": "amd64"}` + required: false + - name: "type" + type: "array" + items: + type: "string" + collectionFormat: "multi" + in: "query" + description: |- + In-toto predicate type URI to filter returned statements. May be + repeated to accept any of several predicate types. If omitted, all + statements are returned. + + Example: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document` + required: false + - name: "statement" + type: "boolean" + in: "query" + description: |- + Include the verbatim in-toto statement body in each returned + entry. Defaults to false; when omitted or false, only the + descriptor and predicate type are returned and statement blobs + are not read. + default: false + required: false + tags: ["Image"] + /images/{name}/history: + get: + summary: "Get the history of an image" + description: "Return parent layers of an image." + operationId: "ImageHistory" + produces: ["application/json"] + responses: + 200: + description: "List of image layers" + schema: + type: "array" + items: + $ref: "#/definitions/ImageHistoryResponseItem" + examples: + application/json: + - Id: "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710" + Created: 1398108230 + CreatedBy: "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /" + Tags: + - "ubuntu:lucid" + - "ubuntu:10.04" + Size: 182964289 + Comment: "" + - Id: "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8" + Created: 1398108222 + CreatedBy: "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/" + Tags: [] + Size: 0 + Comment: "" + - Id: "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158" + Created: 1371157430 + CreatedBy: "" + Tags: + - "scratch12:latest" + - "scratch:latest" + Size: 0 + Comment: "Imported from -" + 404: + description: "No such image" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or ID" + type: "string" + required: true + - name: "platform" + type: "string" + in: "query" + description: | + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, + prioritizing the daemon's host platform. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to show the history for. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + tags: ["Image"] + /images/{name}/push: + post: + summary: "Push an image" + description: | + Push an image to a registry. + + If you wish to push an image on to a private registry, that image must + already have a tag which references the registry. For example, + `registry.example.com/myimage:latest`. + + The push is cancelled if the HTTP connection is closed. + operationId: "ImagePush" + consumes: + - "application/octet-stream" + responses: + 200: + description: "No error" + 404: + description: "No such image" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + Name of the image to push. For example, `registry.example.com/myimage`. + The image must be present in the local image store with the same name. + + The name should be provided without tag; if a tag is provided, it + is ignored. For example, `registry.example.com/myimage:latest` is + considered equivalent to `registry.example.com/myimage`. + + Use the `tag` parameter to specify the tag to push. + type: "string" + required: true + - name: "tag" + in: "query" + description: | + Tag of the image to push. For example, `latest`. If no tag is provided, + all tags of the given image that are present in the local image store + are pushed. + type: "string" + - name: "platform" + type: "string" + in: "query" + description: | + JSON-encoded OCI platform to select the platform-variant to push. + If not provided, all available variants will attempt to be pushed. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to push to the registry. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + required: true + tags: ["Image"] + /images/{name}/tag: + post: + summary: "Tag an image" + description: | + Create a tag that refers to a source image. + + This creates an additional reference (tag) to the source image. The tag + can include a different repository name and/or tag. If the repository + or tag already exists, it will be overwritten. + operationId: "ImageTag" + responses: + 201: + description: "No error" + 400: + description: "Bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "No such image" + schema: + $ref: "#/definitions/ErrorResponse" + 409: + description: "Conflict" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or ID to tag." + type: "string" + required: true + - name: "repo" + in: "query" + description: "The repository to tag in. For example, `someuser/someimage`." + type: "string" + - name: "tag" + in: "query" + description: "The name of the new tag." + type: "string" + tags: ["Image"] + /images/{name}: + delete: + summary: "Remove an image" + description: | + Remove an image, along with any untagged parent images that were + referenced by that image. + + Images can't be removed if they have descendant images, are being + used by a running container or are being used by a build. + operationId: "ImageDelete" + produces: ["application/json"] + responses: + 200: + description: "The image was deleted successfully" + schema: + type: "array" + items: + $ref: "#/definitions/ImageDeleteResponseItem" + examples: + application/json: + - Untagged: "3e2f21a89f" + - Deleted: "3e2f21a89f" + - Deleted: "53b4f83ac9" + 404: + description: "No such image" + schema: + $ref: "#/definitions/ErrorResponse" + 409: + description: "Conflict" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or ID" + type: "string" + required: true + - name: "force" + in: "query" + description: "Remove the image even if it is being used by stopped containers or has other tags" + type: "boolean" + default: false + - name: "noprune" + in: "query" + description: "Do not delete untagged parent images" + type: "boolean" + default: false + - name: "platforms" + in: "query" + description: | + Select platform-specific content to delete. + Multiple values are accepted. + Each platform is a OCI platform encoded as a JSON string. + type: "array" + items: + # This should be OCIPlatform + # but $ref is not supported for array in query in Swagger 2.0 + # $ref: "#/definitions/OCIPlatform" + type: "string" + tags: ["Image"] + /images/search: + get: + summary: "Search images" + description: "Search for an image on Docker Hub." + operationId: "ImageSearch" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + type: "array" + items: + type: "object" + title: "ImageSearchResponseItem" + properties: + description: + type: "string" + is_official: + type: "boolean" + is_automated: + description: | + Whether this repository has automated builds enabled. + +


+ + > **Deprecated**: This field is deprecated and will always be "false". + type: "boolean" + example: false + name: + type: "string" + star_count: + type: "integer" + examples: + application/json: + - description: "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!" + is_official: true + is_automated: false + name: "alpine" + star_count: 10093 + - description: "Busybox base image." + is_official: true + is_automated: false + name: "Busybox base image." + star_count: 3037 + - description: "The PostgreSQL object-relational database system provides reliability and data integrity." + is_official: true + is_automated: false + name: "postgres" + star_count: 12408 + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "term" + in: "query" + description: "Term to search" + type: "string" + required: true + - name: "limit" + in: "query" + description: "Maximum number of results to return" + type: "integer" + - name: "filters" + in: "query" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters: + + - `is-official=(true|false)` + - `stars=` Matches images that has at least 'number' stars. + type: "string" + tags: ["Image"] + /images/prune: + post: + summary: "Delete unused images" + produces: + - "application/json" + operationId: "ImagePrune" + parameters: + - name: "filters" + in: "query" + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters: + + - `dangling=` When set to `true` (or `1`), prune only + unused *and* untagged images. When set to `false` + (or `0`), all unused images are pruned. + - `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels. + type: "string" + responses: + 200: + description: "No error" + schema: + type: "object" + title: "ImagePruneResponse" + properties: + ImagesDeleted: + description: "Images that were deleted" + type: "array" + items: + $ref: "#/definitions/ImageDeleteResponseItem" + SpaceReclaimed: + description: "Disk space reclaimed in bytes" + type: "integer" + format: "int64" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Image"] + /auth: + post: + summary: "Check auth configuration" + description: | + Validate credentials for a registry and, if available, get an identity + token for accessing the registry without password. + operationId: "SystemAuth" + consumes: ["application/json"] + produces: ["application/json"] + responses: + 200: + description: "An identity token was generated successfully." + schema: + $ref: "#/definitions/AuthResponse" + 204: + description: "No error" + 401: + description: "Auth error" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "authConfig" + in: "body" + description: "Authentication to check" + schema: + $ref: "#/definitions/AuthConfig" + tags: ["System"] + /info: + get: + summary: "Get system information" + operationId: "SystemInfo" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + $ref: "#/definitions/SystemInfo" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["System"] + /version: + get: + summary: "Get version" + description: "Returns the version of Docker that is running and various information about the system that Docker is running on." + operationId: "SystemVersion" + produces: ["application/json"] + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/SystemVersion" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["System"] + /_ping: + get: + summary: "Ping" + description: "This is a dummy endpoint you can use to test if the server is accessible." + operationId: "SystemPing" + produces: ["text/plain"] + responses: + 200: + description: "no error" + schema: + type: "string" + example: "OK" + headers: + Api-Version: + type: "string" + description: "Max API Version the server supports" + Builder-Version: + type: "string" + description: | + Default version of docker image builder + + The default on Linux is version "2" (BuildKit), but the daemon + can be configured to recommend version "1" (classic Builder). + Windows does not yet support BuildKit for native Windows images, + and uses "1" (classic builder) as a default. + + This value is a recommendation as advertised by the daemon, and + it is up to the client to choose which builder to use. + default: "2" + Docker-Experimental: + type: "boolean" + description: "If the server is running with experimental mode enabled" + Swarm: + type: "string" + enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"] + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. + default: "inactive" + Cache-Control: + type: "string" + default: "no-cache, no-store, must-revalidate" + Pragma: + type: "string" + default: "no-cache" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + headers: + Cache-Control: + type: "string" + default: "no-cache, no-store, must-revalidate" + Pragma: + type: "string" + default: "no-cache" + tags: ["System"] + head: + summary: "Ping" + description: "This is a dummy endpoint you can use to test if the server is accessible." + operationId: "SystemPingHead" + produces: ["text/plain"] + responses: + 200: + description: "no error" + schema: + type: "string" + example: "(empty)" + headers: + Api-Version: + type: "string" + description: "Max API Version the server supports" + Builder-Version: + type: "string" + description: "Default version of docker image builder" + Docker-Experimental: + type: "boolean" + description: "If the server is running with experimental mode enabled" + Swarm: + type: "string" + enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"] + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. + default: "inactive" + Cache-Control: + type: "string" + default: "no-cache, no-store, must-revalidate" + Pragma: + type: "string" + default: "no-cache" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["System"] + /commit: + post: + summary: "Create a new image from a container" + operationId: "ImageCommit" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "no error" + schema: + $ref: "#/definitions/IDResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "containerConfig" + in: "body" + description: "The container configuration" + schema: + $ref: "#/definitions/ContainerConfig" + - name: "container" + in: "query" + description: "The ID or name of the container to commit" + type: "string" + - name: "repo" + in: "query" + description: "Repository name for the created image" + type: "string" + - name: "tag" + in: "query" + description: "Tag name for the create image" + type: "string" + - name: "comment" + in: "query" + description: "Commit message" + type: "string" + - name: "author" + in: "query" + description: "Author of the image (e.g., `John Hannibal Smith `)" + type: "string" + - name: "pause" + in: "query" + description: "Whether to pause the container before committing" + type: "boolean" + default: true + - name: "changes" + in: "query" + description: "`Dockerfile` instructions to apply while committing" + type: "string" + tags: ["Image"] + /events: + get: + summary: "Monitor events" + description: | + Stream real-time events from the server. + + Various objects within Docker report events when something happens to them. + + Containers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune` + + Images report these events: `create`, `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune` + + Volumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune` + + Networks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune` + + The Docker daemon reports these events: `reload` + + Services report these events: `create`, `update`, and `remove` + + Nodes report these events: `create`, `update`, and `remove` + + Secrets report these events: `create`, `update`, and `remove` + + Configs report these events: `create`, `update`, and `remove` + + The Builder reports `prune` events + + operationId: "SystemEvents" + produces: + - "application/jsonl" + - "application/x-ndjson" + - "application/json-seq" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/EventMessage" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "since" + in: "query" + description: "Show events created since this timestamp then stream new events." + type: "string" + - name: "until" + in: "query" + description: "Show events created until this timestamp then stop streaming." + type: "string" + - name: "filters" + in: "query" + description: | + A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters: + + - `config=` config name or ID + - `container=` container name or ID + - `daemon=` daemon name or ID + - `event=` event type + - `image=` image name or ID + - `label=` image or container label + - `network=` network name or ID + - `node=` node ID + - `plugin`= plugin name or ID + - `scope`= local or swarm + - `secret=` secret name or ID + - `service=` service name or ID + - `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config` + - `volume=` volume name + type: "string" + tags: ["System"] + /system/df: + get: + summary: "Get data usage information" + operationId: "SystemDataUsage" + responses: + 200: + description: "no error" + schema: + type: "object" + title: "SystemDataUsageResponse" + properties: + ImageUsage: + $ref: "#/definitions/ImagesDiskUsage" + ContainerUsage: + $ref: "#/definitions/ContainersDiskUsage" + VolumeUsage: + $ref: "#/definitions/VolumesDiskUsage" + BuildCacheUsage: + $ref: "#/definitions/BuildCacheDiskUsage" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "type" + in: "query" + description: | + Object types, for which to compute and return data. + type: "array" + collectionFormat: multi + items: + type: "string" + enum: ["container", "image", "volume", "build-cache"] + - name: "verbose" + in: "query" + description: | + Show detailed information on space usage. + type: "boolean" + default: false + tags: ["System"] + /images/{name}/get: + get: + summary: "Export an image" + description: | + Get a tarball containing all images and metadata for a repository. + + If `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced. + + ### Image tarball format + + An image tarball contains [Content as defined in the OCI Image Layout Specification](https://github.com/opencontainers/image-spec/blob/v1.1.1/image-layout.md#content). + + Additionally, includes the manifest.json file associated with a backwards compatible docker save format. + + If the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs. + + ```json + { + "hello-world": { + "latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1" + } + } + ``` + operationId: "ImageGet" + produces: + - "application/x-tar" + responses: + 200: + description: "no error" + schema: + type: "string" + format: "binary" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or ID" + type: "string" + required: true + - name: "platform" + type: "array" + items: + type: "string" + collectionFormat: "multi" + in: "query" + description: | + JSON encoded OCI platform describing a platform which will be used + to select a platform-specific image to be saved if the image is + multi-platform. + If not provided, the full multi-platform image will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + tags: ["Image"] + /images/get: + get: + summary: "Export several images" + description: | + Get a tarball containing all images and metadata for several image + repositories. + + For each value of the `names` parameter: if it is a specific name and + tag (e.g. `ubuntu:latest`), then only that image (and its parents) are + returned; if it is an image ID, similarly only that image (and its parents) + are returned and there would be no names referenced in the 'repositories' + file for this image ID. + + For details on the format, see the [export image endpoint](#operation/ImageGet). + operationId: "ImageGetAll" + produces: + - "application/x-tar" + responses: + 200: + description: "no error" + schema: + type: "string" + format: "binary" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "names" + in: "query" + description: "Image names to filter by" + type: "array" + items: + type: "string" + - name: "platform" + type: "array" + items: + type: "string" + collectionFormat: "multi" + in: "query" + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to be saved if the image is + multi-platform. If not provided, the full multi-platform image + will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + tags: ["Image"] + /images/load: + post: + summary: "Import images" + description: | + Load a set of images and tags into a repository. + + For details on the format, see the [export image endpoint](#operation/ImageGet). + operationId: "ImageLoad" + consumes: + - "application/x-tar" + produces: + - "application/json" + responses: + 200: + description: "no error" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "imagesTarball" + in: "body" + description: "Tar archive containing images" + schema: + type: "string" + format: "binary" + - name: "quiet" + in: "query" + description: "Suppress progress details during load." + type: "boolean" + default: false + - name: "platform" + type: "array" + items: + type: "string" + collectionFormat: "multi" + in: "query" + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to load if the image is + multi-platform. If not provided, the full multi-platform image + will be loaded. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + tags: ["Image"] + /containers/{id}/exec: + post: + summary: "Create an exec instance" + description: "Run a command inside a running container." + operationId: "ContainerExec" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "no error" + schema: + $ref: "#/definitions/IDResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 409: + description: "container is paused" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "execConfig" + in: "body" + description: "Exec configuration" + schema: + type: "object" + title: "ExecConfig" + properties: + AttachStdin: + type: "boolean" + description: "Attach to `stdin` of the exec command." + AttachStdout: + type: "boolean" + description: "Attach to `stdout` of the exec command." + AttachStderr: + type: "boolean" + description: "Attach to `stderr` of the exec command." + ConsoleSize: + type: "array" + description: "Initial console size, as an `[height, width]` array." + x-nullable: true + minItems: 2 + maxItems: 2 + items: + type: "integer" + minimum: 0 + example: [80, 64] + DetachKeys: + type: "string" + description: | + Override the key sequence for detaching a container. Format is + a single character `[a-Z]` or `ctrl-` where `` + is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. + Tty: + type: "boolean" + description: "Allocate a pseudo-TTY." + Env: + description: | + A list of environment variables in the form `["VAR=value", ...]`. + type: "array" + items: + type: "string" + Cmd: + type: "array" + description: "Command to run, as a string or array of strings." + items: + type: "string" + Privileged: + type: "boolean" + description: "Runs the exec process with extended privileges." + default: false + User: + type: "string" + description: | + The user, and optionally, group to run the exec process inside + the container. Format is one of: `user`, `user:group`, `uid`, + or `uid:gid`. + WorkingDir: + type: "string" + description: | + The working directory for the exec process inside the container. + example: + AttachStdin: false + AttachStdout: true + AttachStderr: true + DetachKeys: "ctrl-p,ctrl-q" + Tty: false + Cmd: + - "date" + Env: + - "FOO=bar" + - "BAZ=quux" + required: true + - name: "id" + in: "path" + description: "ID or name of container" + type: "string" + required: true + tags: ["Exec"] + /exec/{id}/start: + post: + summary: "Start an exec instance" + description: | + Starts a previously set up exec instance. If detach is true, this endpoint + returns immediately after starting the command. Otherwise, it sets up an + interactive session with the command. + operationId: "ExecStart" + consumes: + - "application/json" + produces: + - "application/vnd.docker.raw-stream" + - "application/vnd.docker.multiplexed-stream" + responses: + 200: + description: "No error" + 404: + description: "No such exec instance" + schema: + $ref: "#/definitions/ErrorResponse" + 409: + description: "Container is stopped or paused" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "execStartConfig" + in: "body" + schema: + type: "object" + title: "ExecStartConfig" + properties: + Detach: + type: "boolean" + description: "Detach from the command." + example: false + Tty: + type: "boolean" + description: "Allocate a pseudo-TTY." + example: true + ConsoleSize: + type: "array" + description: "Initial console size, as an `[height, width]` array." + x-nullable: true + minItems: 2 + maxItems: 2 + items: + type: "integer" + minimum: 0 + example: [80, 64] + - name: "id" + in: "path" + description: "Exec instance ID" + required: true + type: "string" + tags: ["Exec"] + /exec/{id}/resize: + post: + summary: "Resize an exec instance" + description: | + Resize the TTY session used by an exec instance. This endpoint only works + if `tty` was specified as part of creating and starting the exec instance. + operationId: "ExecResize" + responses: + 200: + description: "No error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "No such exec instance" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Exec instance ID" + required: true + type: "string" + - name: "h" + in: "query" + required: true + description: "Height of the TTY session in characters" + type: "integer" + - name: "w" + in: "query" + required: true + description: "Width of the TTY session in characters" + type: "integer" + tags: ["Exec"] + /exec/{id}/json: + get: + summary: "Inspect an exec instance" + description: "Return low-level information about an exec instance." + operationId: "ExecInspect" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + type: "object" + title: "ExecInspectResponse" + properties: + CanRemove: + type: "boolean" + DetachKeys: + type: "string" + ID: + type: "string" + Running: + type: "boolean" + ExitCode: + type: "integer" + ProcessConfig: + $ref: "#/definitions/ProcessConfig" + OpenStdin: + type: "boolean" + OpenStderr: + type: "boolean" + OpenStdout: + type: "boolean" + ContainerID: + type: "string" + Pid: + type: "integer" + description: "The system process ID for the exec process." + examples: + application/json: + CanRemove: false + ContainerID: "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126" + DetachKeys: "" + ExitCode: 2 + ID: "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b" + OpenStderr: true + OpenStdin: true + OpenStdout: true + ProcessConfig: + arguments: + - "-c" + - "exit 2" + entrypoint: "sh" + privileged: false + tty: true + user: "1000" + Running: false + Pid: 42000 + 404: + description: "No such exec instance" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Exec instance ID" + required: true + type: "string" + tags: ["Exec"] + + /volumes: + get: + summary: "List volumes" + operationId: "VolumeList" + produces: ["application/json"] + responses: + 200: + description: "Summary volume data that matches the query" + schema: + $ref: "#/definitions/VolumeListResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + description: | + JSON encoded value of the filters (a `map[string][]string`) to + process on the volumes list. Available filters: + + - `dangling=` When set to `true` (or `1`), returns all + volumes that are not in use by a container. When set to `false` + (or `0`), only volumes that are in use by one or more + containers are returned. + - `driver=` Matches volumes based on their driver. + - `label=` or `label=:` Matches volumes based on + the presence of a `label` alone or a `label` and a value. + - `name=` Matches all or part of a volume name. + type: "string" + format: "json" + tags: ["Volume"] + + /volumes/create: + post: + summary: "Create a volume" + operationId: "VolumeCreate" + consumes: ["application/json"] + produces: ["application/json"] + responses: + 201: + description: "The volume was created successfully" + schema: + $ref: "#/definitions/Volume" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "volumeConfig" + in: "body" + required: true + description: "Volume configuration" + schema: + $ref: "#/definitions/VolumeCreateRequest" + tags: ["Volume"] + + /volumes/{name}: + get: + summary: "Inspect a volume" + operationId: "VolumeInspect" + produces: ["application/json"] + responses: + 200: + description: "No error" + schema: + $ref: "#/definitions/Volume" + 404: + description: "No such volume" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + required: true + description: "Volume name or ID" + type: "string" + tags: ["Volume"] + + put: + summary: | + "Update a volume. Valid only for Swarm cluster volumes" + operationId: "VolumeUpdate" + consumes: ["application/json"] + produces: ["application/json"] + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such volume" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "The name or ID of the volume" + type: "string" + required: true + - name: "body" + in: "body" + schema: + # though the schema for is an object that contains only a + # ClusterVolumeSpec, wrapping the ClusterVolumeSpec in this object + # means that if, later on, we support things like changing the + # labels, we can do so without duplicating that information to the + # ClusterVolumeSpec. + type: "object" + description: "Volume configuration" + properties: + Spec: + $ref: "#/definitions/ClusterVolumeSpec" + description: | + The spec of the volume to update. Currently, only Availability may + change. All other fields must remain unchanged. + - name: "version" + in: "query" + description: | + The version number of the volume being updated. This is required to + avoid conflicting writes. Found in the volume's `ClusterVolume` + field. + type: "integer" + format: "int64" + required: true + tags: ["Volume"] + + delete: + summary: "Remove a volume" + description: "Instruct the driver to remove the volume." + operationId: "VolumeDelete" + responses: + 204: + description: "The volume was removed" + 404: + description: "No such volume or volume driver" + schema: + $ref: "#/definitions/ErrorResponse" + 409: + description: "Volume is in use and cannot be removed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + required: true + description: "Volume name or ID" + type: "string" + - name: "force" + in: "query" + description: "Force the removal of the volume" + type: "boolean" + default: false + tags: ["Volume"] + + /volumes/prune: + post: + summary: "Delete unused volumes" + produces: + - "application/json" + operationId: "VolumePrune" + parameters: + - name: "filters" + in: "query" + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels. + - `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes. + type: "string" + responses: + 200: + description: "No error" + schema: + type: "object" + title: "VolumePruneResponse" + properties: + VolumesDeleted: + description: "Volumes that were deleted" + type: "array" + items: + type: "string" + SpaceReclaimed: + description: "Disk space reclaimed in bytes" + type: "integer" + format: "int64" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Volume"] + /networks: + get: + summary: "List networks" + description: | + Returns a list of networks. For details on the format, see the + [network inspect endpoint](#operation/NetworkInspect). + + Note that it uses a different, smaller representation of a network than + inspecting a single network. For example, the list of containers attached + to the network is not propagated in API versions 1.28 and up. + operationId: "NetworkList" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + type: "array" + items: + $ref: "#/definitions/NetworkSummary" + examples: + application/json: + - Name: "bridge" + Id: "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566" + Created: "2016-10-19T06:21:00.416543526Z" + Scope: "local" + Driver: "bridge" + EnableIPv4: true + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: "default" + Config: + - + Subnet: "172.17.0.0/16" + Options: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" + com.docker.network.bridge.name: "docker0" + com.docker.network.driver.mtu: "1500" + - Name: "none" + Id: "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794" + Created: "0001-01-01T00:00:00Z" + Scope: "local" + Driver: "null" + EnableIPv4: false + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: "default" + Config: [] + Containers: {} + Options: {} + - Name: "host" + Id: "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e" + Created: "0001-01-01T00:00:00Z" + Scope: "local" + Driver: "host" + EnableIPv4: false + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: "default" + Config: [] + Containers: {} + Options: {} + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + description: | + JSON encoded value of the filters (a `map[string][]string`) to process + on the networks list. + + Available filters: + + - `dangling=` When set to `true` (or `1`), returns all + networks that are not in use by a container. When set to `false` + (or `0`), only networks that are in use by one or more + containers are returned. + - `driver=` Matches a network's driver. + - `id=` Matches all or part of a network ID. + - `label=` or `label==` of a network label. + - `name=` Matches all or part of a network name. + - `scope=["swarm"|"global"|"local"]` Filters networks by scope (`swarm`, `global`, or `local`). + - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. + type: "string" + tags: ["Network"] + + /networks/{id}: + get: + summary: "Inspect a network" + operationId: "NetworkInspect" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + $ref: "#/definitions/NetworkInspect" + 404: + description: "Network not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Network ID or name" + required: true + type: "string" + - name: "verbose" + in: "query" + description: "Detailed inspect output for troubleshooting" + type: "boolean" + default: false + - name: "scope" + in: "query" + description: "Filter the network by scope (swarm, global, or local)" + type: "string" + tags: ["Network"] + + delete: + summary: "Remove a network" + operationId: "NetworkDelete" + responses: + 204: + description: "No error" + 403: + description: "operation not supported for pre-defined networks" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such network" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Network ID or name" + required: true + type: "string" + tags: ["Network"] + + /networks/create: + post: + summary: "Create a network" + operationId: "NetworkCreate" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "Network created successfully" + schema: + $ref: "#/definitions/NetworkCreateResponse" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 403: + description: | + Forbidden operation. This happens when trying to create a network named after a pre-defined network, + or when trying to create an overlay network on a daemon which is not part of a Swarm cluster. + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "plugin not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "networkConfig" + in: "body" + description: "Network configuration" + required: true + schema: + type: "object" + title: "NetworkCreateRequest" + required: ["Name"] + properties: + Name: + description: "The network's name." + type: "string" + example: "my_network" + Driver: + description: "Name of the network driver plugin to use." + type: "string" + default: "bridge" + example: "bridge" + Scope: + description: | + The level at which the network exists (e.g. `swarm` for cluster-wide + or `local` for machine level). + type: "string" + Internal: + description: "Restrict external access to the network." + type: "boolean" + Attachable: + description: | + Globally scoped network is manually attachable by regular + containers from workers in swarm mode. + type: "boolean" + example: true + Ingress: + description: | + Ingress network is the network which provides the routing-mesh + in swarm mode. + type: "boolean" + example: false + ConfigOnly: + description: | + Creates a config-only network. Config-only networks are placeholder + networks for network configurations to be used by other networks. + Config-only networks cannot be used directly to run containers + or services. + type: "boolean" + default: false + example: false + ConfigFrom: + description: | + Specifies the source which will provide the configuration for + this network. The specified network must be an existing + config-only network; see ConfigOnly. + $ref: "#/definitions/ConfigReference" + IPAM: + description: "Optional custom IP scheme for the network." + $ref: "#/definitions/IPAM" + EnableIPv4: + description: "Enable IPv4 on the network." + type: "boolean" + example: true + EnableIPv6: + description: "Enable IPv6 on the network." + type: "boolean" + example: true + Options: + description: "Network specific options to be used by the drivers." + type: "object" + additionalProperties: + type: "string" + example: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" + com.docker.network.bridge.name: "docker0" + com.docker.network.driver.mtu: "1500" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + tags: ["Network"] + + /networks/{id}/connect: + post: + summary: "Connect a container to a network" + description: "The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container" + operationId: "NetworkConnect" + consumes: + - "application/json" + responses: + 200: + description: "No error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 403: + description: "Operation forbidden" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "Network or container not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Network ID or name" + required: true + type: "string" + - name: "container" + in: "body" + required: true + schema: + $ref: "#/definitions/NetworkConnectRequest" + tags: ["Network"] + + /networks/{id}/disconnect: + post: + summary: "Disconnect a container from a network" + operationId: "NetworkDisconnect" + consumes: + - "application/json" + responses: + 200: + description: "No error" + 403: + description: "Operation not supported for swarm scoped networks" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "Network or container not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Network ID or name" + required: true + type: "string" + - name: "container" + in: "body" + required: true + schema: + $ref: "#/definitions/NetworkDisconnectRequest" + tags: ["Network"] + /networks/prune: + post: + summary: "Delete unused networks" + produces: + - "application/json" + operationId: "NetworkPrune" + parameters: + - name: "filters" + in: "query" + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels. + type: "string" + responses: + 200: + description: "No error" + schema: + type: "object" + title: "NetworkPruneResponse" + properties: + NetworksDeleted: + description: "Networks that were deleted" + type: "array" + items: + type: "string" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Network"] + /plugins: + get: + summary: "List plugins" + operationId: "PluginList" + description: "Returns information about installed plugins." + produces: ["application/json"] + responses: + 200: + description: "No error" + schema: + type: "array" + items: + $ref: "#/definitions/Plugin" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the plugin list. + + Available filters: + + - `capability=` + - `enable=|` + tags: ["Plugin"] + + /plugins/privileges: + get: + summary: "Get plugin privileges" + operationId: "GetPluginPrivileges" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/PluginPrivilege" + example: + - Name: "network" + Description: "" + Value: + - "host" + - Name: "mount" + Description: "" + Value: + - "/data" + - Name: "device" + Description: "" + Value: + - "/dev/cpu_dma_latency" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "remote" + in: "query" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + tags: + - "Plugin" + + /plugins/pull: + post: + summary: "Install a plugin" + operationId: "PluginPull" + description: | + Pulls and installs a plugin. After the plugin is installed, it can be + enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable). + produces: + - "application/json" + responses: + 204: + description: "no error" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "remote" + in: "query" + description: | + Remote reference for plugin to install. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true + type: "string" + - name: "name" + in: "query" + description: | + Local name for the pulled plugin. + + The `:latest` tag is optional, and is used as the default if omitted. + required: false + type: "string" + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + - name: "body" + in: "body" + schema: + type: "array" + items: + $ref: "#/definitions/PluginPrivilege" + example: + - Name: "network" + Description: "" + Value: + - "host" + - Name: "mount" + Description: "" + Value: + - "/data" + - Name: "device" + Description: "" + Value: + - "/dev/cpu_dma_latency" + tags: ["Plugin"] + /plugins/{name}/json: + get: + summary: "Inspect a plugin" + operationId: "PluginInspect" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Plugin" + 404: + description: "plugin is not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + tags: ["Plugin"] + /plugins/{name}: + delete: + summary: "Remove a plugin" + operationId: "PluginDelete" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Plugin" + 404: + description: "plugin is not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "force" + in: "query" + description: | + Disable the plugin before removing. This may result in issues if the + plugin is in use by a container. + type: "boolean" + default: false + tags: ["Plugin"] + /plugins/{name}/enable: + post: + summary: "Enable a plugin" + operationId: "PluginEnable" + responses: + 200: + description: "no error" + 404: + description: "plugin is not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "timeout" + in: "query" + description: "Set the HTTP client timeout (in seconds)" + type: "integer" + default: 0 + tags: ["Plugin"] + /plugins/{name}/disable: + post: + summary: "Disable a plugin" + operationId: "PluginDisable" + responses: + 200: + description: "no error" + 404: + description: "plugin is not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "force" + in: "query" + description: | + Force disable a plugin even if still in use. + required: false + type: "boolean" + tags: ["Plugin"] + /plugins/{name}/upgrade: + post: + summary: "Upgrade a plugin" + operationId: "PluginUpgrade" + responses: + 204: + description: "no error" + 404: + description: "plugin not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "remote" + in: "query" + description: | + Remote reference to upgrade to. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true + type: "string" + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + - name: "body" + in: "body" + schema: + type: "array" + items: + $ref: "#/definitions/PluginPrivilege" + example: + - Name: "network" + Description: "" + Value: + - "host" + - Name: "mount" + Description: "" + Value: + - "/data" + - Name: "device" + Description: "" + Value: + - "/dev/cpu_dma_latency" + tags: ["Plugin"] + /plugins/create: + post: + summary: "Create a plugin" + operationId: "PluginCreate" + consumes: + - "application/x-tar" + responses: + 204: + description: "no error" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "query" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "tarContext" + in: "body" + description: "Path to tar containing plugin rootfs and manifest" + schema: + type: "string" + format: "binary" + tags: ["Plugin"] + /plugins/{name}/push: + post: + summary: "Push a plugin" + operationId: "PluginPush" + description: | + Push a plugin to the registry. + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + responses: + 200: + description: "no error" + 404: + description: "plugin not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Plugin"] + /plugins/{name}/set: + post: + summary: "Configure a plugin" + operationId: "PluginSet" + consumes: + - "application/json" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "body" + in: "body" + schema: + type: "array" + items: + type: "string" + example: ["DEBUG=1"] + responses: + 204: + description: "No error" + 404: + description: "Plugin not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Plugin"] + /nodes: + get: + summary: "List nodes" + operationId: "NodeList" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/Node" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + description: | + Filters to process on the nodes list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `id=` + - `label=` + - `membership=`(`accepted`|`pending`)` + - `name=` + - `node.label=` + - `role=`(`manager`|`worker`)` + type: "string" + tags: ["Node"] + /nodes/{id}: + get: + summary: "Inspect a node" + operationId: "NodeInspect" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Node" + 404: + description: "no such node" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "The ID or name of the node" + type: "string" + required: true + tags: ["Node"] + delete: + summary: "Delete a node" + operationId: "NodeDelete" + responses: + 200: + description: "no error" + 404: + description: "no such node" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "The ID or name of the node" + type: "string" + required: true + - name: "force" + in: "query" + description: "Force remove a node from the swarm" + default: false + type: "boolean" + tags: ["Node"] + /nodes/{id}/update: + post: + summary: "Update a node" + operationId: "NodeUpdate" + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such node" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "The ID of the node" + type: "string" + required: true + - name: "body" + in: "body" + schema: + $ref: "#/definitions/NodeSpec" + - name: "version" + in: "query" + description: | + The version number of the node object being updated. This is required + to avoid conflicting writes. + type: "integer" + format: "int64" + required: true + tags: ["Node"] + /swarm: + get: + summary: "Inspect swarm" + operationId: "SwarmInspect" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Swarm" + 404: + description: "no such swarm" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Swarm"] + /swarm/init: + post: + summary: "Initialize a new swarm" + operationId: "SwarmInit" + produces: + - "application/json" + - "text/plain" + responses: + 200: + description: "no error" + schema: + description: "The node ID" + type: "string" + example: "7v2t30z9blmxuhnyo6s4cpenp" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is already part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + required: true + schema: + type: "object" + title: "SwarmInitRequest" + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication, as well + as determining the networking interface used for the VXLAN + Tunnel Endpoint (VTEP). This can either be an address/port + combination in the form `192.168.1.1:4567`, or an interface + followed by a port number, like `eth0:4567`. If the port number + is omitted, the default swarm listening port is used. + type: "string" + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: "string" + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + type: "string" + DataPathPort: + description: | + DataPathPort specifies the data path port number for data traffic. + Acceptable port range is 1024 to 49151. + if no port is set or is set to 0, default port 4789 will be used. + type: "integer" + format: "uint32" + DefaultAddrPool: + description: | + Default Address Pool specifies default subnet pools for global + scope networks. + type: "array" + items: + type: "string" + example: ["10.10.0.0/16", "20.20.0.0/16"] + ForceNewCluster: + description: "Force creation of a new swarm." + type: "boolean" + SubnetSize: + description: | + SubnetSize specifies the subnet size of the networks created + from the default subnet pool. + type: "integer" + format: "uint32" + Spec: + $ref: "#/definitions/SwarmSpec" + example: + ListenAddr: "0.0.0.0:2377" + AdvertiseAddr: "192.168.1.1:2377" + DataPathPort: 4789 + DefaultAddrPool: ["10.10.0.0/8", "20.20.0.0/8"] + SubnetSize: 24 + ForceNewCluster: false + Spec: + Orchestration: {} + Raft: {} + Dispatcher: {} + CAConfig: {} + EncryptionConfig: + AutoLockManagers: false + tags: ["Swarm"] + /swarm/join: + post: + summary: "Join an existing swarm" + operationId: "SwarmJoin" + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is already part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + required: true + schema: + type: "object" + title: "SwarmJoinRequest" + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication if the node + gets promoted to manager, as well as determining the networking + interface used for the VXLAN Tunnel Endpoint (VTEP). This is + required for joining a swarm. If the port number is omitted, + the default swarm listening port is used. + type: "string" + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: "string" + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + + type: "string" + RemoteAddrs: + description: | + Addresses of manager nodes already participating in the swarm. + type: "array" + items: + type: "string" + JoinToken: + description: "Secret token for joining this swarm." + type: "string" + required: [ListenAddr, RemoteAddrs, JoinToken] + example: + ListenAddr: "0.0.0.0:2377" + AdvertiseAddr: "192.168.1.1:2377" + DataPathAddr: "192.168.1.1" + RemoteAddrs: + - "node1:2377" + JoinToken: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + tags: ["Swarm"] + /swarm/leave: + post: + summary: "Leave a swarm" + operationId: "SwarmLeave" + responses: + 200: + description: "no error" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "force" + description: | + Force leave swarm, even if this is the last manager or that it will + break the cluster. + in: "query" + type: "boolean" + default: false + tags: ["Swarm"] + /swarm/update: + post: + summary: "Update a swarm" + operationId: "SwarmUpdate" + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + required: true + schema: + $ref: "#/definitions/SwarmSpec" + - name: "version" + in: "query" + description: | + The version number of the swarm object being updated. This is + required to avoid conflicting writes. + type: "integer" + format: "int64" + required: true + - name: "rotateWorkerToken" + in: "query" + description: "Rotate the worker join token." + type: "boolean" + default: false + - name: "rotateManagerToken" + in: "query" + description: "Rotate the manager join token." + type: "boolean" + default: false + - name: "rotateManagerUnlockKey" + in: "query" + description: "Rotate the manager unlock key." + type: "boolean" + default: false + tags: ["Swarm"] + /swarm/unlockkey: + get: + summary: "Get the unlock key" + operationId: "SwarmUnlockkey" + consumes: + - "application/json" + responses: + 200: + description: "no error" + schema: + type: "object" + title: "UnlockKeyResponse" + properties: + UnlockKey: + description: "The swarm's unlock key." + type: "string" + example: + UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Swarm"] + /swarm/unlock: + post: + summary: "Unlock a locked manager" + operationId: "SwarmUnlock" + consumes: + - "application/json" + produces: + - "application/json" + parameters: + - name: "body" + in: "body" + required: true + schema: + type: "object" + title: "SwarmUnlockRequest" + properties: + UnlockKey: + description: "The swarm's unlock key." + type: "string" + example: + UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + responses: + 200: + description: "no error" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Swarm"] + /services: + get: + summary: "List services" + operationId: "ServiceList" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/Service" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the services list. + + Available filters: + + - `id=` + - `label=` + - `mode=["replicated"|"global"]` + - `name=` + - name: "status" + in: "query" + type: "boolean" + description: | + Include service status, with count of running and desired tasks. + tags: ["Service"] + /services/create: + post: + summary: "Create a service" + operationId: "ServiceCreate" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "no error" + schema: + $ref: "#/definitions/ServiceCreateResponse" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 403: + description: "network is not eligible for services" + schema: + $ref: "#/definitions/ErrorResponse" + 409: + description: "name conflicts with an existing service" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + required: true + schema: + allOf: + - $ref: "#/definitions/ServiceSpec" + - type: "object" + example: + Name: "web" + TaskTemplate: + ContainerSpec: + Image: "nginx:alpine" + Mounts: + - + ReadOnly: true + Source: "web-data" + Target: "/usr/share/nginx/html" + Type: "volume" + VolumeOptions: + DriverConfig: {} + Labels: + com.example.something: "something-value" + Hosts: ["10.10.10.10 host1", "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2"] + User: "33" + DNSConfig: + Nameservers: ["8.8.8.8"] + Search: ["example.org"] + Options: ["timeout:3"] + Secrets: + - + File: + Name: "www.example.org.key" + UID: "33" + GID: "33" + Mode: 384 + SecretID: "fpjqlhnwb19zds35k8wn80lq9" + SecretName: "example_org_domain_key" + OomScoreAdj: 0 + LogDriver: + Name: "json-file" + Options: + max-file: "3" + max-size: "10M" + Placement: {} + Resources: + Limits: + MemoryBytes: 104857600 + Reservations: {} + RestartPolicy: + Condition: "on-failure" + Delay: 10000000000 + MaxAttempts: 10 + Mode: + Replicated: + Replicas: 4 + UpdateConfig: + Parallelism: 2 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Ports: + - + Protocol: "tcp" + PublishedPort: 8080 + TargetPort: 80 + Labels: + foo: "bar" + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + tags: ["Service"] + /services/{id}: + get: + summary: "Inspect a service" + operationId: "ServiceInspect" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Service" + 404: + description: "no such service" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "ID or name of service." + required: true + type: "string" + - name: "insertDefaults" + in: "query" + description: "Fill empty fields with default values." + type: "boolean" + default: false + tags: ["Service"] + delete: + summary: "Delete a service" + operationId: "ServiceDelete" + responses: + 200: + description: "no error" + 404: + description: "no such service" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "ID or name of service." + required: true + type: "string" + tags: ["Service"] + /services/{id}/update: + post: + summary: "Update a service" + operationId: "ServiceUpdate" + consumes: ["application/json"] + produces: ["application/json"] + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/ServiceUpdateResponse" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such service" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "ID or name of service." + required: true + type: "string" + - name: "body" + in: "body" + required: true + schema: + allOf: + - $ref: "#/definitions/ServiceSpec" + - type: "object" + example: + Name: "top" + TaskTemplate: + ContainerSpec: + Image: "busybox" + Args: + - "top" + OomScoreAdj: 0 + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: "any" + MaxAttempts: 0 + Placement: {} + ForceUpdate: 0 + Mode: + Replicated: + Replicas: 1 + UpdateConfig: + Parallelism: 2 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Mode: "vip" + + - name: "version" + in: "query" + description: | + The version number of the service object being updated. This is + required to avoid conflicting writes. + This version number should be the value as currently set on the + service *before* the update. You can find the current version by + calling `GET /services/{id}` + required: true + type: "integer" + - name: "registryAuthFrom" + in: "query" + description: | + If the `X-Registry-Auth` header is not specified, this parameter + indicates where to find registry authorization credentials. + type: "string" + enum: ["spec", "previous-spec"] + default: "spec" + - name: "rollback" + in: "query" + description: | + Set to this parameter to `previous` to cause a server-side rollback + to the previous service spec. The supplied spec will be ignored in + this case. + type: "string" + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + + tags: ["Service"] + /services/{id}/logs: + get: + summary: "Get service logs" + description: | + Get `stdout` and `stderr` logs from a service. See also + [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. + produces: + - "application/vnd.docker.raw-stream" + - "application/vnd.docker.multiplexed-stream" + operationId: "ServiceLogs" + responses: + 200: + description: "logs returned as a stream in response body" + schema: + type: "string" + format: "binary" + 404: + description: "no such service" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such service: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the service" + type: "string" + - name: "details" + in: "query" + description: "Show service context and extra details provided to logs." + type: "boolean" + default: false + - name: "follow" + in: "query" + description: "Keep connection after returning logs." + type: "boolean" + default: false + - name: "stdout" + in: "query" + description: "Return logs from `stdout`" + type: "boolean" + default: false + - name: "stderr" + in: "query" + description: "Return logs from `stderr`" + type: "boolean" + default: false + - name: "since" + in: "query" + description: "Only return logs since this time, as a UNIX timestamp" + type: "integer" + default: 0 + - name: "timestamps" + in: "query" + description: "Add timestamps to every log line" + type: "boolean" + default: false + - name: "tail" + in: "query" + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + type: "string" + default: "all" + tags: ["Service"] + /tasks: + get: + summary: "List tasks" + operationId: "TaskList" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/Task" + example: + - ID: "0kzzo1i0y4jz6027t0k7aezc7" + Version: + Index: 71 + CreatedAt: "2016-06-07T21:07:31.171892745Z" + UpdatedAt: "2016-06-07T21:07:31.376370513Z" + Spec: + ContainerSpec: + Image: "redis" + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: "any" + MaxAttempts: 0 + Placement: {} + ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" + Slot: 1 + NodeID: "60gvrl6tm78dmak4yl7srz94v" + Status: + Timestamp: "2016-06-07T21:07:31.290032978Z" + State: "running" + Message: "started" + ContainerStatus: + ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035" + PID: 677 + DesiredState: "running" + NetworksAttachments: + - Network: + ID: "4qvuz4ko70xaltuqbt8956gd1" + Version: + Index: 18 + CreatedAt: "2016-06-07T20:31:11.912919752Z" + UpdatedAt: "2016-06-07T21:07:29.955277358Z" + Spec: + Name: "ingress" + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + DriverState: + Name: "overlay" + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: "default" + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + Addresses: + - "10.255.0.10/16" + - ID: "1yljwbmlr8er2waf8orvqpwms" + Version: + Index: 30 + CreatedAt: "2016-06-07T21:07:30.019104782Z" + UpdatedAt: "2016-06-07T21:07:30.231958098Z" + Name: "hopeful_cori" + Spec: + ContainerSpec: + Image: "redis" + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: "any" + MaxAttempts: 0 + Placement: {} + ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" + Slot: 1 + NodeID: "60gvrl6tm78dmak4yl7srz94v" + Status: + Timestamp: "2016-06-07T21:07:30.202183143Z" + State: "shutdown" + Message: "shutdown" + ContainerStatus: + ContainerID: "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + DesiredState: "shutdown" + NetworksAttachments: + - Network: + ID: "4qvuz4ko70xaltuqbt8956gd1" + Version: + Index: 18 + CreatedAt: "2016-06-07T20:31:11.912919752Z" + UpdatedAt: "2016-06-07T21:07:29.955277358Z" + Spec: + Name: "ingress" + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + DriverState: + Name: "overlay" + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: "default" + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + Addresses: + - "10.255.0.5/16" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the tasks list. + + Available filters: + + - `desired-state=(running | shutdown | accepted)` + - `id=` + - `label=key` or `label="key=value"` + - `name=` + - `node=` + - `service=` + tags: ["Task"] + /tasks/{id}: + get: + summary: "Inspect a task" + operationId: "TaskInspect" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Task" + 404: + description: "no such task" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "ID of the task" + required: true + type: "string" + tags: ["Task"] + /tasks/{id}/logs: + get: + summary: "Get task logs" + description: | + Get `stdout` and `stderr` logs from a task. + See also [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. + operationId: "TaskLogs" + produces: + - "application/vnd.docker.raw-stream" + - "application/vnd.docker.multiplexed-stream" + responses: + 200: + description: "logs returned as a stream in response body" + schema: + type: "string" + format: "binary" + 404: + description: "no such task" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such task: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID of the task" + type: "string" + - name: "details" + in: "query" + description: "Show task context and extra details provided to logs." + type: "boolean" + default: false + - name: "follow" + in: "query" + description: "Keep connection after returning logs." + type: "boolean" + default: false + - name: "stdout" + in: "query" + description: "Return logs from `stdout`" + type: "boolean" + default: false + - name: "stderr" + in: "query" + description: "Return logs from `stderr`" + type: "boolean" + default: false + - name: "since" + in: "query" + description: "Only return logs since this time, as a UNIX timestamp" + type: "integer" + default: 0 + - name: "timestamps" + in: "query" + description: "Add timestamps to every log line" + type: "boolean" + default: false + - name: "tail" + in: "query" + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + type: "string" + default: "all" + tags: ["Task"] + /secrets: + get: + summary: "List secrets" + operationId: "SecretList" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/Secret" + example: + - ID: "blt1owaxmitz71s9v5zh81zun" + Version: + Index: 85 + CreatedAt: "2017-07-20T13:55:28.678958722Z" + UpdatedAt: "2017-07-20T13:55:28.678958722Z" + Spec: + Name: "mysql-passwd" + Labels: + some.label: "some.value" + Driver: + Name: "secret-bucket" + Options: + OptionA: "value for driver option A" + OptionB: "value for driver option B" + - ID: "ktnbjxoalbkvbvedmg1urrz8h" + Version: + Index: 11 + CreatedAt: "2016-11-05T01:20:17.327670065Z" + UpdatedAt: "2016-11-05T01:20:17.327670065Z" + Spec: + Name: "app-dev.crt" + Labels: + foo: "bar" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the secrets list. + + Available filters: + + - `id=` + - `label= or label==value` + - `name=` matches all or part of a secret name (prefix match) + - `names=` matches a secret name (exact match) + tags: ["Secret"] + /secrets/create: + post: + summary: "Create a secret" + operationId: "SecretCreate" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "no error" + schema: + $ref: "#/definitions/IDResponse" + 409: + description: "name conflicts with an existing object" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + schema: + allOf: + - $ref: "#/definitions/SecretSpec" + - type: "object" + example: + Name: "app-key.crt" + Labels: + foo: "bar" + Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + Driver: + Name: "secret-bucket" + Options: + OptionA: "value for driver option A" + OptionB: "value for driver option B" + tags: ["Secret"] + /secrets/{id}: + get: + summary: "Inspect a secret" + operationId: "SecretInspect" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Secret" + examples: + application/json: + ID: "ktnbjxoalbkvbvedmg1urrz8h" + Version: + Index: 11 + CreatedAt: "2016-11-05T01:20:17.327670065Z" + UpdatedAt: "2016-11-05T01:20:17.327670065Z" + Spec: + Name: "app-dev.crt" + Labels: + foo: "bar" + Driver: + Name: "secret-bucket" + Options: + OptionA: "value for driver option A" + OptionB: "value for driver option B" + + 404: + description: "secret not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + description: "ID of the secret" + tags: ["Secret"] + delete: + summary: "Delete a secret" + operationId: "SecretDelete" + produces: + - "application/json" + responses: + 204: + description: "no error" + 404: + description: "secret not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + description: "ID of the secret" + tags: ["Secret"] + /secrets/{id}/update: + post: + summary: "Update a Secret" + operationId: "SecretUpdate" + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such secret" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "The ID or name of the secret" + type: "string" + required: true + - name: "body" + in: "body" + schema: + $ref: "#/definitions/SecretSpec" + description: | + The spec of the secret to update. Currently, only the Labels field + can be updated. All other fields must remain unchanged from the + [SecretInspect endpoint](#operation/SecretInspect) response values. + - name: "version" + in: "query" + description: | + The version number of the secret object being updated. This is + required to avoid conflicting writes. + type: "integer" + format: "int64" + required: true + tags: ["Secret"] + /configs: + get: + summary: "List configs" + operationId: "ConfigList" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/Config" + example: + - ID: "ktnbjxoalbkvbvedmg1urrz8h" + Version: + Index: 11 + CreatedAt: "2016-11-05T01:20:17.327670065Z" + UpdatedAt: "2016-11-05T01:20:17.327670065Z" + Spec: + Name: "server.conf" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the configs list. + + Available filters: + + - `id=` + - `label= or label==value` + - `name=` matches all or part of a config name (prefix match) + tags: ["Config"] + /configs/create: + post: + summary: "Create a config" + operationId: "ConfigCreate" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "no error" + schema: + $ref: "#/definitions/IDResponse" + 409: + description: "name conflicts with an existing object" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + schema: + allOf: + - $ref: "#/definitions/ConfigSpec" + - type: "object" + example: + Name: "server.conf" + Labels: + foo: "bar" + Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + tags: ["Config"] + /configs/{id}: + get: + summary: "Inspect a config" + operationId: "ConfigInspect" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Config" + examples: + application/json: + ID: "ktnbjxoalbkvbvedmg1urrz8h" + Version: + Index: 11 + CreatedAt: "2016-11-05T01:20:17.327670065Z" + UpdatedAt: "2016-11-05T01:20:17.327670065Z" + Spec: + Name: "app-dev.crt" + 404: + description: "config not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + description: "ID of the config" + tags: ["Config"] + delete: + summary: "Delete a config" + operationId: "ConfigDelete" + produces: + - "application/json" + responses: + 204: + description: "no error" + 404: + description: "config not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + description: "ID of the config" + tags: ["Config"] + /configs/{id}/update: + post: + summary: "Update a Config" + operationId: "ConfigUpdate" + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such config" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "The ID or name of the config" + type: "string" + required: true + - name: "body" + in: "body" + schema: + $ref: "#/definitions/ConfigSpec" + description: | + The spec of the config to update. Currently, only the Labels field + can be updated. All other fields must remain unchanged from the + [ConfigInspect endpoint](#operation/ConfigInspect) response values. + - name: "version" + in: "query" + description: | + The version number of the config object being updated. This is + required to avoid conflicting writes. + type: "integer" + format: "int64" + required: true + tags: ["Config"] + /distribution/{name}/json: + get: + summary: "Get image information from the registry" + description: | + Return image digest and platform information by contacting the registry. + operationId: "DistributionInspect" + produces: + - "application/json" + responses: + 200: + description: "descriptor and platform information" + schema: + $ref: "#/definitions/DistributionInspect" + 401: + description: "Failed authentication or no image found" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such image: someimage (tag: latest)" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or id" + type: "string" + required: true + tags: ["Distribution"] + /session: + post: + summary: "Initialize interactive session" + description: | + Start a new interactive session with a server. Session allows server to + call back to the client for advanced capabilities. + + > **Deprecated**: This endpoint is deprecated and will be removed in a future version. + > Server should support gRPC directly on the listening socket. + + ### Hijacking + + This endpoint hijacks the HTTP connection to HTTP2 transport that allows + the client to expose gPRC services on that connection. + + For example, the client sends this request to upgrade the connection: + + ``` + POST /session HTTP/1.1 + Upgrade: h2c + Connection: Upgrade + ``` + + The Docker daemon responds with a `101 UPGRADED` response follow with + the raw stream: + + ``` + HTTP/1.1 101 UPGRADED + Connection: Upgrade + Upgrade: h2c + ``` + operationId: "Session" + produces: + - "application/vnd.docker.raw-stream" + responses: + 101: + description: "no error, hijacking successful" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Session"] diff --git a/prototypes/api-docs/original/engine-1.56.yaml b/prototypes/api-docs/original/engine-1.56.yaml new file mode 100644 index 000000000000..8ed37b2501cd --- /dev/null +++ b/prototypes/api-docs/original/engine-1.56.yaml @@ -0,0 +1,14062 @@ +# A Swagger 2.0 (a.k.a. OpenAPI) definition of the Engine API. +# +# This is used for generating API documentation and the types used by the +# client/server. See api/README.md for more information. +# +# Some style notes: +# - This file is used by ReDoc, which allows GitHub Flavored Markdown in +# descriptions. +# - There is no maximum line length, for ease of editing and pretty diffs. +# - operationIds are in the format "NounVerb", with a singular noun. + +swagger: "2.0" +schemes: + - "http" + - "https" +produces: + - "application/json" + - "text/plain" +consumes: + - "application/json" + - "text/plain" +basePath: "/v1.56" +info: + title: "Docker Engine API" + version: "1.56" + x-logo: + url: "https://docs.docker.com/assets/images/logo-docker-main.png" + description: | + The Engine API is an HTTP API served by Docker Engine. It is the API the + Docker client uses to communicate with the Engine, so everything the Docker + client can do can be done with the API. + + Most of the client's commands map directly to API endpoints (e.g. `docker ps` + is `GET /containers/json`). The notable exception is running containers, + which consists of several API calls. + + # Errors + + The API uses standard HTTP status codes to indicate the success or failure + of the API call. The body of the response will be JSON in the following + format: + + ``` + { + "message": "page not found" + } + ``` + + # Versioning + + The API is usually changed in each release, so API calls are versioned to + ensure that clients don't break. To lock to a specific version of the API, + you prefix the URL with its version, for example, call `/v1.30/info` to use + the v1.30 version of the `/info` endpoint. If the API version specified in + the URL is not supported by the daemon, a HTTP `400 Bad Request` error message + is returned. + + If you omit the version-prefix, the current version of the API is used. + For example, calling `/info` is the same as calling `/v1.56/info`. Using the + API without a version-prefix is deprecated and will be removed in a future release. + + Engine releases in the near future should support this version of the API, + so your client will continue to work even if it is talking to a newer Engine. + + The API uses an open schema model, which means the server may add extra properties + to responses. Likewise, the server will ignore any extra query parameters and + request body properties. When you write clients, you need to ignore additional + properties in responses to ensure they do not break when talking to newer + daemons. + + + # Authentication + + Authentication for registries is handled client side. The client has to send + authentication details to various endpoints that need to communicate with + registries, such as `POST /images/(name)/push`. These are sent as + `X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5) + (JSON) string with the following structure: + + ``` + { + "username": "string", + "password": "string", + "serveraddress": "string" + } + ``` + + The `serveraddress` is a domain/IP without a protocol. Throughout this + structure, double quotes are required. + + If you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth), + you can just pass this instead of credentials: + + ``` + { + "identitytoken": "9cbaf023786cd7..." + } + ``` + +# The tags on paths define the menu sections in the ReDoc documentation, so +# the usage of tags must make sense for that: +# - They should be singular, not plural. +# - There should not be too many tags, or the menu becomes unwieldy. For +# example, it is preferable to add a path to the "System" tag instead of +# creating a tag with a single path in it. +# - The order of tags in this list defines the order in the menu. +tags: + # Primary objects + - name: "Container" + x-displayName: "Containers" + description: | + Create and manage containers. + - name: "Image" + x-displayName: "Images" + - name: "Network" + x-displayName: "Networks" + description: | + Networks are user-defined networks that containers can be attached to. + See the [networking documentation](https://docs.docker.com/network/) + for more information. + - name: "Volume" + x-displayName: "Volumes" + description: | + Create and manage persistent storage that can be attached to containers. + - name: "Exec" + x-displayName: "Exec" + description: | + Run new commands inside running containers. Refer to the + [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) + for more information. + + To exec a command in a container, you first need to create an exec instance, + then start it. These two API endpoints are wrapped up in a single command-line + command, `docker exec`. + + # Swarm things + - name: "Swarm" + x-displayName: "Swarm" + description: | + Engines can be clustered together in a swarm. Refer to the + [swarm mode documentation](https://docs.docker.com/engine/swarm/) + for more information. + - name: "Node" + x-displayName: "Nodes" + description: | + Nodes are instances of the Engine participating in a swarm. Swarm mode + must be enabled for these endpoints to work. + - name: "Service" + x-displayName: "Services" + description: | + Services are the definitions of tasks to run on a swarm. Swarm mode must + be enabled for these endpoints to work. + - name: "Task" + x-displayName: "Tasks" + description: | + A task is a container running on a swarm. It is the atomic scheduling unit + of swarm. Swarm mode must be enabled for these endpoints to work. + - name: "Secret" + x-displayName: "Secrets" + description: | + Secrets are sensitive data that can be used by services. Swarm mode must + be enabled for these endpoints to work. + - name: "Config" + x-displayName: "Configs" + description: | + Configs are application configurations that can be used by services. Swarm + mode must be enabled for these endpoints to work. + # System things + - name: "Plugin" + x-displayName: "Plugins" + - name: "System" + x-displayName: "System" + +definitions: + ImageHistoryResponseItem: + type: "object" + x-go-name: HistoryResponseItem + title: "HistoryResponseItem" + description: "individual image layer information in response to ImageHistory operation" + required: [Id, Created, CreatedBy, Tags, Size, Comment] + properties: + Id: + type: "string" + x-nullable: false + Created: + type: "integer" + format: "int64" + x-nullable: false + CreatedBy: + type: "string" + x-nullable: false + Tags: + type: "array" + items: + type: "string" + Size: + type: "integer" + format: "int64" + x-nullable: false + Comment: + type: "string" + x-nullable: false + PortSummary: + type: "object" + description: | + Describes a port-mapping between the container and the host. + required: [PrivatePort, Type] + properties: + IP: + type: "string" + format: "ip-address" + description: "Host IP address that the container's port is mapped to" + x-go-type: + type: Addr + import: + package: net/netip + PrivatePort: + type: "integer" + format: "uint16" + x-nullable: false + description: "Port on the container" + PublicPort: + type: "integer" + format: "uint16" + description: "Port exposed on the host" + Type: + type: "string" + x-nullable: false + enum: ["tcp", "udp", "sctp"] + example: + PrivatePort: 8080 + PublicPort: 80 + Type: "tcp" + + MountType: + description: |- + The mount type. Available types: + + - `bind` a mount of a file or directory from the host into the container. + - `cluster` a Swarm cluster volume. + - `image` an OCI image. + - `npipe` a named pipe from the host into the container. + - `tmpfs` a `tmpfs`. + - `volume` a docker volume with the given `Name`. + type: "string" + enum: + - "bind" + - "cluster" + - "image" + - "npipe" + - "tmpfs" + - "volume" + example: "volume" + + MountPoint: + type: "object" + description: | + MountPoint represents a mount point configuration inside the container. + This is used for reporting the mountpoints in use by a container. + properties: + Type: + description: | + The mount type: + + - `bind` a mount of a file or directory from the host into the container. + - `cluster` a Swarm cluster volume. + - `image` an OCI image. + - `npipe` a named pipe from the host into the container. + - `tmpfs` a `tmpfs`. + - `volume` a docker volume with the given `Name`. + allOf: + - $ref: "#/definitions/MountType" + example: "volume" + Name: + description: | + Name is the name reference to the underlying data defined by `Source` + e.g., the volume name. + type: "string" + example: "myvolume" + Source: + description: | + Source location of the mount. + + For volumes, this contains the storage location of the volume (within + `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains + the source (host) part of the bind-mount. For `tmpfs` mount points, this + field is empty. + type: "string" + example: "/var/lib/docker/volumes/myvolume/_data" + Destination: + description: | + Destination is the path relative to the container root (`/`) where + the `Source` is mounted inside the container. + type: "string" + example: "/usr/share/nginx/html/" + Driver: + description: | + Driver is the volume driver used to create the volume (if it is a volume). + type: "string" + example: "local" + Mode: + description: | + Mode is a comma separated list of options supplied by the user when + creating the bind/volume mount. + + The default is platform-specific (`"z"` on Linux, empty on Windows). + type: "string" + example: "z" + RW: + description: | + Whether the mount is mounted writable (read-write). + type: "boolean" + example: true + Propagation: + description: | + Propagation describes how mounts are propagated from the host into the + mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) + for details. This field is not used on Windows. + type: "string" + example: "" + + DeviceMapping: + type: "object" + description: "A device mapping between the host and container" + properties: + PathOnHost: + type: "string" + PathInContainer: + type: "string" + CgroupPermissions: + type: "string" + example: + PathOnHost: "/dev/deviceName" + PathInContainer: "/dev/deviceName" + CgroupPermissions: "mrw" + + DeviceRequest: + type: "object" + description: "A request for devices to be sent to device drivers" + properties: + Driver: + description: | + The name of the device driver to use for this request. + + Note that if this is specified the capabilities are ignored when + selecting a device driver. + type: "string" + example: "nvidia" + Count: + type: "integer" + example: -1 + DeviceIDs: + type: "array" + items: + type: "string" + example: + - "0" + - "1" + - "GPU-fef8089b-4820-abfc-e83e-94318197576e" + Capabilities: + description: | + A list of capabilities; an OR list of AND lists of capabilities. + + Note that if a driver is specified the capabilities have no effect on + selecting a driver as the driver name is used directly. + + Note that if no driver is specified the capabilities are used to + select a driver with the required capabilities. + type: "array" + items: + type: "array" + items: + type: "string" + example: + # gpu AND nvidia AND compute + - ["gpu", "nvidia", "compute"] + Options: + description: | + Driver-specific options, specified as a key/value pairs. These options + are passed directly to the driver. + type: "object" + additionalProperties: + type: "string" + + ThrottleDevice: + type: "object" + properties: + Path: + description: "Device path" + type: "string" + Rate: + description: "Rate" + type: "integer" + format: "int64" + minimum: 0 + + Mount: + type: "object" + properties: + Target: + description: "Container path." + type: "string" + Source: + description: |- + Mount source (e.g. a volume name, a host path). The source cannot be + specified when using `Type=tmpfs`. For `Type=bind`, the source path + must either exist, or the `CreateMountpoint` must be set to `true` to + create the source path on the host if missing. + + For `Type=npipe`, the pipe must exist prior to creating the container. + type: "string" + Type: + description: | + The mount type. Available types: + + - `bind` Mounts a file or directory from the host into the container. The `Source` must exist prior to creating the container. + - `cluster` a Swarm cluster volume + - `image` Mounts an image. + - `npipe` Mounts a named pipe from the host into the container. The `Source` must exist prior to creating the container. + - `tmpfs` Create a tmpfs with the given options. The mount `Source` cannot be specified for tmpfs. + - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. + allOf: + - $ref: "#/definitions/MountType" + ReadOnly: + description: "Whether the mount should be read-only." + type: "boolean" + Consistency: + description: "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." + type: "string" + BindOptions: + description: "Optional configuration for the `bind` type." + type: "object" + properties: + Propagation: + description: "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`." + type: "string" + enum: + - "private" + - "rprivate" + - "shared" + - "rshared" + - "slave" + - "rslave" + NonRecursive: + description: "Disable recursive bind mount." + type: "boolean" + default: false + CreateMountpoint: + description: "Create mount point on host if missing" + type: "boolean" + default: false + ReadOnlyNonRecursive: + description: | + Make the mount non-recursively read-only, but still leave the mount recursive + (unless NonRecursive is set to `true` in conjunction). + + Added in v1.44, before that version all read-only mounts were + non-recursive by default. To match the previous behaviour this + will default to `true` for clients on versions prior to v1.44. + type: "boolean" + default: false + ReadOnlyForceRecursive: + description: "Raise an error if the mount cannot be made recursively read-only." + type: "boolean" + default: false + VolumeOptions: + description: "Optional configuration for the `volume` type." + type: "object" + properties: + NoCopy: + description: "Populate volume with data from the target." + type: "boolean" + default: false + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + DriverConfig: + description: "Map of driver specific options" + type: "object" + properties: + Name: + description: "Name of the driver to use to create the volume." + type: "string" + Options: + description: "key/value map of driver specific options." + type: "object" + additionalProperties: + type: "string" + Subpath: + description: "Source path inside the volume. Must be relative without any back traversals." + type: "string" + example: "dir-inside-volume/subdirectory" + ImageOptions: + description: "Optional configuration for the `image` type." + type: "object" + properties: + Subpath: + description: "Source path inside the image. Must be relative without any back traversals." + type: "string" + example: "dir-inside-image/subdirectory" + TmpfsOptions: + description: "Optional configuration for the `tmpfs` type." + type: "object" + properties: + SizeBytes: + description: "The size for the tmpfs mount in bytes." + type: "integer" + format: "int64" + Mode: + description: | + The permission mode for the tmpfs mount in an integer. + The value must not be in octal format (e.g. 755) but rather + the decimal representation of the octal value (e.g. 493). + type: "integer" + Options: + description: | + The options to be passed to the tmpfs mount. An array of arrays. + Flag options should be provided as 1-length arrays. Other types + should be provided as as 2-length arrays, where the first item is + the key and the second the value. + type: "array" + items: + type: "array" + minItems: 1 + maxItems: 2 + items: + type: "string" + example: + [["noexec"]] + + RestartPolicy: + description: | + The behavior to apply when the container exits. The default is not to + restart. + + An ever increasing delay (double the previous delay, starting at 100ms) is + added before each restart to prevent flooding the server. + type: "object" + properties: + Name: + type: "string" + description: | + - Empty string means not to restart + - `no` Do not automatically restart + - `always` Always restart + - `unless-stopped` Restart always except when the user has manually stopped the container + - `on-failure` Restart only when the container exit code is non-zero + enum: + - "" + - "no" + - "always" + - "unless-stopped" + - "on-failure" + MaximumRetryCount: + type: "integer" + description: | + If `on-failure` is used, the number of times to retry before giving up. + + Resources: + description: "A container's resources (cgroups config, ulimits, etc)" + type: "object" + properties: + # Applicable to all platforms + CpuShares: + description: | + An integer value representing this container's relative CPU weight + versus other containers. + type: "integer" + Memory: + description: "Memory limit in bytes." + type: "integer" + format: "int64" + default: 0 + # Applicable to UNIX platforms + CgroupParent: + description: | + Path to `cgroups` under which the container's `cgroup` is created. If + the path is not absolute, the path is considered to be relative to the + `cgroups` path of the init process. Cgroups are created if they do not + already exist. + type: "string" + BlkioWeight: + description: "Block IO weight (relative weight)." + type: "integer" + minimum: 0 + maximum: 1000 + BlkioWeightDevice: + description: | + Block IO weight (relative device weight) in the form: + + ``` + [{"Path": "device_path", "Weight": weight}] + ``` + type: "array" + items: + type: "object" + properties: + Path: + type: "string" + Weight: + type: "integer" + minimum: 0 + BlkioDeviceReadBps: + description: | + Limit read rate (bytes per second) from a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: "array" + items: + $ref: "#/definitions/ThrottleDevice" + BlkioDeviceWriteBps: + description: | + Limit write rate (bytes per second) to a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: "array" + items: + $ref: "#/definitions/ThrottleDevice" + BlkioDeviceReadIOps: + description: | + Limit read rate (IO per second) from a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: "array" + items: + $ref: "#/definitions/ThrottleDevice" + BlkioDeviceWriteIOps: + description: | + Limit write rate (IO per second) to a device, in the form: + + ``` + [{"Path": "device_path", "Rate": rate}] + ``` + type: "array" + items: + $ref: "#/definitions/ThrottleDevice" + CpuPeriod: + description: "The length of a CPU period in microseconds." + type: "integer" + format: "int64" + CpuQuota: + description: | + Microseconds of CPU time that the container can get in a CPU period. + type: "integer" + format: "int64" + CpuRealtimePeriod: + description: | + The length of a CPU real-time period in microseconds. Set to 0 to + allocate no time allocated to real-time tasks. + type: "integer" + format: "int64" + CpuRealtimeRuntime: + description: | + The length of a CPU real-time runtime in microseconds. Set to 0 to + allocate no time allocated to real-time tasks. + type: "integer" + format: "int64" + CpusetCpus: + description: | + CPUs in which to allow execution (e.g., `0-3`, `0,1`). + type: "string" + example: "0-3" + CpusetMems: + description: | + Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only + effective on NUMA systems. + type: "string" + Devices: + description: "A list of devices to add to the container." + type: "array" + items: + $ref: "#/definitions/DeviceMapping" + DeviceCgroupRules: + description: "a list of cgroup rules to apply to the container" + type: "array" + items: + type: "string" + example: "c 13:* rwm" + DeviceRequests: + description: | + A list of requests for devices to be sent to device drivers. + type: "array" + items: + $ref: "#/definitions/DeviceRequest" + MemoryReservation: + description: "Memory soft limit in bytes." + type: "integer" + format: "int64" + MemorySwap: + description: | + Total memory limit (memory + swap). Set as `-1` to enable unlimited + swap. + type: "integer" + format: "int64" + MemorySwappiness: + description: | + Tune a container's memory swappiness behavior. Accepts an integer + between 0 and 100. + type: "integer" + format: "int64" + minimum: 0 + maximum: 100 + NanoCpus: + description: "CPU quota in units of 10-9 CPUs." + type: "integer" + format: "int64" + OomKillDisable: + description: "Disable OOM Killer for the container." + type: "boolean" + Init: + description: | + Run an init inside the container that forwards signals and reaps + processes. This field is omitted if empty, and the default (as + configured on the daemon) is used. + type: "boolean" + x-nullable: true + PidsLimit: + description: | + Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` + to not change. + type: "integer" + format: "int64" + x-nullable: true + Ulimits: + description: | + A list of resource limits to set in the container. For example: + + ``` + {"Name": "nofile", "Soft": 1024, "Hard": 2048} + ``` + type: "array" + items: + type: "object" + properties: + Name: + description: "Name of ulimit" + type: "string" + Soft: + description: "Soft limit" + type: "integer" + Hard: + description: "Hard limit" + type: "integer" + # Applicable to Windows + CpuCount: + description: | + The number of usable CPUs (Windows only). + + On Windows Server containers, the processor resource controls are + mutually exclusive. The order of precedence is `CPUCount` first, then + `CPUShares`, and `CPUPercent` last. + type: "integer" + format: "int64" + CpuPercent: + description: | + The usable percentage of the available CPUs (Windows only). + + On Windows Server containers, the processor resource controls are + mutually exclusive. The order of precedence is `CPUCount` first, then + `CPUShares`, and `CPUPercent` last. + type: "integer" + format: "int64" + IOMaximumIOps: + description: "Maximum IOps for the container system drive (Windows only)" + type: "integer" + format: "int64" + IOMaximumBandwidth: + description: | + Maximum IO in bytes per second for the container system drive + (Windows only). + type: "integer" + format: "int64" + + Limit: + description: | + An object describing a limit on resources which can be requested by a task. + type: "object" + properties: + NanoCPUs: + type: "integer" + format: "int64" + example: 4000000000 + MemoryBytes: + type: "integer" + format: "int64" + example: 8272408576 + Pids: + description: | + Limits the maximum number of PIDs in the container. Set `0` for unlimited. + type: "integer" + format: "int64" + default: 0 + example: 100 + + ResourceObject: + description: | + An object describing the resources which can be advertised by a node and + requested by a task. + type: "object" + properties: + NanoCPUs: + type: "integer" + format: "int64" + example: 4000000000 + MemoryBytes: + type: "integer" + format: "int64" + example: 8272408576 + GenericResources: + $ref: "#/definitions/GenericResources" + + GenericResources: + description: | + User-defined resources can be either Integer resources (e.g, `SSD=3`) or + String resources (e.g, `GPU=UUID1`). + type: "array" + items: + type: "object" + properties: + NamedResourceSpec: + type: "object" + properties: + Kind: + type: "string" + Value: + type: "string" + DiscreteResourceSpec: + type: "object" + properties: + Kind: + type: "string" + Value: + type: "integer" + format: "int64" + example: + - DiscreteResourceSpec: + Kind: "SSD" + Value: 3 + - NamedResourceSpec: + Kind: "GPU" + Value: "UUID1" + - NamedResourceSpec: + Kind: "GPU" + Value: "UUID2" + + HealthConfig: + description: | + A test to perform to check that the container is healthy. + Healthcheck commands should be side-effect free. + type: "object" + properties: + Test: + description: | + The test to perform. Possible values are: + + - `[]` inherit healthcheck from image or parent image + - `["NONE"]` disable healthcheck + - `["CMD", args...]` exec arguments directly + - `["CMD-SHELL", command]` run command with system's default shell + + A non-zero exit code indicates a failed healthcheck: + - `0` healthy + - `1` unhealthy + - `2` reserved (treated as unhealthy) + - other values: error running probe + type: "array" + items: + type: "string" + Interval: + description: | + The time to wait between checks in nanoseconds. It should be 0 or at + least 1000000 (1 ms). 0 means inherit. + type: "integer" + format: "int64" + Timeout: + description: | + The time to wait before considering the check to have hung. It should + be 0 or at least 1000000 (1 ms). 0 means inherit. + + If the health check command does not complete within this timeout, + the check is considered failed and the health check process is + forcibly terminated without a graceful shutdown. + type: "integer" + format: "int64" + Retries: + description: | + The number of consecutive failures needed to consider a container as + unhealthy. 0 means inherit. + type: "integer" + StartPeriod: + description: | + Start period for the container to initialize before starting + health-retries countdown in nanoseconds. It should be 0 or at least + 1000000 (1 ms). 0 means inherit. + type: "integer" + format: "int64" + StartInterval: + description: | + The time to wait between checks in nanoseconds during the start period. + It should be 0 or at least 1000000 (1 ms). 0 means inherit. + type: "integer" + format: "int64" + + Health: + description: | + Health stores information about the container's healthcheck results. + type: "object" + x-nullable: true + properties: + Status: + description: | + Status is one of `none`, `starting`, `healthy` or `unhealthy` + + - "none" Indicates there is no healthcheck + - "starting" Starting indicates that the container is not yet ready + - "healthy" Healthy indicates that the container is running correctly + - "unhealthy" Unhealthy indicates that the container has a problem + type: "string" + enum: + - "none" + - "starting" + - "healthy" + - "unhealthy" + example: "healthy" + FailingStreak: + description: "FailingStreak is the number of consecutive failures" + type: "integer" + example: 0 + Log: + type: "array" + description: | + Log contains the last few results (oldest first) + items: + $ref: "#/definitions/HealthcheckResult" + + HealthcheckResult: + description: | + HealthcheckResult stores information about a single run of a healthcheck probe + type: "object" + x-nullable: true + properties: + Start: + description: | + Date and time at which this check started in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "date-time" + example: "2020-01-04T10:44:24.496525531Z" + End: + description: | + Date and time at which this check ended in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2020-01-04T10:45:21.364524523Z" + ExitCode: + description: | + ExitCode meanings: + + - `0` healthy + - `1` unhealthy + - `2` reserved (considered unhealthy) + - other values: error running probe + type: "integer" + example: 0 + Output: + description: "Output from last check" + type: "string" + + HostConfig: + description: "Container configuration that depends on the host we are running on" + allOf: + - $ref: "#/definitions/Resources" + - type: "object" + properties: + # Applicable to all platforms + Binds: + type: "array" + description: | + A list of volume bindings for this container. Each volume binding + is a string in one of these forms: + + - `host-src:container-dest[:options]` to bind-mount a host path + into the container. Both `host-src`, and `container-dest` must + be an _absolute_ path. + - `volume-name:container-dest[:options]` to bind-mount a volume + managed by a volume driver into the container. `container-dest` + must be an _absolute_ path. + + `options` is an optional, comma-delimited list of: + + - `nocopy` disables automatic copying of data from the container + path to the volume. The `nocopy` flag only applies to named volumes. + - `[ro|rw]` mounts a volume read-only or read-write, respectively. + If omitted or set to `rw`, volumes are mounted read-write. + - `[z|Z]` applies SELinux labels to allow or deny multiple containers + to read and write to the same volume. + - `z`: a _shared_ content label is applied to the content. This + label indicates that multiple containers can share the volume + content, for both reading and writing. + - `Z`: a _private unshared_ label is applied to the content. + This label indicates that only the current container can use + a private volume. Labeling systems such as SELinux require + proper labels to be placed on volume content that is mounted + into a container. Without a label, the security system can + prevent a container's processes from using the content. By + default, the labels set by the host operating system are not + modified. + - `[[r]shared|[r]slave|[r]private]` specifies mount + [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). + This only applies to bind-mounted volumes, not internal volumes + or named volumes. Mount propagation requires the source mount + point (the location where the source directory is mounted in the + host operating system) to have the correct propagation properties. + For shared volumes, the source mount point must be set to `shared`. + For slave volumes, the mount must be set to either `shared` or + `slave`. + items: + type: "string" + ContainerIDFile: + type: "string" + description: "Path to a file where the container ID is written" + example: "" + LogConfig: + type: "object" + description: "The logging configuration for this container" + properties: + Type: + description: |- + Name of the logging driver used for the container or "none" + if logging is disabled. + type: "string" + enum: + - "local" + - "json-file" + - "syslog" + - "journald" + - "gelf" + - "fluentd" + - "awslogs" + - "splunk" + - "etwlogs" + - "none" + Config: + description: |- + Driver-specific configuration options for the logging driver. + type: "object" + additionalProperties: + type: "string" + example: + "max-file": "5" + "max-size": "10m" + NetworkMode: + type: "string" + description: | + Network mode to use for this container. Supported standard values + are: `bridge`, `host`, `none`, and `container:`. Any + other value is taken as a custom network's name to which this + container should connect to. + PortBindings: + $ref: "#/definitions/PortMap" + RestartPolicy: + $ref: "#/definitions/RestartPolicy" + AutoRemove: + type: "boolean" + description: | + Automatically remove the container when the container's process + exits. This has no effect if `RestartPolicy` is set. + VolumeDriver: + type: "string" + description: "Driver that this container uses to mount volumes." + VolumesFrom: + type: "array" + description: | + A list of volumes to inherit from another container, specified in + the form `[:]`. + items: + type: "string" + Mounts: + description: | + Specification for mounts to be added to the container. + type: "array" + items: + $ref: "#/definitions/Mount" + ConsoleSize: + type: "array" + description: | + Initial console size, as an `[height, width]` array. + x-nullable: true + minItems: 2 + maxItems: 2 + items: + type: "integer" + minimum: 0 + example: [80, 64] + Annotations: + type: "object" + description: | + Arbitrary non-identifying metadata attached to container and + provided to the runtime when the container is started. + additionalProperties: + type: "string" + + # Applicable to UNIX platforms + CapAdd: + type: "array" + description: | + A list of kernel capabilities to add to the container. Conflicts + with option 'Capabilities'. + items: + type: "string" + CapDrop: + type: "array" + description: | + A list of kernel capabilities to drop from the container. Conflicts + with option 'Capabilities'. + items: + type: "string" + CgroupnsMode: + type: "string" + enum: + - "private" + - "host" + description: | + cgroup namespace mode for the container. Possible values are: + + - `"private"`: the container runs in its own private cgroup namespace + - `"host"`: use the host system's cgroup namespace + + If not specified, the daemon default is used, which can either be `"private"` + or `"host"`, depending on daemon version, kernel support and configuration. + Dns: + type: "array" + description: "A list of DNS servers for the container to use." + items: + type: "string" + format: "ip-address" + x-go-type: + type: Addr + import: + package: net/netip + DnsOptions: + type: "array" + description: "A list of DNS options." + items: + type: "string" + DnsSearch: + type: "array" + description: "A list of DNS search domains." + items: + type: "string" + ExtraHosts: + type: "array" + description: | + A list of hostnames/IP mappings to add to the container's `/etc/hosts` + file. Specified in the form `["hostname:IP"]`. + items: + type: "string" + GroupAdd: + type: "array" + description: | + A list of additional groups that the container process will run as. + items: + type: "string" + IpcMode: + type: "string" + description: | + IPC sharing mode for the container. Possible values are: + + - `"none"`: own private IPC namespace, with /dev/shm not mounted + - `"private"`: own private IPC namespace + - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers + - `"container:"`: join another (shareable) container's IPC namespace + - `"host"`: use the host system's IPC namespace + + If not specified, daemon default is used, which can either be `"private"` + or `"shareable"`, depending on daemon version and configuration. + Cgroup: + type: "string" + description: "Cgroup to use for the container." + Links: + type: "array" + description: | + A list of links for the container in the form `container_name:alias`. + items: + type: "string" + OomScoreAdj: + type: "integer" + description: | + An integer value containing the score given to the container in + order to tune OOM killer preferences. + example: 500 + PidMode: + type: "string" + description: | + Set the PID (Process) Namespace mode for the container. It can be + either: + + - `"container:"`: joins another container's PID namespace + - `"host"`: use the host's PID namespace inside the container + Privileged: + type: "boolean" + description: |- + Gives the container full access to the host. + PublishAllPorts: + type: "boolean" + description: | + Allocates an ephemeral host port for all of a container's + exposed ports. + + Ports are de-allocated when the container stops and allocated when + the container starts. The allocated port might be changed when + restarting the container. + + The port is selected from the ephemeral port range that depends on + the kernel. For example, on Linux the range is defined by + `/proc/sys/net/ipv4/ip_local_port_range`. + ReadonlyRootfs: + type: "boolean" + description: "Mount the container's root filesystem as read only." + SecurityOpt: + type: "array" + description: | + A list of string values to customize labels for MLS systems, such + as SELinux. + items: + type: "string" + StorageOpt: + type: "object" + description: | + Storage driver options for this container, in the form `{"size": "120G"}`. + additionalProperties: + type: "string" + Tmpfs: + type: "object" + description: | + A map of container directories which should be replaced by tmpfs + mounts, and their corresponding mount options. For example: + + ``` + { "/run": "rw,noexec,nosuid,size=65536k" } + ``` + additionalProperties: + type: "string" + UTSMode: + type: "string" + description: "UTS namespace to use for the container." + UsernsMode: + type: "string" + description: | + Sets the usernamespace mode for the container when usernamespace + remapping option is enabled. + ShmSize: + type: "integer" + format: "int64" + description: | + Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. + minimum: 0 + Sysctls: + type: "object" + x-nullable: true + description: |- + A list of kernel parameters (sysctls) to set in the container. + + This field is omitted if not set. + additionalProperties: + type: "string" + example: + "net.ipv4.ip_forward": "1" + Runtime: + type: "string" + x-nullable: true + description: |- + Runtime to use with this container. + Umask: + type: "integer" + format: "uint32" + x-nullable: true + description: |- + Set the initial umask for a Unix container. + + If omitted, the daemon does not set a umask in the OCI process + specification, and the runtime's default behavior applies. + + JSON integers are decimal. For example, use `18` for the octal + umask `0022`, and `511` for the octal umask `0777`. + # Applicable to Windows + Isolation: + type: "string" + description: | + Isolation technology of the container. (Windows only) + enum: + - "default" + - "process" + - "hyperv" + - "" + MaskedPaths: + type: "array" + description: | + The list of paths to be masked inside the container (this overrides + the default set of paths). + items: + type: "string" + example: + - "/proc/asound" + - "/proc/acpi" + - "/proc/kcore" + - "/proc/keys" + - "/proc/latency_stats" + - "/proc/timer_list" + - "/proc/timer_stats" + - "/proc/sched_debug" + - "/proc/scsi" + - "/sys/firmware" + - "/sys/devices/virtual/powercap" + ReadonlyPaths: + type: "array" + description: | + The list of paths to be set as read-only inside the container + (this overrides the default set of paths). + items: + type: "string" + example: + - "/proc/bus" + - "/proc/fs" + - "/proc/irq" + - "/proc/sys" + - "/proc/sysrq-trigger" + + ContainerConfig: + description: | + Configuration for a container that is portable between hosts. + type: "object" + properties: + Hostname: + description: | + The hostname to use for the container, as a valid RFC 1123 hostname. + type: "string" + example: "439f4e91bd1d" + Domainname: + description: | + The domain name to use for the container. + type: "string" + User: + description: |- + Commands run as this user inside the container. If omitted, commands + run as the user specified in the image the container was started from. + + Can be either user-name or UID, and optional group-name or GID, + separated by a colon (`[<:group-name|GID>]`). + type: "string" + example: "123:456" + AttachStdin: + description: "Whether to attach to `stdin`." + type: "boolean" + default: false + AttachStdout: + description: "Whether to attach to `stdout`." + type: "boolean" + default: true + AttachStderr: + description: "Whether to attach to `stderr`." + type: "boolean" + default: true + ExposedPorts: + description: | + An object mapping ports to an empty object in the form: + + `{"/": {}}` + type: "object" + x-nullable: true + additionalProperties: + type: "object" + enum: + - {} + default: {} + example: { + "80/tcp": {}, + "443/tcp": {} + } + Tty: + description: | + Attach standard streams to a TTY, including `stdin` if it is not closed. + type: "boolean" + default: false + OpenStdin: + description: "Open `stdin`" + type: "boolean" + default: false + StdinOnce: + description: "Close `stdin` after one attached client disconnects" + type: "boolean" + default: false + Env: + description: | + A list of environment variables to set inside the container in the + form `["VAR=value", ...]`. A variable without `=` is removed from the + environment, rather than to have an empty value. + type: "array" + items: + type: "string" + example: + - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + Cmd: + description: | + Command to run specified as a string or an array of strings. + type: "array" + items: + type: "string" + example: ["/bin/sh"] + Healthcheck: + $ref: "#/definitions/HealthConfig" + ArgsEscaped: + description: "Command is already escaped (Windows only)" + type: "boolean" + default: false + example: false + x-nullable: true + Image: + description: | + The name (or reference) of the image to use when creating the container, + or which was used when the container was created. + type: "string" + example: "example-image:1.0" + Volumes: + description: | + An object mapping mount point paths inside the container to empty + objects. + type: "object" + additionalProperties: + type: "object" + enum: + - {} + default: {} + WorkingDir: + description: "The working directory for commands to run in." + type: "string" + example: "/public/" + Entrypoint: + description: | + The entry point for the container as a string or an array of strings. + + If the array consists of exactly one empty string (`[""]`) then the + entry point is reset to system default (i.e., the entry point used by + docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + type: "array" + items: + type: "string" + example: [] + NetworkDisabled: + description: "Disable networking for the container." + type: "boolean" + x-nullable: true + OnBuild: + description: | + `ONBUILD` metadata that were defined in the image's `Dockerfile`. + type: "array" + x-nullable: true + items: + type: "string" + example: [] + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + StopSignal: + description: | + Signal to stop a container as a string or unsigned integer. + type: "string" + example: "SIGTERM" + x-nullable: true + StopTimeout: + description: | + Timeout to stop a container in seconds. If omitted, the daemon-wide + default (`default-stop-timeout`) is used. + type: "integer" + x-nullable: true + Shell: + description: | + Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + type: "array" + x-nullable: true + items: + type: "string" + example: ["/bin/sh", "-c"] + + ImageConfig: + description: | + Configuration of the image. These fields are used as defaults + when starting a container from the image. + type: "object" + properties: + User: + description: "The user that commands are run as inside the container." + type: "string" + example: "web:web" + ExposedPorts: + description: | + An object mapping ports to an empty object in the form: + + `{"/": {}}` + type: "object" + x-nullable: true + additionalProperties: + type: "object" + enum: + - {} + default: {} + example: { + "80/tcp": {}, + "443/tcp": {} + } + Env: + description: | + A list of environment variables to set inside the container in the + form `["VAR=value", ...]`. A variable without `=` is removed from the + environment, rather than to have an empty value. + type: "array" + items: + type: "string" + example: + - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + Cmd: + description: | + Command to run specified as a string or an array of strings. + type: "array" + items: + type: "string" + example: ["/bin/sh"] + Healthcheck: + $ref: "#/definitions/HealthConfig" + ArgsEscaped: + description: "Command is already escaped (Windows only)" + type: "boolean" + default: false + example: false + x-nullable: true + Volumes: + description: | + An object mapping mount point paths inside the container to empty + objects. + type: "object" + additionalProperties: + type: "object" + enum: + - {} + default: {} + example: + "/app/data": {} + "/app/config": {} + WorkingDir: + description: "The working directory for commands to run in." + type: "string" + example: "/public/" + Entrypoint: + description: | + The entry point for the container as a string or an array of strings. + + If the array consists of exactly one empty string (`[""]`) then the + entry point is reset to system default (i.e., the entry point used by + docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). + type: "array" + items: + type: "string" + example: [] + OnBuild: + description: | + `ONBUILD` metadata that were defined in the image's `Dockerfile`. + type: "array" + x-nullable: true + items: + type: "string" + example: [] + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + StopSignal: + description: | + Signal to stop a container as a string or unsigned integer. + type: "string" + example: "SIGTERM" + x-nullable: true + Shell: + description: | + Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. + type: "array" + x-nullable: true + items: + type: "string" + example: ["/bin/sh", "-c"] + + NetworkingConfig: + description: | + NetworkingConfig represents the container's networking configuration for + each of its interfaces. + It is used for the networking configs specified in the `docker create` + and `docker network connect` commands. + type: "object" + properties: + EndpointsConfig: + description: | + A mapping of network name to endpoint configuration for that network. + The endpoint configuration can be left empty to connect to that + network with no particular endpoint configuration. + type: "object" + additionalProperties: + $ref: "#/definitions/EndpointSettings" + example: + # putting an example here, instead of using the example values from + # /definitions/EndpointSettings, because EndpointSettings contains + # operational data returned when inspecting a container that we don't + # accept here. + EndpointsConfig: + isolated_nw: + IPAMConfig: + IPv4Address: "172.20.30.33" + IPv6Address: "2001:db8:abcd::3033" + LinkLocalIPs: + - "169.254.34.68" + - "fe80::3468" + MacAddress: "02:42:ac:12:05:02" + Links: + - "container_1" + - "container_2" + Aliases: + - "server_x" + - "server_y" + database_nw: {} + + NetworkSettings: + description: "NetworkSettings exposes the network settings in the API" + type: "object" + properties: + SandboxID: + description: SandboxID uniquely represents a container's network stack. + type: "string" + example: "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + SandboxKey: + description: SandboxKey is the full path of the netns handle + type: "string" + example: "/var/run/docker/netns/8ab54b426c38" + Ports: + $ref: "#/definitions/PortMap" + Networks: + description: | + Information about all networks that the container is connected to. + type: "object" + additionalProperties: + $ref: "#/definitions/EndpointSettings" + + Address: + description: Address represents an IPv4 or IPv6 IP address. + type: "object" + properties: + Addr: + description: IP address. + type: "string" + PrefixLen: + description: Mask length of the IP address. + type: "integer" + + PortMap: + description: | + PortMap describes the mapping of container ports to host ports, using the + container's port-number and protocol as key in the format `/`, + for example, `80/udp`. + + If a container's port is mapped for multiple protocols, separate entries + are added to the mapping table. + type: "object" + additionalProperties: + type: "array" + x-nullable: true + items: + $ref: "#/definitions/PortBinding" + example: + "443/tcp": + - HostIp: "127.0.0.1" + HostPort: "4443" + "80/tcp": + - HostIp: "0.0.0.0" + HostPort: "80" + - HostIp: "0.0.0.0" + HostPort: "8080" + "80/udp": + - HostIp: "0.0.0.0" + HostPort: "80" + "53/udp": + - HostIp: "0.0.0.0" + HostPort: "53" + "2377/tcp": null + + PortBinding: + description: | + PortBinding represents a binding between a host IP address and a host + port. + type: "object" + properties: + HostIp: + description: "Host IP address that the container's port is mapped to." + type: "string" + example: "127.0.0.1" + x-go-type: + type: Addr + import: + package: net/netip + HostPort: + description: "Host port number that the container's port is mapped to." + type: "string" + example: "4443" + + DriverData: + description: | + Information about the storage driver used to store the container's and + image's filesystem. + type: "object" + required: [Name, Data] + properties: + Name: + description: "Name of the storage driver." + type: "string" + x-nullable: false + example: "overlay2" + Data: + description: | + Low-level storage metadata, provided as key/value pairs. + + This information is driver-specific, and depends on the storage-driver + in use, and should be used for informational purposes only. + type: "object" + x-nullable: false + additionalProperties: + type: "string" + example: { + "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", + "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", + "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" + } + + Storage: + description: | + Information about the storage used by the container. + type: "object" + properties: + RootFS: + description: | + Information about the storage used for the container's root filesystem. + type: "object" + x-nullable: true + $ref: "#/definitions/RootFSStorage" + + RootFSStorage: + description: | + Information about the storage used for the container's root filesystem. + type: "object" + x-go-name: RootFSStorage + properties: + Snapshot: + description: | + Information about the snapshot used for the container's root filesystem. + type: "object" + x-nullable: true + $ref: "#/definitions/RootFSStorageSnapshot" + + RootFSStorageSnapshot: + description: | + Information about a snapshot backend of the container's root filesystem. + type: "object" + x-go-name: RootFSStorageSnapshot + properties: + Name: + description: "Name of the snapshotter." + type: "string" + x-nullable: false + + FilesystemChange: + description: | + Change in the container's filesystem. + type: "object" + required: [Path, Kind] + properties: + Path: + description: | + Path to file or directory that has changed. + type: "string" + x-nullable: false + Kind: + $ref: "#/definitions/ChangeType" + + ChangeType: + description: | + Kind of change + + Can be one of: + + - `0`: Modified ("C") + - `1`: Added ("A") + - `2`: Deleted ("D") + type: "integer" + format: "uint8" + enum: [0, 1, 2] + x-nullable: false + + ImageInspect: + description: | + Information about an image in the local image cache. + type: "object" + properties: + Id: + description: | + ID is the content-addressable ID of an image. + + This identifier is a content-addressable digest calculated from the + image's configuration (which includes the digests of layers used by + the image). + + Note that this digest differs from the `RepoDigests` below, which + holds digests of image manifests that reference the image. + type: "string" + x-nullable: false + example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + Descriptor: + description: | + Descriptor is an OCI descriptor of the image target. + In case of a multi-platform image, this descriptor points to the OCI index + or a manifest list. + + This field is only present if the daemon provides a multi-platform image store. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + x-nullable: true + $ref: "#/definitions/OCIDescriptor" + Manifests: + description: | + Manifests is a list of image manifests available in this image. It + provides a more detailed view of the platform-specific image manifests or + other image-attached data like build attestations. + + Only available if the daemon provides a multi-platform image store + and the `manifests` option is set in the inspect request. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + type: "array" + x-nullable: true + items: + $ref: "#/definitions/ImageManifestSummary" + Identity: + description: |- + Identity holds information about the identity and origin of the image. + This is trusted information verified by the daemon and cannot be modified + by tagging an image to a different name. + x-nullable: true + $ref: "#/definitions/Identity" + RepoTags: + description: | + List of image names/tags in the local image cache that reference this + image. + + Multiple image tags can refer to the same image, and this list may be + empty if no tags reference the image, in which case the image is + "untagged", in which case it can still be referenced by its ID. + type: "array" + items: + type: "string" + example: + - "example:1.0" + - "example:latest" + - "example:stable" + - "internal.registry.example.com:5000/example:1.0" + RepoDigests: + description: | + List of content-addressable digests of locally available image manifests + that the image is referenced from. Multiple manifests can refer to the + same image. + + These digests are usually only available if the image was either pulled + from a registry, or if the image was pushed to a registry, which is when + the manifest is generated and its digest calculated. + type: "array" + items: + type: "string" + example: + - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb" + - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + Comment: + description: | + Optional message that was set when committing or importing the image. + type: "string" + x-nullable: true + example: "" + Created: + description: | + Date and time at which the image was created, formatted in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + + This information is only available if present in the image, + and omitted otherwise. + type: "string" + format: "dateTime" + x-nullable: true + example: "2022-02-04T21:20:12.497794809Z" + Author: + description: | + Name of the author that was specified when committing the image, or as + specified through MAINTAINER (deprecated) in the Dockerfile. + type: "string" + x-nullable: true + example: "" + Config: + $ref: "#/definitions/ImageConfig" + Architecture: + description: | + Hardware CPU architecture that the image runs on. + type: "string" + x-nullable: false + example: "arm" + Variant: + description: | + CPU architecture variant (presently ARM-only). + type: "string" + x-nullable: true + example: "v7" + Os: + description: | + Operating System the image is built to run on. + type: "string" + x-nullable: false + example: "linux" + OsVersion: + description: | + Operating System version the image is built to run on (especially + for Windows). + type: "string" + example: "" + x-nullable: true + Size: + description: | + Total size of the image variant, including all layers it is composed of. + + For multi-platform images, this is the size of the platform variant + selected by the `platform` query parameter. If no platform is specified, + the daemon selects a platform as described in the `platform` parameter. + + When using the containerd image store, this includes both the image content + that's present locally and the unpacked snapshot data for the selected + variant. + + Image data may be shared between images, so this size does not indicate + how much space would be reclaimed by deleting the image. + type: "integer" + format: "int64" + x-nullable: false + example: 1239828 + GraphDriver: + x-nullable: true + $ref: "#/definitions/DriverData" + RootFS: + description: | + Information about the image's RootFS, including the layer IDs. + type: "object" + required: [Type] + properties: + Type: + type: "string" + x-nullable: false + example: "layers" + Layers: + type: "array" + items: + type: "string" + example: + - "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6" + - "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + Metadata: + description: | + Additional metadata of the image in the local cache. This information + is local to the daemon, and not part of the image itself. + type: "object" + properties: + LastTagTime: + description: | + Date and time at which the image was last tagged in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + + This information is only available if the image was tagged locally, + and omitted otherwise. + type: "string" + format: "dateTime" + example: "2022-02-28T14:40:02.623929178Z" + x-nullable: true + + Identity: + description: |- + Identity holds information about the identity and origin of the image. + This is trusted information verified by the daemon and cannot be modified + by tagging an image to a different name. + type: "object" + properties: + Signature: + description: |- + Signature contains the properties of verified signatures for the image. + type: "array" + items: + $ref: "#/definitions/SignatureIdentity" + Pull: + description: |- + Pull contains remote location information if image was created via pull. + If image was pulled via mirror, this contains the original repository location. + After successful push this images also contains the pushed repository location. + type: "array" + items: + $ref: "#/definitions/PullIdentity" + Build: + description: |- + Build contains build reference information if image was created via build. + type: "array" + items: + $ref: "#/definitions/BuildIdentity" + + BuildIdentity: + description: |- + BuildIdentity contains build reference information if image was created via build. + type: "object" + properties: + Ref: + description: |- + Ref is the identifier for the build request. This reference can be used to + look up the build details in BuildKit history API. + type: "string" + CreatedAt: + description: |- + CreatedAt is the time when the build ran. + type: "string" + format: "date-time" + + PullIdentity: + description: |- + PullIdentity contains remote location information if image was created via pull. + If image was pulled via mirror, this contains the original repository location. + type: "object" + properties: + Repository: + description: |- + Repository is the remote repository location the image was pulled from. + type: "string" + + SignatureIdentity: + description: |- + SignatureIdentity contains the properties of verified signatures for the image. + type: "object" + properties: + Name: + description: |- + Name is a textual description summarizing the type of signature. + type: "string" + Timestamps: + description: |- + Timestamps contains a list of verified signed timestamps for the signature. + type: "array" + items: + $ref: "#/definitions/SignatureTimestamp" + KnownSigner: + description: |- + KnownSigner is an identifier for a special signer identity that is known to the implementation. + $ref: "#/definitions/KnownSignerIdentity" + DockerReference: + description: |- + DockerReference is the Docker image reference associated with the signature. + This is an optional field only present in older hashedrecord signatures. + type: "string" + Signer: + description: |- + Signer contains information about the signer certificate used to sign the image. + $ref: "#/definitions/SignerIdentity" + SignatureType: + description: |- + SignatureType is the type of signature format. E.g. "bundle-v0.3" or "hashedrecord". + $ref: "#/definitions/SignatureType" + Error: + description: |- + Error contains error information if signature verification failed. + Other fields will be empty in this case. + type: "string" + Warnings: + description: |- + Warnings contains any warnings that occurred during signature verification. + For example, if there was no internet connectivity and cached trust roots were used. + Warning does not indicate a failed verification but may point to configuration issues. + type: "array" + items: + type: "string" + + SignatureTimestamp: + description: |- + SignatureTimestamp contains information about a verified signed timestamp for an image signature. + type: "object" + properties: + Type: + $ref: "#/definitions/SignatureTimestampType" + URI: + type: "string" + Timestamp: + type: "string" + format: "date-time" + + SignatureTimestampType: + description: |- + SignatureTimestampType is the type of timestamp used in the signature. + type: "string" + enum: + - "Tlog" + - "TimestampAuthority" + + SignatureType: + description: |- + SignatureType is the type of signature format. + type: "string" + enum: + - "bundle-v0.3" + - "simplesigning-v1" + + KnownSignerIdentity: + description: |- + KnownSignerIdentity is an identifier for a special signer identity that is known to the implementation. + type: "string" + enum: + - "DHI" + + SignerIdentity: + description: |- + SignerIdentity contains information about the signer certificate used to sign the image. + type: "object" + properties: + CertificateIssuer: + type: "string" + description: |- + CertificateIssuer is the certificate issuer. + SubjectAlternativeName: + type: "string" + description: |- + SubjectAlternativeName is the certificate subject alternative name. + Issuer: + type: "string" + description: |- + The OIDC issuer. Should match `iss` claim of ID token or, in the case of + a federated login like Dex it should match the issuer URL of the + upstream issuer. The issuer is not set the extensions are invalid and + will fail to render. + BuildSignerURI: + type: "string" + description: |- + Reference to specific build instructions that are responsible for signing. + BuildSignerDigest: + type: "string" + description: |- + Immutable reference to the specific version of the build instructions that is responsible for signing. + RunnerEnvironment: + type: "string" + description: |- + Specifies whether the build took place in platform-hosted cloud infrastructure or customer/self-hosted infrastructure. + SourceRepositoryURI: + type: "string" + description: |- + Source repository URL that the build was based on. + SourceRepositoryDigest: + type: "string" + description: |- + Immutable reference to a specific version of the source code that the build was based upon. + SourceRepositoryRef: + type: "string" + description: |- + Source Repository Ref that the build run was based upon. + SourceRepositoryIdentifier: + type: "string" + description: |- + Immutable identifier for the source repository the workflow was based upon. + SourceRepositoryOwnerURI: + type: "string" + description: |- + Source repository owner URL of the owner of the source repository that the build was based on. + SourceRepositoryOwnerIdentifier: + type: "string" + description: |- + Immutable identifier for the owner of the source repository that the workflow was based upon. + BuildConfigURI: + type: "string" + description: |- + Build Config URL to the top-level/initiating build instructions. + BuildConfigDigest: + type: "string" + description: |- + Immutable reference to the specific version of the top-level/initiating build instructions. + BuildTrigger: + type: "string" + description: |- + Event or action that initiated the build. + RunInvocationURI: + type: "string" + description: |- + Run Invocation URL to uniquely identify the build execution. + SourceRepositoryVisibilityAtSigning: + type: "string" + description: |- + Source repository visibility at the time of signing the certificate. + + ImageSummary: + type: "object" + x-go-name: "Summary" + required: + - Id + - ParentId + - RepoTags + - RepoDigests + - Created + - Size + - SharedSize + - Labels + - Containers + properties: + Id: + description: | + ID is the content-addressable ID of an image. + + This identifier is a content-addressable digest calculated from the + image's configuration (which includes the digests of layers used by + the image). + + Note that this digest differs from the `RepoDigests` below, which + holds digests of image manifests that reference the image. + type: "string" + x-nullable: false + example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" + ParentId: + description: | + ID of the parent image. + + Depending on how the image was created, this field may be empty and + is only set for images that were built/created locally. This field + is empty if the image was pulled from an image registry. + type: "string" + x-nullable: false + example: "" + RepoTags: + description: | + List of image names/tags in the local image cache that reference this + image. + + Multiple image tags can refer to the same image, and this list may be + empty if no tags reference the image, in which case the image is + "untagged", in which case it can still be referenced by its ID. + type: "array" + x-nullable: false + items: + type: "string" + example: + - "example:1.0" + - "example:latest" + - "example:stable" + - "internal.registry.example.com:5000/example:1.0" + RepoDigests: + description: | + List of content-addressable digests of locally available image manifests + that the image is referenced from. Multiple manifests can refer to the + same image. + + These digests are usually only available if the image was either pulled + from a registry, or if the image was pushed to a registry, which is when + the manifest is generated and its digest calculated. + type: "array" + x-nullable: false + items: + type: "string" + example: + - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb" + - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + Created: + description: | + Date and time at which the image was created as a Unix timestamp + (number of seconds since EPOCH). + type: "integer" + x-nullable: false + example: "1644009612" + Size: + description: | + Total size of the image including all layers it is composed of. + type: "integer" + format: "int64" + x-nullable: false + example: 172064416 + SharedSize: + description: | + Total size of image layers that are shared between this image and other + images. + + This size is not calculated by default. `-1` indicates that the value + has not been set / calculated. + type: "integer" + format: "int64" + x-nullable: false + example: 1239828 + Labels: + description: "User-defined key/value metadata." + type: "object" + x-nullable: false + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + Containers: + description: | + Number of containers using this image. Includes both stopped and running + containers. + + `-1` indicates that the value has not been set / calculated. + x-nullable: false + type: "integer" + example: 2 + Manifests: + description: | + Manifests is a list of manifests available in this image. + It provides a more detailed view of the platform-specific image manifests + or other image-attached data like build attestations. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + type: "array" + x-nullable: false + x-omitempty: true + items: + $ref: "#/definitions/ImageManifestSummary" + Descriptor: + description: | + Descriptor is an OCI descriptor of the image target. + In case of a multi-platform image, this descriptor points to the OCI index + or a manifest list. + + This field is only present if the daemon provides a multi-platform image store. + + WARNING: This is experimental and may change at any time without any backward + compatibility. + x-nullable: true + $ref: "#/definitions/OCIDescriptor" + + ImagesDiskUsage: + type: "object" + x-go-name: "DiskUsage" + x-go-package: "github.com/moby/moby/api/types/image" + description: | + represents system data usage for image resources. + properties: + ActiveCount: + description: | + Count of active images. + type: "integer" + format: "int64" + example: 1 + TotalCount: + description: | + Count of all images. + type: "integer" + format: "int64" + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing unused images. + type: "integer" + format: "int64" + example: 12345678 + TotalSize: + description: | + Disk space in use by images. + type: "integer" + format: "int64" + example: 98765432 + Items: + description: | + List of image summaries. + type: "array" + x-omitempty: true + items: + x-go-type: + type: Summary + + AuthConfig: + type: "object" + properties: + username: + type: "string" + password: + type: "string" + serveraddress: + type: "string" + example: + username: "hannibal" + password: "xxxx" + serveraddress: "https://index.docker.io/v1/" + + AuthResponse: + description: | + An identity token was generated successfully. + type: "object" + required: [Status] + properties: + Status: + description: "The status of the authentication" + type: "string" + example: "Login Succeeded" + x-nullable: false + IdentityToken: + description: "An opaque token used to authenticate a user after a successful login" + type: "string" + example: "9cbaf023786cd7..." + x-nullable: false + + ProcessConfig: + type: "object" + properties: + privileged: + type: "boolean" + user: + type: "string" + tty: + type: "boolean" + entrypoint: + type: "string" + arguments: + type: "array" + items: + type: "string" + + Volume: + type: "object" + required: [Name, Driver, Mountpoint, Labels, Scope, Options] + x-nullable: false + properties: + Name: + type: "string" + description: "Name of the volume." + x-nullable: false + example: "tardis" + Driver: + type: "string" + description: "Name of the volume driver used by the volume." + x-nullable: false + example: "custom" + Mountpoint: + type: "string" + description: "Mount path of the volume on the host." + x-nullable: false + example: "/var/lib/docker/volumes/tardis" + CreatedAt: + type: "string" + format: "dateTime" + description: "Date/Time the volume was created." + example: "2016-06-07T20:31:11.853781916Z" + Status: + type: "object" + description: | + Low-level details about the volume, provided by the volume driver. + Details are returned as a map with key/value pairs: + `{"key":"value","key2":"value2"}`. + + The `Status` field is optional, and is omitted if the volume driver + does not support this feature. + additionalProperties: + type: "object" + example: + hello: "world" + Labels: + type: "object" + description: "User-defined key/value metadata." + x-nullable: false + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + Scope: + type: "string" + description: | + The level at which the volume exists. Either `global` for cluster-wide, + or `local` for machine level. + default: "local" + x-nullable: false + enum: ["local", "global"] + example: "local" + ClusterVolume: + $ref: "#/definitions/ClusterVolume" + Options: + type: "object" + description: | + The driver specific options used when creating the volume. + additionalProperties: + type: "string" + example: + device: "tmpfs" + o: "size=100m,uid=1000" + type: "tmpfs" + UsageData: + type: "object" + x-nullable: true + x-go-name: "UsageData" + required: [Size, RefCount] + description: | + Usage details about the volume. This information is used by the + `GET /system/df` endpoint, and omitted in other endpoints. + properties: + Size: + type: "integer" + format: "int64" + default: -1 + description: | + Amount of disk space used by the volume (in bytes). This information + is only available for volumes created with the `"local"` volume + driver. For volumes created with other volume drivers, this field + is set to `-1` ("not available") + x-nullable: false + RefCount: + type: "integer" + format: "int64" + default: -1 + description: | + The number of containers referencing this volume. This field + is set to `-1` if the reference-count is not available. + x-nullable: false + + VolumesDiskUsage: + type: "object" + x-go-name: "DiskUsage" + x-go-package: "github.com/moby/moby/api/types/volume" + description: | + represents system data usage for volume resources. + properties: + ActiveCount: + description: | + Count of active volumes. + type: "integer" + format: "int64" + example: 1 + TotalCount: + description: | + Count of all volumes. + type: "integer" + format: "int64" + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive volumes. + type: "integer" + format: "int64" + example: 12345678 + TotalSize: + description: | + Disk space in use by volumes. + type: "integer" + format: "int64" + example: 98765432 + Items: + description: | + List of volumes. + type: "array" + x-omitempty: true + items: + x-go-type: + type: Volume + + VolumeCreateRequest: + description: "Volume configuration" + type: "object" + title: "VolumeConfig" + x-go-name: "CreateRequest" + properties: + Name: + description: | + The new volume's name. If not specified, Docker generates a name. + type: "string" + x-nullable: false + example: "tardis" + Driver: + description: "Name of the volume driver to use." + type: "string" + default: "local" + x-nullable: false + example: "custom" + DriverOpts: + description: | + A mapping of driver options and values. These options are + passed directly to the driver and are driver specific. + type: "object" + additionalProperties: + type: "string" + example: + device: "tmpfs" + o: "size=100m,uid=1000" + type: "tmpfs" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + ClusterVolumeSpec: + $ref: "#/definitions/ClusterVolumeSpec" + + VolumeListResponse: + type: "object" + title: "VolumeListResponse" + x-go-name: "ListResponse" + description: "Volume list response" + properties: + Volumes: + type: "array" + description: "List of volumes" + items: + $ref: "#/definitions/Volume" + Warnings: + type: "array" + description: | + Warnings that occurred when fetching the list of volumes. + items: + type: "string" + example: [] + + Network: + type: "object" + properties: + Name: + description: | + Name of the network. + type: "string" + example: "my_network" + x-omitempty: false + Id: + description: | + ID that uniquely identifies a network on a single machine. + type: "string" + x-go-name: "ID" + x-omitempty: false + example: "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99" + Created: + description: | + Date and time at which the network was created in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + x-omitempty: false + x-go-type: + type: Time + import: + package: time + hints: + nullable: false + example: "2016-10-19T04:33:30.360899459Z" + Scope: + description: | + The level at which the network exists (e.g. `swarm` for cluster-wide + or `local` for machine level) + type: "string" + x-omitempty: false + example: "local" + Driver: + description: | + The name of the driver used to create the network (e.g. `bridge`, + `overlay`). + type: "string" + x-omitempty: false + example: "overlay" + EnableIPv4: + description: | + Whether the network was created with IPv4 enabled. + type: "boolean" + x-omitempty: false + example: true + EnableIPv6: + description: | + Whether the network was created with IPv6 enabled. + type: "boolean" + x-omitempty: false + example: false + IPAM: + description: | + The network's IP Address Management. + $ref: "#/definitions/IPAM" + x-nullable: false + x-omitempty: false + Internal: + description: | + Whether the network is created to only allow internal networking + connectivity. + type: "boolean" + x-nullable: false + x-omitempty: false + default: false + example: false + Attachable: + description: | + Whether a global / swarm scope network is manually attachable by regular + containers from workers in swarm mode. + type: "boolean" + x-nullable: false + x-omitempty: false + default: false + example: false + Ingress: + description: | + Whether the network is providing the routing-mesh for the swarm cluster. + type: "boolean" + x-nullable: false + x-omitempty: false + default: false + example: false + ConfigFrom: + $ref: "#/definitions/ConfigReference" + x-nullable: false + x-omitempty: false + ConfigOnly: + description: | + Whether the network is a config-only network. Config-only networks are + placeholder networks for network configurations to be used by other + networks. Config-only networks cannot be used directly to run containers + or services. + type: "boolean" + x-omitempty: false + x-nullable: false + default: false + Options: + description: | + Network-specific options uses when creating the network. + type: "object" + x-omitempty: false + additionalProperties: + type: "string" + example: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" + com.docker.network.bridge.name: "docker0" + com.docker.network.driver.mtu: "1500" + Labels: + description: | + Metadata specific to the network being created. + type: "object" + x-omitempty: false + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + Peers: + description: | + List of peer nodes for an overlay network. This field is only present + for overlay networks, and omitted for other network types. + type: "array" + x-omitempty: true + items: + $ref: "#/definitions/PeerInfo" + + NetworkSummary: + description: "Network list response item" + x-go-name: Summary + type: "object" + allOf: + - $ref: "#/definitions/Network" + + NetworkInspect: + description: 'The body of the "get network" http response message.' + x-go-name: Inspect + type: "object" + allOf: + - $ref: "#/definitions/Network" + properties: + Containers: + description: | + Contains endpoints attached to the network. + type: "object" + x-omitempty: false + additionalProperties: + $ref: "#/definitions/EndpointResource" + example: + 19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c: + Name: "test" + EndpointID: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" + MacAddress: "02:42:ac:13:00:02" + IPv4Address: "172.19.0.2/16" + IPv6Address: "" + Services: + description: | + List of services using the network. This field is only present for + swarm scope networks, and omitted for local scope networks. + type: "object" + x-omitempty: true + additionalProperties: + x-go-type: + type: ServiceInfo + hints: + nullable: false + Status: + description: > + provides runtime information about the network + such as the number of allocated IPs. + $ref: "#/definitions/NetworkStatus" + + NetworkStatus: + description: > + provides runtime information about the network + such as the number of allocated IPs. + type: "object" + x-go-name: Status + properties: + IPAM: + $ref: "#/definitions/IPAMStatus" + + ServiceInfo: + x-nullable: false + x-omitempty: false + description: > + represents service parameters with the list of service's tasks + type: "object" + properties: + VIP: + type: "string" + x-omitempty: false + x-go-type: + type: Addr + import: + package: net/netip + Ports: + type: "array" + x-omitempty: false + items: + type: "string" + LocalLBIndex: + type: "integer" + format: "int" + x-omitempty: false + x-go-type: + type: int + Tasks: + type: "array" + x-omitempty: false + items: + $ref: "#/definitions/NetworkTaskInfo" + + NetworkTaskInfo: + x-nullable: false + x-omitempty: false + x-go-name: Task + description: > + carries the information about one backend task + type: "object" + properties: + Name: + type: "string" + x-omitempty: false + EndpointID: + type: "string" + x-omitempty: false + EndpointIP: + type: "string" + x-omitempty: false + x-go-type: + type: Addr + import: + package: net/netip + Info: + type: "object" + x-omitempty: false + additionalProperties: + type: "string" + + ConfigReference: + x-nullable: false + x-omitempty: false + description: | + The config-only network source to provide the configuration for + this network. + type: "object" + properties: + Network: + description: | + The name of the config-only network that provides the network's + configuration. The specified network must be an existing config-only + network. Only network names are allowed, not network IDs. + type: "string" + x-omitempty: false + example: "config_only_network_01" + + IPAM: + type: "object" + x-nullable: false + x-omitempty: false + properties: + Driver: + description: "Name of the IPAM driver to use." + type: "string" + default: "default" + example: "default" + Config: + description: | + List of IPAM configuration options, specified as a map: + + ``` + {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } + ``` + type: "array" + items: + $ref: "#/definitions/IPAMConfig" + Options: + description: "Driver-specific options, specified as a map." + type: "object" + additionalProperties: + type: "string" + example: + foo: "bar" + + IPAMConfig: + type: "object" + properties: + Subnet: + type: "string" + example: "172.20.0.0/16" + IPRange: + type: "string" + example: "172.20.10.0/24" + Gateway: + type: "string" + example: "172.20.10.11" + AuxiliaryAddresses: + type: "object" + additionalProperties: + type: "string" + + IPAMStatus: + type: "object" + x-nullable: false + x-omitempty: false + properties: + Subnets: + type: "object" + additionalProperties: + $ref: "#/definitions/SubnetStatus" + example: + "172.16.0.0/16": + IPsInUse: 3 + DynamicIPsAvailable: 65533 + "2001:db8:abcd:0012::0/96": + IPsInUse: 5 + DynamicIPsAvailable: 4294967291 + x-go-type: + type: SubnetStatuses + kind: map + + SubnetStatus: + type: "object" + x-nullable: false + x-omitempty: false + properties: + IPsInUse: + description: > + Number of IP addresses in the subnet that are in use or reserved and + are therefore unavailable for allocation, saturating at 264 - 1. + type: integer + format: uint64 + x-omitempty: false + DynamicIPsAvailable: + description: > + Number of IP addresses within the network's IPRange for the subnet + that are available for allocation, saturating at 264 - 1. + type: integer + format: uint64 + x-omitempty: false + + EndpointResource: + type: "object" + description: > + contains network resources allocated and used for a + container in a network. + properties: + Name: + type: "string" + x-omitempty: false + example: "container_1" + EndpointID: + type: "string" + x-omitempty: false + example: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" + MacAddress: + type: "string" + x-omitempty: false + example: "02:42:ac:13:00:02" + x-go-type: + type: HardwareAddr + IPv4Address: + type: "string" + x-omitempty: false + example: "172.19.0.2/16" + x-go-type: + type: Prefix + import: + package: net/netip + IPv6Address: + type: "string" + x-omitempty: false + example: "" + x-go-type: + type: Prefix + import: + package: net/netip + + PeerInfo: + description: > + represents one peer of an overlay network. + type: "object" + x-nullable: false + properties: + Name: + description: + ID of the peer-node in the Swarm cluster. + type: "string" + x-omitempty: false + example: "6869d7c1732b" + IP: + description: + IP-address of the peer-node in the Swarm cluster. + type: "string" + x-omitempty: false + example: "10.133.77.91" + x-go-type: + type: Addr + import: + package: net/netip + + NetworkCreateResponse: + description: "OK response to NetworkCreate operation" + type: "object" + title: "NetworkCreateResponse" + x-go-name: "CreateResponse" + required: [Id, Warning] + properties: + Id: + description: "The ID of the created network." + type: "string" + x-nullable: false + example: "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d" + Warning: + description: "Warnings encountered when creating the container" + type: "string" + x-nullable: false + example: "" + + BuildInfo: + type: "object" + properties: + id: + type: "string" + stream: + type: "string" + errorDetail: + $ref: "#/definitions/ErrorDetail" + status: + type: "string" + progressDetail: + $ref: "#/definitions/ProgressDetail" + aux: + $ref: "#/definitions/ImageID" + + BuildCache: + type: "object" + description: | + BuildCache contains information about a build cache record. + properties: + ID: + type: "string" + description: | + Unique ID of the build cache record. + example: "ndlpt0hhvkqcdfkputsk4cq9c" + Parents: + description: | + List of parent build cache record IDs. + type: "array" + items: + type: "string" + x-nullable: true + example: ["hw53o5aio51xtltp5xjp8v7fx"] + Type: + type: "string" + description: | + Cache record type. + example: "regular" + # see https://github.com/moby/buildkit/blob/fce4a32258dc9d9664f71a4831d5de10f0670677/client/diskusage.go#L75-L84 + enum: + - "internal" + - "frontend" + - "source.local" + - "source.git.checkout" + - "exec.cachemount" + - "regular" + Description: + type: "string" + description: | + Description of the build-step that produced the build cache. + example: "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" + InUse: + type: "boolean" + description: | + Indicates if the build cache is in use. + example: false + Shared: + type: "boolean" + description: | + Indicates if the build cache is shared. + example: true + Size: + description: | + Amount of disk space used by the build cache (in bytes). + type: "integer" + example: 51 + CreatedAt: + description: | + Date and time at which the build cache was created in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2016-08-18T10:44:24.496525531Z" + LastUsedAt: + description: | + Date and time at which the build cache was last used in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + x-nullable: true + example: "2017-08-09T07:09:37.632105588Z" + UsageCount: + type: "integer" + example: 26 + + BuildCacheDiskUsage: + type: "object" + x-go-name: "DiskUsage" + x-go-package: "github.com/moby/moby/api/types/build" + description: | + represents system data usage for build cache resources. + properties: + ActiveCount: + description: | + Count of active build cache records. + type: "integer" + format: "int64" + example: 1 + TotalCount: + description: | + Count of all build cache records. + type: "integer" + format: "int64" + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive build cache records. + type: "integer" + format: "int64" + example: 12345678 + TotalSize: + description: | + Disk space in use by build cache records. + type: "integer" + format: "int64" + example: 98765432 + Items: + description: | + List of build cache records. + type: "array" + x-omitempty: true + items: + x-go-type: + type: CacheRecord + + ImageID: + type: "object" + description: "Image ID or Digest" + properties: + ID: + type: "string" + example: + ID: "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + + CreateImageInfo: + type: "object" + properties: + id: + type: "string" + errorDetail: + $ref: "#/definitions/ErrorDetail" + status: + type: "string" + progressDetail: + $ref: "#/definitions/ProgressDetail" + + PushImageInfo: + type: "object" + properties: + errorDetail: + $ref: "#/definitions/ErrorDetail" + status: + type: "string" + progressDetail: + $ref: "#/definitions/ProgressDetail" + + DeviceInfo: + type: "object" + description: | + DeviceInfo represents a device that can be used by a container. + properties: + Source: + type: "string" + example: "cdi" + description: | + The origin device driver. + ID: + type: "string" + example: "vendor.com/gpu=0" + description: | + The unique identifier for the device within its source driver. + For CDI devices, this would be an FQDN like "vendor.com/gpu=0". + + NRIInfo: + description: | + Information about the Node Resource Interface (NRI). + + This field is only present if NRI is enabled. + type: "object" + x-nullable: true + properties: + Info: + description: | + Information about NRI, provided as "label" / "value" pairs. + +


+ + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: "array" + items: + type: "array" + items: + type: "string" + example: + - ["plugin-path", "/opt/docker/nri/plugins"] + + ErrorDetail: + type: "object" + properties: + code: + type: "integer" + message: + type: "string" + + ProgressDetail: + type: "object" + properties: + current: + type: "integer" + total: + type: "integer" + + ErrorResponse: + description: "Represents an error." + type: "object" + required: ["message"] + properties: + message: + description: "The error message." + type: "string" + x-nullable: false + example: + message: "Something went wrong." + + IDResponse: + description: "Response to an API call that returns just an Id" + type: "object" + x-go-name: "IDResponse" + required: ["Id"] + properties: + Id: + description: "The id of the newly created object." + type: "string" + x-nullable: false + + NetworkConnectRequest: + description: | + NetworkConnectRequest represents the data to be used to connect a container to a network. + type: "object" + x-go-name: "ConnectRequest" + required: ["Container"] + properties: + Container: + type: "string" + description: "The ID or name of the container to connect to the network." + x-nullable: false + example: "3613f73ba0e4" + EndpointConfig: + $ref: "#/definitions/EndpointSettings" + x-nullable: true + + NetworkDisconnectRequest: + description: | + NetworkDisconnectRequest represents the data to be used to disconnect a container from a network. + type: "object" + x-go-name: "DisconnectRequest" + required: ["Container"] + properties: + Container: + type: "string" + description: "The ID or name of the container to disconnect from the network." + x-nullable: false + example: "3613f73ba0e4" + Force: + type: "boolean" + description: "Force the container to disconnect from the network." + default: false + x-nullable: false + x-omitempty: false + example: false + + EndpointSettings: + description: "Configuration for a network endpoint." + type: "object" + properties: + # Configurations + IPAMConfig: + $ref: "#/definitions/EndpointIPAMConfig" + Links: + type: "array" + items: + type: "string" + example: + - "container_1" + - "container_2" + MacAddress: + description: | + MAC address for the endpoint on this network. The network driver might ignore this parameter. + type: "string" + example: "02:42:ac:11:00:04" + x-go-type: + type: HardwareAddr + Aliases: + type: "array" + items: + type: "string" + example: + - "server_x" + - "server_y" + DriverOpts: + description: | + DriverOpts is a mapping of driver options and values. These options + are passed directly to the driver and are driver specific. + type: "object" + x-nullable: true + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + GwPriority: + description: | + This property determines which endpoint will provide the default + gateway for a container. The endpoint with the highest priority will + be used. If multiple endpoints have the same priority, endpoints are + lexicographically sorted based on their network name, and the one + that sorts first is picked. + type: "integer" + format: "int64" + example: + - 10 + + # Operational data + NetworkID: + description: | + Unique ID of the network. + type: "string" + example: "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + EndpointID: + description: | + Unique ID for the service endpoint in a Sandbox. + type: "string" + example: "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + Gateway: + description: | + Gateway address for this network. + type: "string" + example: "172.17.0.1" + IPAddress: + description: | + IPv4 address. + type: "string" + example: "172.17.0.4" + x-go-type: + type: Addr + import: + package: net/netip + IPPrefixLen: + description: | + Mask length of the IPv4 address. + type: "integer" + example: 16 + IPv6Gateway: + description: | + IPv6 gateway address. + type: "string" + example: "2001:db8:2::100" + x-go-type: + type: Addr + import: + package: net/netip + GlobalIPv6Address: + description: | + Global IPv6 address. + type: "string" + example: "2001:db8::5689" + x-go-type: + type: Addr + import: + package: net/netip + GlobalIPv6PrefixLen: + description: | + Mask length of the global IPv6 address. + type: "integer" + format: "int64" + example: 64 + DNSNames: + description: | + List of all DNS names an endpoint has on a specific network. This + list is based on the container name, network aliases, container short + ID, and hostname. + + These DNS names are non-fully qualified but can contain several dots. + You can get fully qualified DNS names by appending `.`. + For instance, if container name is `my.ctr` and the network is named + `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be + `my.ctr.testnet`. + type: array + items: + type: string + example: ["foobar", "server_x", "server_y", "my.ctr"] + + EndpointIPAMConfig: + description: | + EndpointIPAMConfig represents an endpoint's IPAM configuration. + type: "object" + x-nullable: true + properties: + IPv4Address: + type: "string" + example: "172.20.30.33" + x-go-type: + type: Addr + import: + package: net/netip + IPv6Address: + type: "string" + example: "2001:db8:abcd::3033" + x-go-type: + type: Addr + import: + package: net/netip + LinkLocalIPs: + type: "array" + items: + type: "string" + x-go-type: + type: Addr + import: + package: net/netip + example: + - "169.254.34.68" + - "fe80::3468" + + PluginMount: + type: "object" + x-go-name: "Mount" + x-nullable: false + required: [Name, Description, Settable, Source, Destination, Type, Options] + properties: + Name: + type: "string" + x-nullable: false + example: "some-mount" + Description: + type: "string" + x-nullable: false + example: "This is a mount that's used by the plugin." + Settable: + type: "array" + items: + type: "string" + Source: + type: "string" + example: "/var/lib/docker/plugins/" + Destination: + type: "string" + x-nullable: false + example: "/mnt/state" + Type: + type: "string" + x-nullable: false + example: "bind" + Options: + type: "array" + items: + type: "string" + example: + - "rbind" + - "rw" + + PluginDevice: + type: "object" + x-go-name: "Device" + required: [Name, Description, Settable, Path] + x-nullable: false + properties: + Name: + type: "string" + x-nullable: false + Description: + type: "string" + x-nullable: false + Settable: + type: "array" + items: + type: "string" + Path: + type: "string" + example: "/dev/fuse" + + PluginEnv: + type: "object" + x-go-name: "Env" + x-nullable: false + required: [Name, Description, Settable, Value] + properties: + Name: + x-nullable: false + type: "string" + Description: + x-nullable: false + type: "string" + Settable: + type: "array" + items: + type: "string" + Value: + type: "string" + + PluginPrivilege: + description: | + Describes a permission the user has to accept upon installing + the plugin. + type: "object" + x-go-name: "Privilege" + properties: + Name: + type: "string" + example: "network" + Description: + type: "string" + Value: + type: "array" + items: + type: "string" + example: + - "host" + + Plugin: + description: "A plugin for the Engine API" + type: "object" + x-go-name: "Plugin" + required: [Settings, Enabled, Config, Name] + properties: + Id: + type: "string" + example: "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + Name: + type: "string" + x-nullable: false + example: "tiborvass/sample-volume-plugin" + Enabled: + description: + True if the plugin is running. False if the plugin is not running, + only installed. + type: "boolean" + x-nullable: false + example: true + Settings: + description: "user-configurable settings for the plugin." + type: "object" + x-go-name: "Settings" + x-nullable: false + required: [Args, Devices, Env, Mounts] + properties: + Mounts: + type: "array" + items: + $ref: "#/definitions/PluginMount" + Env: + type: "array" + items: + type: "string" + example: + - "DEBUG=0" + Args: + type: "array" + items: + type: "string" + Devices: + type: "array" + items: + $ref: "#/definitions/PluginDevice" + PluginReference: + description: "plugin remote reference used to push/pull the plugin" + type: "string" + x-go-name: "PluginReference" + x-nullable: false + example: "localhost:5000/tiborvass/sample-volume-plugin:latest" + Config: + description: "The config of a plugin." + type: "object" + x-go-name: "Config" + x-nullable: false + required: + - Description + - Documentation + - Interface + - Entrypoint + - WorkDir + - Network + - Linux + - PidHost + - PropagatedMount + - IpcHost + - Mounts + - Env + - Args + properties: + Description: + type: "string" + x-nullable: false + example: "A sample volume plugin for Docker" + Documentation: + type: "string" + x-nullable: false + example: "https://docs.docker.com/engine/extend/plugins/" + Interface: + description: "The interface between Docker and the plugin" + x-nullable: false + type: "object" + x-go-name: "Interface" + required: [Types, Socket] + properties: + Types: + type: "array" + items: + type: "string" + x-go-type: + type: "CapabilityID" + example: + - "docker.volumedriver/1.0" + Socket: + type: "string" + x-nullable: false + example: "plugins.sock" + ProtocolScheme: + type: "string" + example: "some.protocol/v1.0" + description: "Protocol to use for clients connecting to the plugin." + enum: + - "" + - "moby.plugins.http/v1" + Entrypoint: + type: "array" + items: + type: "string" + example: + - "/usr/bin/sample-volume-plugin" + - "/data" + WorkDir: + type: "string" + x-nullable: false + example: "/bin/" + User: + type: "object" + x-go-name: "User" + x-nullable: false + properties: + UID: + type: "integer" + format: "uint32" + example: 1000 + GID: + type: "integer" + format: "uint32" + example: 1000 + Network: + type: "object" + x-go-name: "NetworkConfig" + x-nullable: false + required: [Type] + properties: + Type: + x-nullable: false + type: "string" + example: "host" + Linux: + type: "object" + x-go-name: "LinuxConfig" + x-nullable: false + required: [Capabilities, AllowAllDevices, Devices] + properties: + Capabilities: + type: "array" + items: + type: "string" + example: + - "CAP_SYS_ADMIN" + - "CAP_SYSLOG" + AllowAllDevices: + type: "boolean" + x-nullable: false + example: false + Devices: + type: "array" + items: + $ref: "#/definitions/PluginDevice" + PropagatedMount: + type: "string" + x-nullable: false + example: "/mnt/volumes" + IpcHost: + type: "boolean" + x-nullable: false + example: false + PidHost: + type: "boolean" + x-nullable: false + example: false + Mounts: + type: "array" + items: + $ref: "#/definitions/PluginMount" + Env: + type: "array" + items: + $ref: "#/definitions/PluginEnv" + example: + - Name: "DEBUG" + Description: "If set, prints debug messages" + Settable: null + Value: "0" + Args: + type: "object" + x-go-name: "Args" + x-nullable: false + required: [Name, Description, Settable, Value] + properties: + Name: + x-nullable: false + type: "string" + example: "args" + Description: + x-nullable: false + type: "string" + example: "command line arguments" + Settable: + type: "array" + items: + type: "string" + Value: + type: "array" + items: + type: "string" + rootfs: + type: "object" + x-go-name: "RootFS" + properties: + type: + type: "string" + example: "layers" + diff_ids: + type: "array" + items: + type: "string" + example: + - "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887" + - "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + + ObjectVersion: + description: | + The version number of the object such as node, service, etc. This is needed + to avoid conflicting writes. The client must send the version number along + with the modified specification when updating these objects. + + This approach ensures safe concurrency and determinism in that the change + on the object may not be applied if the version number has changed from the + last read. In other words, if two update requests specify the same base + version, only one of the requests can succeed. As a result, two separate + update requests that happen at the same time will not unintentionally + overwrite each other. + type: "object" + properties: + Index: + type: "integer" + format: "uint64" + example: 373531 + + NodeSpec: + type: "object" + properties: + Name: + description: "Name for the node." + type: "string" + example: "my-node" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + Role: + description: "Role of the node." + type: "string" + enum: + - "worker" + - "manager" + example: "manager" + Availability: + description: "Availability of the node." + type: "string" + enum: + - "active" + - "pause" + - "drain" + example: "active" + example: + Availability: "active" + Name: "node-name" + Role: "manager" + Labels: + foo: "bar" + + Node: + type: "object" + properties: + ID: + type: "string" + example: "24ifsmvkjbyhk" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + description: | + Date and time at which the node was added to the swarm in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2016-08-18T10:44:24.496525531Z" + UpdatedAt: + description: | + Date and time at which the node was last updated in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2017-08-09T07:09:37.632105588Z" + Spec: + $ref: "#/definitions/NodeSpec" + Description: + $ref: "#/definitions/NodeDescription" + Status: + $ref: "#/definitions/NodeStatus" + ManagerStatus: + $ref: "#/definitions/ManagerStatus" + + NodeDescription: + description: | + NodeDescription encapsulates the properties of the Node as reported by the + agent. + type: "object" + properties: + Hostname: + type: "string" + example: "bf3067039e47" + Platform: + $ref: "#/definitions/Platform" + Resources: + $ref: "#/definitions/ResourceObject" + Engine: + $ref: "#/definitions/EngineDescription" + TLSInfo: + $ref: "#/definitions/TLSInfo" + + Platform: + description: | + Platform represents the platform (Arch/OS). + type: "object" + properties: + Architecture: + description: | + Architecture represents the hardware architecture (for example, + `x86_64`). + type: "string" + example: "x86_64" + OS: + description: | + OS represents the Operating System (for example, `linux` or `windows`). + type: "string" + example: "linux" + + EngineDescription: + description: "EngineDescription provides information about an engine." + type: "object" + properties: + EngineVersion: + type: "string" + example: "17.06.0" + Labels: + type: "object" + additionalProperties: + type: "string" + example: + foo: "bar" + Plugins: + type: "array" + items: + type: "object" + properties: + Type: + type: "string" + Name: + type: "string" + example: + - Type: "Log" + Name: "awslogs" + - Type: "Log" + Name: "fluentd" + - Type: "Log" + Name: "gcplogs" + - Type: "Log" + Name: "gelf" + - Type: "Log" + Name: "journald" + - Type: "Log" + Name: "json-file" + - Type: "Log" + Name: "splunk" + - Type: "Log" + Name: "syslog" + - Type: "Network" + Name: "bridge" + - Type: "Network" + Name: "host" + - Type: "Network" + Name: "ipvlan" + - Type: "Network" + Name: "macvlan" + - Type: "Network" + Name: "null" + - Type: "Network" + Name: "overlay" + - Type: "Volume" + Name: "local" + - Type: "Volume" + Name: "localhost:5000/vieux/sshfs:latest" + - Type: "Volume" + Name: "vieux/sshfs:latest" + + TLSInfo: + description: | + Information about the issuer of leaf TLS certificates and the trusted root + CA certificate. + type: "object" + properties: + TrustRoot: + description: | + The root CA certificate(s) that are used to validate leaf TLS + certificates. + type: "string" + CertIssuerSubject: + description: + The base64-url-safe-encoded raw subject bytes of the issuer. + type: "string" + CertIssuerPublicKey: + description: | + The base64-url-safe-encoded raw public key bytes of the issuer. + type: "string" + example: + TrustRoot: | + -----BEGIN CERTIFICATE----- + MIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw + EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0 + MzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH + A0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf + 3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB + Af8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO + PQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz + pxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H + -----END CERTIFICATE----- + CertIssuerSubject: "MBMxETAPBgNVBAMTCHN3YXJtLWNh" + CertIssuerPublicKey: "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" + + NodeStatus: + description: | + NodeStatus represents the status of a node. + + It provides the current status of the node, as seen by the manager. + type: "object" + properties: + State: + $ref: "#/definitions/NodeState" + Message: + type: "string" + example: "" + Addr: + description: "IP address of the node." + type: "string" + example: "172.17.0.2" + + NodeState: + description: "NodeState represents the state of a node." + type: "string" + enum: + - "unknown" + - "down" + - "ready" + - "disconnected" + example: "ready" + + ManagerStatus: + description: | + ManagerStatus represents the status of a manager. + + It provides the current status of a node's manager component, if the node + is a manager. + x-nullable: true + type: "object" + properties: + Leader: + type: "boolean" + default: false + example: true + Reachability: + $ref: "#/definitions/Reachability" + Addr: + description: | + The IP address and port at which the manager is reachable. + type: "string" + example: "10.0.0.46:2377" + + Reachability: + description: "Reachability represents the reachability of a node." + type: "string" + enum: + - "unknown" + - "unreachable" + - "reachable" + example: "reachable" + + SwarmSpec: + description: "User modifiable swarm configuration." + type: "object" + properties: + Name: + description: "Name of the swarm." + type: "string" + example: "default" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.corp.type: "production" + com.example.corp.department: "engineering" + Orchestration: + description: "Orchestration configuration." + type: "object" + x-nullable: true + properties: + TaskHistoryRetentionLimit: + description: | + The number of historic tasks to keep per instance or node. If + negative, never remove completed or failed tasks. + type: "integer" + format: "int64" + example: 10 + Raft: + description: "Raft configuration." + type: "object" + properties: + SnapshotInterval: + description: "The number of log entries between snapshots." + type: "integer" + format: "uint64" + example: 10000 + KeepOldSnapshots: + description: | + The number of snapshots to keep beyond the current snapshot. + type: "integer" + format: "uint64" + LogEntriesForSlowFollowers: + description: | + The number of log entries to keep around to sync up slow followers + after a snapshot is created. + type: "integer" + format: "uint64" + example: 500 + ElectionTick: + description: | + The number of ticks that a follower will wait for a message from + the leader before becoming a candidate and starting an election. + `ElectionTick` must be greater than `HeartbeatTick`. + + A tick currently defaults to one second, so these translate + directly to seconds currently, but this is NOT guaranteed. + type: "integer" + example: 3 + HeartbeatTick: + description: | + The number of ticks between heartbeats. Every HeartbeatTick ticks, + the leader will send a heartbeat to the followers. + + A tick currently defaults to one second, so these translate + directly to seconds currently, but this is NOT guaranteed. + type: "integer" + example: 1 + Dispatcher: + description: "Dispatcher configuration." + type: "object" + x-nullable: true + properties: + HeartbeatPeriod: + description: | + The delay for an agent to send a heartbeat to the dispatcher. + type: "integer" + format: "int64" + example: 5000000000 + CAConfig: + description: "CA configuration." + type: "object" + x-nullable: true + properties: + NodeCertExpiry: + description: "The duration node certificates are issued for." + type: "integer" + format: "int64" + example: 7776000000000000 + ExternalCAs: + description: | + Configuration for forwarding signing requests to an external + certificate authority. + type: "array" + items: + type: "object" + properties: + Protocol: + description: | + Protocol for communication with the external CA (currently + only `cfssl` is supported). + type: "string" + enum: + - "cfssl" + default: "cfssl" + URL: + description: | + URL where certificate signing requests should be sent. + type: "string" + Options: + description: | + An object with key/value pairs that are interpreted as + protocol-specific options for the external CA driver. + type: "object" + additionalProperties: + type: "string" + CACert: + description: | + The root CA certificate (in PEM format) this external CA uses + to issue TLS certificates (assumed to be to the current swarm + root CA certificate if not provided). + type: "string" + SigningCACert: + description: | + The desired signing CA certificate for all swarm node TLS leaf + certificates, in PEM format. + type: "string" + SigningCAKey: + description: | + The desired signing CA key for all swarm node TLS leaf certificates, + in PEM format. + type: "string" + ForceRotate: + description: | + An integer whose purpose is to force swarm to generate a new + signing CA certificate and key, if none have been specified in + `SigningCACert` and `SigningCAKey` + format: "uint64" + type: "integer" + EncryptionConfig: + description: "Parameters related to encryption-at-rest." + type: "object" + properties: + AutoLockManagers: + description: | + If set, generate a key and use it to lock data stored on the + managers. + type: "boolean" + example: false + TaskDefaults: + description: "Defaults for creating tasks in this cluster." + type: "object" + properties: + LogDriver: + description: | + The log driver to use for tasks created in the orchestrator if + unspecified by a service. + + Updating this value only affects new tasks. Existing tasks continue + to use their previously configured log driver until recreated. + type: "object" + properties: + Name: + description: | + The log driver to use as a default for new tasks. + type: "string" + example: "json-file" + Options: + description: | + Driver-specific options for the selected log driver, specified + as key/value pairs. + type: "object" + additionalProperties: + type: "string" + example: + "max-file": "10" + "max-size": "100m" + + # The Swarm information for `GET /info`. It is the same as `GET /swarm`, but + # without `JoinTokens`. + ClusterInfo: + description: | + ClusterInfo represents information about the swarm as is returned by the + "/info" endpoint. Join-tokens are not included. + x-nullable: true + type: "object" + properties: + ID: + description: "The ID of the swarm." + type: "string" + example: "abajmipo7b4xz5ip2nrla6b11" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + description: | + Date and time at which the swarm was initialised in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2016-08-18T10:44:24.496525531Z" + UpdatedAt: + description: | + Date and time at which the swarm was last updated in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + example: "2017-08-09T07:09:37.632105588Z" + Spec: + $ref: "#/definitions/SwarmSpec" + TLSInfo: + $ref: "#/definitions/TLSInfo" + RootRotationInProgress: + description: | + Whether there is currently a root CA rotation in progress for the swarm + type: "boolean" + example: false + DataPathPort: + description: | + DataPathPort specifies the data path port number for data traffic. + Acceptable port range is 1024 to 49151. + If no port is set or is set to 0, the default port (4789) is used. + type: "integer" + format: "uint32" + default: 4789 + example: 4789 + DefaultAddrPool: + description: | + Default Address Pool specifies default subnet pools for global scope + networks. + type: "array" + items: + type: "string" + format: "CIDR" + example: ["10.10.0.0/16", "20.20.0.0/16"] + SubnetSize: + description: | + SubnetSize specifies the subnet size of the networks created from the + default subnet pool. + type: "integer" + format: "uint32" + maximum: 29 + default: 24 + example: 24 + + JoinTokens: + description: | + JoinTokens contains the tokens workers and managers need to join the swarm. + type: "object" + properties: + Worker: + description: | + The token workers can use to join the swarm. + type: "string" + example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + Manager: + description: | + The token managers can use to join the swarm. + type: "string" + example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + + Swarm: + type: "object" + allOf: + - $ref: "#/definitions/ClusterInfo" + - type: "object" + properties: + JoinTokens: + $ref: "#/definitions/JoinTokens" + + TaskSpec: + description: "User modifiable task configuration." + type: "object" + properties: + PluginSpec: + type: "object" + description: | + Plugin spec for the service. *(Experimental release only.)* + +


+ + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + properties: + Name: + description: "The name or 'alias' to use for the plugin." + type: "string" + Remote: + description: "The plugin image reference to use." + type: "string" + Disabled: + description: "Disable the plugin once scheduled." + type: "boolean" + PluginPrivilege: + type: "array" + items: + $ref: "#/definitions/PluginPrivilege" + ContainerSpec: + type: "object" + description: | + Container spec for the service. + +


+ + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + properties: + Image: + description: "The image name to use for the container" + type: "string" + Labels: + description: "User-defined key/value data." + type: "object" + additionalProperties: + type: "string" + Command: + description: "The command to be run in the image." + type: "array" + items: + type: "string" + Args: + description: "Arguments to the command." + type: "array" + items: + type: "string" + Hostname: + description: | + The hostname to use for the container, as a valid + [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. + type: "string" + Env: + description: | + A list of environment variables in the form `VAR=value`. + type: "array" + items: + type: "string" + Dir: + description: "The working directory for commands to run in." + type: "string" + User: + description: "The user inside the container." + type: "string" + Groups: + type: "array" + description: | + A list of additional groups that the container process will run as. + items: + type: "string" + Privileges: + type: "object" + description: "Security options for the container" + properties: + CredentialSpec: + type: "object" + description: "CredentialSpec for managed service account (Windows only)" + properties: + Config: + type: "string" + example: "0bt9dmxjvjiqermk6xrop3ekq" + description: | + Load credential spec from a Swarm Config with the given ID. + The specified config must also be present in the Configs + field with the Runtime property set. + +


+ + + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + File: + type: "string" + example: "spec.json" + description: | + Load credential spec from this file. The file is read by + the daemon, and must be present in the `CredentialSpecs` + subdirectory in the docker data directory, which defaults + to `C:\ProgramData\Docker\` on Windows. + + For example, specifying `spec.json` loads + `C:\ProgramData\Docker\CredentialSpecs\spec.json`. + +


+ + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + Registry: + type: "string" + description: | + Load credential spec from this value in the Windows + registry. The specified registry value must be located in: + + `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` + +


+ + + > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, + > and `CredentialSpec.Config` are mutually exclusive. + SELinuxContext: + type: "object" + description: "SELinux labels of the container" + properties: + Disable: + type: "boolean" + description: "Disable SELinux" + User: + type: "string" + description: "SELinux user label" + Role: + type: "string" + description: "SELinux role label" + Type: + type: "string" + description: "SELinux type label" + Level: + type: "string" + description: "SELinux level label" + Seccomp: + type: "object" + description: "Options for configuring seccomp on the container" + properties: + Mode: + type: "string" + enum: + - "default" + - "unconfined" + - "custom" + Profile: + description: "The custom seccomp profile as a json object" + type: "string" + AppArmor: + type: "object" + description: "Options for configuring AppArmor on the container" + properties: + Mode: + type: "string" + enum: + - "default" + - "disabled" + NoNewPrivileges: + type: "boolean" + description: "Configuration of the no_new_privs bit in the container" + + TTY: + description: "Whether a pseudo-TTY should be allocated." + type: "boolean" + OpenStdin: + description: "Open `stdin`" + type: "boolean" + ReadOnly: + description: "Mount the container's root filesystem as read only." + type: "boolean" + Mounts: + description: | + Specification for mounts to be added to containers created as part + of the service. + type: "array" + items: + $ref: "#/definitions/Mount" + StopSignal: + description: "Signal to stop the container." + type: "string" + StopGracePeriod: + description: | + Amount of time to wait for the container to terminate before + forcefully killing it. + type: "integer" + format: "int64" + Healthcheck: + $ref: "#/definitions/HealthConfig" + Hosts: + type: "array" + description: | + A list of hostname/IP mappings to add to the container's `hosts` + file. The format of extra hosts is specified in the + [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) + man page: + + IP_address canonical_hostname [aliases...] + items: + type: "string" + DNSConfig: + description: | + Specification for DNS related configurations in resolver configuration + file (`resolv.conf`). + type: "object" + properties: + Nameservers: + description: "The IP addresses of the name servers." + type: "array" + items: + type: "string" + Search: + description: "A search list for host-name lookup." + type: "array" + items: + type: "string" + Options: + description: | + A list of internal resolver variables to be modified (e.g., + `debug`, `ndots:3`, etc.). + type: "array" + items: + type: "string" + Secrets: + description: | + Secrets contains references to zero or more secrets that will be + exposed to the service. + type: "array" + items: + type: "object" + properties: + File: + description: | + File represents a specific target that is backed by a file. + type: "object" + properties: + Name: + description: | + Name represents the final filename in the filesystem. + type: "string" + UID: + description: "UID represents the file UID." + type: "string" + GID: + description: "GID represents the file GID." + type: "string" + Mode: + description: "Mode represents the FileMode of the file." + type: "integer" + format: "uint32" + SecretID: + description: | + SecretID represents the ID of the specific secret that we're + referencing. + type: "string" + SecretName: + description: | + SecretName is the name of the secret that this references, + but this is just provided for lookup/display purposes. The + secret in the reference will be identified by its ID. + type: "string" + OomScoreAdj: + type: "integer" + format: "int64" + description: | + An integer value containing the score given to the container in + order to tune OOM killer preferences. + example: 0 + Configs: + description: | + Configs contains references to zero or more configs that will be + exposed to the service. + type: "array" + items: + type: "object" + properties: + File: + description: | + File represents a specific target that is backed by a file. + +


+ + > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive + type: "object" + properties: + Name: + description: | + Name represents the final filename in the filesystem. + type: "string" + UID: + description: "UID represents the file UID." + type: "string" + GID: + description: "GID represents the file GID." + type: "string" + Mode: + description: "Mode represents the FileMode of the file." + type: "integer" + format: "uint32" + Runtime: + description: | + Runtime represents a target that is not mounted into the + container but is used by the task + +


+ + > **Note**: `Configs.File` and `Configs.Runtime` are mutually + > exclusive + type: "object" + ConfigID: + description: | + ConfigID represents the ID of the specific config that we're + referencing. + type: "string" + ConfigName: + description: | + ConfigName is the name of the config that this references, + but this is just provided for lookup/display purposes. The + config in the reference will be identified by its ID. + type: "string" + Isolation: + type: "string" + description: | + Isolation technology of the containers running the service. + (Windows only) + enum: + - "default" + - "process" + - "hyperv" + - "" + Init: + description: | + Run an init inside the container that forwards signals and reaps + processes. This field is omitted if empty, and the default (as + configured on the daemon) is used. + type: "boolean" + x-nullable: true + Sysctls: + description: | + Set kernel namedspaced parameters (sysctls) in the container. + The Sysctls option on services accepts the same sysctls as the + are supported on containers. Note that while the same sysctls are + supported, no guarantees or checks are made about their + suitability for a clustered environment, and it's up to the user + to determine whether a given sysctl will work properly in a + Service. + type: "object" + additionalProperties: + type: "string" + # This option is not used by Windows containers + CapabilityAdd: + type: "array" + description: | + A list of kernel capabilities to add to the default set + for the container. + items: + type: "string" + example: + - "CAP_NET_RAW" + - "CAP_SYS_ADMIN" + - "CAP_SYS_CHROOT" + - "CAP_SYSLOG" + CapabilityDrop: + type: "array" + description: | + A list of kernel capabilities to drop from the default set + for the container. + items: + type: "string" + example: + - "CAP_NET_RAW" + Ulimits: + description: | + A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`" + type: "array" + items: + type: "object" + properties: + Name: + description: "Name of ulimit" + type: "string" + Soft: + description: "Soft limit" + type: "integer" + Hard: + description: "Hard limit" + type: "integer" + NetworkAttachmentSpec: + description: | + Read-only spec type for non-swarm containers attached to swarm overlay + networks. + +


+ + > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are + > mutually exclusive. PluginSpec is only used when the Runtime field + > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime + > field is set to `attachment`. + type: "object" + properties: + ContainerID: + description: "ID of the container represented by this task" + type: "string" + Resources: + description: | + Resource requirements which apply to each individual container created + as part of the service. + type: "object" + properties: + Limits: + description: "Define resources limits." + $ref: "#/definitions/Limit" + Reservations: + description: "Define resources reservation." + $ref: "#/definitions/ResourceObject" + SwapBytes: + description: | + Amount of swap in bytes - can only be used together with a memory limit. + If not specified, the default behaviour is to grant a swap space twice + as big as the memory limit. + Set to -1 to enable unlimited swap. + type: "integer" + format: "int64" + minimum: -1 + x-nullable: true + x-omitempty: true + MemorySwappiness: + description: | + Tune the service's containers' memory swappiness (0 to 100). + If not specified, defaults to the containers' OS' default, generally 60, + or whatever value was predefined in the image. + Set to -1 to unset a previously set value. + type: "integer" + format: "int64" + minimum: -1 + maximum: 100 + x-nullable: true + x-omitempty: true + RestartPolicy: + description: | + Specification for the restart policy which applies to containers + created as part of this service. + type: "object" + properties: + Condition: + description: "Condition for restart." + type: "string" + enum: + - "none" + - "on-failure" + - "any" + Delay: + description: "Delay between restart attempts." + type: "integer" + format: "int64" + MaxAttempts: + description: | + Maximum attempts to restart a given container before giving up + (default value is 0, which is ignored). + type: "integer" + format: "int64" + default: 0 + Window: + description: | + Windows is the time window used to evaluate the restart policy + (default value is 0, which is unbounded). + type: "integer" + format: "int64" + default: 0 + Placement: + type: "object" + properties: + Constraints: + description: | + An array of constraint expressions to limit the set of nodes where + a task can be scheduled. Constraint expressions can either use a + _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find + nodes that satisfy every expression (AND match). Constraints can + match node or Docker Engine labels as follows: + + node attribute | matches | example + ---------------------|--------------------------------|----------------------------------------------- + `node.id` | Node ID | `node.id==2ivku8v2gvtg4` + `node.hostname` | Node hostname | `node.hostname!=node-2` + `node.role` | Node role (`manager`/`worker`) | `node.role==manager` + `node.platform.os` | Node operating system | `node.platform.os==windows` + `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` + `node.labels` | User-defined node labels | `node.labels.security==high` + `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04` + + `engine.labels` apply to Docker Engine labels like operating system, + drivers, etc. Swarm administrators add `node.labels` for operational + purposes by using the [`node update endpoint`](#operation/NodeUpdate). + + type: "array" + items: + type: "string" + example: + - "node.hostname!=node3.corp.example.com" + - "node.role!=manager" + - "node.labels.type==production" + - "node.platform.os==linux" + - "node.platform.arch==x86_64" + Preferences: + description: | + Preferences provide a way to make the scheduler aware of factors + such as topology. They are provided in order from highest to + lowest precedence. + type: "array" + items: + type: "object" + properties: + Spread: + type: "object" + properties: + SpreadDescriptor: + description: | + label descriptor, such as `engine.labels.az`. + type: "string" + example: + - Spread: + SpreadDescriptor: "node.labels.datacenter" + - Spread: + SpreadDescriptor: "node.labels.rack" + MaxReplicas: + description: | + Maximum number of replicas for per node (default value is 0, which + is unlimited) + type: "integer" + format: "int64" + default: 0 + Platforms: + description: | + Platforms stores all the platforms that the service's image can + run on. This field is used in the platform filter for scheduling. + If empty, then the platform filter is off, meaning there are no + scheduling restrictions. + type: "array" + items: + $ref: "#/definitions/Platform" + ForceUpdate: + description: | + A counter that triggers an update even if no relevant parameters have + been changed. + type: "integer" + format: "uint64" + Runtime: + description: | + Runtime is the type of runtime specified for the task executor. + type: "string" + Networks: + description: "Specifies which networks the service should attach to." + type: "array" + items: + $ref: "#/definitions/NetworkAttachmentConfig" + LogDriver: + description: | + Specifies the log driver to use for tasks created from this spec. If + not present, the default one for the swarm will be used, finally + falling back to the engine default if not specified. + type: "object" + properties: + Name: + type: "string" + Options: + type: "object" + additionalProperties: + type: "string" + + TaskState: + type: "string" + enum: + - "new" + - "allocated" + - "pending" + - "assigned" + - "accepted" + - "preparing" + - "ready" + - "starting" + - "running" + - "complete" + - "shutdown" + - "failed" + - "rejected" + - "remove" + - "orphaned" + + ContainerStatus: + type: "object" + description: "represents the status of a container." + properties: + ContainerID: + type: "string" + PID: + type: "integer" + ExitCode: + type: "integer" + + PortStatus: + type: "object" + description: "represents the port status of a task's host ports whose service has published host ports" + properties: + Ports: + type: "array" + items: + $ref: "#/definitions/EndpointPortConfig" + + TaskStatus: + type: "object" + description: "represents the status of a task." + properties: + Timestamp: + type: "string" + format: "dateTime" + State: + $ref: "#/definitions/TaskState" + Message: + type: "string" + Err: + type: "string" + ContainerStatus: + $ref: "#/definitions/ContainerStatus" + PortStatus: + $ref: "#/definitions/PortStatus" + + NetworkAttachment: + description: | + Specifies how a task is attached to a network, and the addresses the + task was assigned on that network. + type: "object" + properties: + Network: + $ref: "#/definitions/Network" + Addresses: + description: | + The IP addresses (in CIDR notation) assigned to the task on this + network. To maintain backward compatibility this field accepts CIDR + notation, but only the IP address is used. + type: "array" + items: + type: "string" + format: "cidr" + example: + Network: + ID: "4qvuz4ko70xaltuqbt8956gd1" + Addresses: + - "10.255.0.10/16" + + Task: + type: "object" + properties: + ID: + description: "The ID of the task." + type: "string" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + type: "string" + format: "dateTime" + UpdatedAt: + type: "string" + format: "dateTime" + Name: + description: "Name of the task." + type: "string" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + Spec: + $ref: "#/definitions/TaskSpec" + ServiceID: + description: "The ID of the service this task is part of." + type: "string" + Slot: + type: "integer" + NodeID: + description: "The ID of the node that this task is on." + type: "string" + AssignedGenericResources: + $ref: "#/definitions/GenericResources" + Status: + $ref: "#/definitions/TaskStatus" + DesiredState: + $ref: "#/definitions/TaskState" + JobIteration: + description: | + If the Service this Task belongs to is a job-mode service, contains + the JobIteration of the Service this Task was created for. Absent if + the Task was created for a Replicated or Global Service. + $ref: "#/definitions/ObjectVersion" + NetworksAttachments: + description: | + The networks that this task is attached to, and the addresses the + task was assigned on each of them. + type: "array" + items: + $ref: "#/definitions/NetworkAttachment" + example: + ID: "0kzzo1i0y4jz6027t0k7aezc7" + Version: + Index: 71 + CreatedAt: "2016-06-07T21:07:31.171892745Z" + UpdatedAt: "2016-06-07T21:07:31.376370513Z" + Spec: + ContainerSpec: + Image: "redis" + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: "any" + MaxAttempts: 0 + Placement: {} + ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" + Slot: 1 + NodeID: "60gvrl6tm78dmak4yl7srz94v" + Status: + Timestamp: "2016-06-07T21:07:31.290032978Z" + State: "running" + Message: "started" + ContainerStatus: + ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035" + PID: 677 + DesiredState: "running" + NetworksAttachments: + - Network: + ID: "4qvuz4ko70xaltuqbt8956gd1" + Version: + Index: 18 + CreatedAt: "2016-06-07T20:31:11.912919752Z" + UpdatedAt: "2016-06-07T21:07:29.955277358Z" + Spec: + Name: "ingress" + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + DriverState: + Name: "overlay" + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: "default" + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + Addresses: + - "10.255.0.10/16" + AssignedGenericResources: + - DiscreteResourceSpec: + Kind: "SSD" + Value: 3 + - NamedResourceSpec: + Kind: "GPU" + Value: "UUID1" + - NamedResourceSpec: + Kind: "GPU" + Value: "UUID2" + + ServiceSpec: + description: "User modifiable configuration for a service." + type: object + properties: + Name: + description: "Name of the service." + type: "string" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + TaskTemplate: + $ref: "#/definitions/TaskSpec" + Mode: + description: "Scheduling mode for the service." + type: "object" + properties: + Replicated: + type: "object" + properties: + Replicas: + type: "integer" + format: "int64" + Global: + type: "object" + ReplicatedJob: + description: | + The mode used for services with a finite number of tasks that run + to a completed state. + type: "object" + properties: + MaxConcurrent: + description: | + The maximum number of replicas to run simultaneously. + type: "integer" + format: "int64" + default: 1 + TotalCompletions: + description: | + The total number of replicas desired to reach the Completed + state. If unset, will default to the value of `MaxConcurrent` + type: "integer" + format: "int64" + GlobalJob: + description: | + The mode used for services which run a task to the completed state + on each valid node. + type: "object" + UpdateConfig: + description: "Specification for the update strategy of the service." + type: "object" + properties: + Parallelism: + description: | + Maximum number of tasks to be updated in one iteration (0 means + unlimited parallelism). + type: "integer" + format: "int64" + Delay: + description: "Amount of time between updates, in nanoseconds." + type: "integer" + format: "int64" + FailureAction: + description: | + Action to take if an updated task fails to run, or stops running + during the update. + type: "string" + enum: + - "continue" + - "pause" + - "rollback" + Monitor: + description: | + Amount of time to monitor each updated task for failures, in + nanoseconds. + type: "integer" + format: "int64" + MaxFailureRatio: + description: | + The fraction of tasks that may fail during an update before the + failure action is invoked, specified as a floating point number + between 0 and 1. + type: "number" + default: 0 + Order: + description: | + The order of operations when rolling out an updated task. Either + the old task is shut down before the new task is started, or the + new task is started before the old task is shut down. + type: "string" + enum: + - "stop-first" + - "start-first" + RollbackConfig: + description: "Specification for the rollback strategy of the service." + type: "object" + properties: + Parallelism: + description: | + Maximum number of tasks to be rolled back in one iteration (0 means + unlimited parallelism). + type: "integer" + format: "int64" + Delay: + description: | + Amount of time between rollback iterations, in nanoseconds. + type: "integer" + format: "int64" + FailureAction: + description: | + Action to take if an rolled back task fails to run, or stops + running during the rollback. + type: "string" + enum: + - "continue" + - "pause" + Monitor: + description: | + Amount of time to monitor each rolled back task for failures, in + nanoseconds. + type: "integer" + format: "int64" + MaxFailureRatio: + description: | + The fraction of tasks that may fail during a rollback before the + failure action is invoked, specified as a floating point number + between 0 and 1. + type: "number" + default: 0 + Order: + description: | + The order of operations when rolling back a task. Either the old + task is shut down before the new task is started, or the new task + is started before the old task is shut down. + type: "string" + enum: + - "stop-first" + - "start-first" + Networks: + description: | + Specifies which networks the service should attach to. + + Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. + type: "array" + items: + $ref: "#/definitions/NetworkAttachmentConfig" + + EndpointSpec: + $ref: "#/definitions/EndpointSpec" + + EndpointPortConfig: + type: "object" + properties: + Name: + type: "string" + Protocol: + type: "string" + enum: + - "tcp" + - "udp" + - "sctp" + TargetPort: + description: "The port inside the container." + type: "integer" + PublishedPort: + description: "The port on the swarm hosts." + type: "integer" + PublishMode: + description: | + The mode in which port is published. + +


+ + - "ingress" makes the target port accessible on every node, + regardless of whether there is a task for the service running on + that node or not. + - "host" bypasses the routing mesh and publish the port directly on + the swarm node where that service is running. + + type: "string" + enum: + - "ingress" + - "host" + default: "ingress" + example: "ingress" + + EndpointSpec: + description: "Properties that can be configured to access and load balance a service." + type: "object" + properties: + Mode: + description: | + The mode of resolution to use for internal load balancing between tasks. + type: "string" + enum: + - "vip" + - "dnsrr" + default: "vip" + Ports: + description: | + List of exposed ports that this service is accessible on from the + outside. Ports can only be provided if `vip` resolution mode is used. + type: "array" + items: + $ref: "#/definitions/EndpointPortConfig" + + Service: + type: "object" + properties: + ID: + type: "string" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + type: "string" + format: "dateTime" + UpdatedAt: + type: "string" + format: "dateTime" + Spec: + $ref: "#/definitions/ServiceSpec" + Endpoint: + type: "object" + properties: + Spec: + $ref: "#/definitions/EndpointSpec" + Ports: + type: "array" + items: + $ref: "#/definitions/EndpointPortConfig" + VirtualIPs: + type: "array" + items: + type: "object" + properties: + NetworkID: + type: "string" + Addr: + type: "string" + UpdateStatus: + description: "The status of a service update." + type: "object" + properties: + State: + type: "string" + enum: + - "updating" + - "paused" + - "completed" + StartedAt: + type: "string" + format: "dateTime" + CompletedAt: + type: "string" + format: "dateTime" + Message: + type: "string" + ServiceStatus: + description: | + The status of the service's tasks. Provided only when requested as + part of a ServiceList operation. + type: "object" + properties: + RunningTasks: + description: | + The number of tasks for the service currently in the Running state. + type: "integer" + format: "uint64" + example: 7 + DesiredTasks: + description: | + The number of tasks for the service desired to be running. + For replicated services, this is the replica count from the + service spec. For global services, this is computed by taking + count of all tasks for the service with a Desired State other + than Shutdown. + type: "integer" + format: "uint64" + example: 10 + CompletedTasks: + description: | + The number of tasks for a job that are in the Completed state. + This field must be cross-referenced with the service type, as the + value of 0 may mean the service is not in a job mode, or it may + mean the job-mode service has no tasks yet Completed. + type: "integer" + format: "uint64" + JobStatus: + description: | + The status of the service when it is in one of ReplicatedJob or + GlobalJob modes. Absent on Replicated and Global mode services. The + JobIteration is an ObjectVersion, but unlike the Service's version, + does not need to be sent with an update request. + type: "object" + properties: + JobIteration: + description: | + JobIteration is a value increased each time a Job is executed, + successfully or otherwise. "Executed", in this case, means the + job as a whole has been started, not that an individual Task has + been launched. A job is "Executed" when its ServiceSpec is + updated. JobIteration can be used to disambiguate Tasks belonging + to different executions of a job. Though JobIteration will + increase with each subsequent execution, it may not necessarily + increase by 1, and so JobIteration should not be used to + $ref: "#/definitions/ObjectVersion" + LastExecution: + description: | + The last time, as observed by the server, that this job was + started. + type: "string" + format: "dateTime" + example: + ID: "9mnpnzenvg8p8tdbtq4wvbkcz" + Version: + Index: 19 + CreatedAt: "2016-06-07T21:05:51.880065305Z" + UpdatedAt: "2016-06-07T21:07:29.962229872Z" + Spec: + Name: "hopeful_cori" + TaskTemplate: + ContainerSpec: + Image: "redis" + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: "any" + MaxAttempts: 0 + Placement: {} + ForceUpdate: 0 + Mode: + Replicated: + Replicas: 1 + UpdateConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Mode: "vip" + Ports: + - + Protocol: "tcp" + TargetPort: 6379 + PublishedPort: 30001 + Endpoint: + Spec: + Mode: "vip" + Ports: + - + Protocol: "tcp" + TargetPort: 6379 + PublishedPort: 30001 + Ports: + - + Protocol: "tcp" + TargetPort: 6379 + PublishedPort: 30001 + VirtualIPs: + - + NetworkID: "4qvuz4ko70xaltuqbt8956gd1" + Addr: "10.255.0.2/16" + - + NetworkID: "4qvuz4ko70xaltuqbt8956gd1" + Addr: "10.255.0.3/16" + + ImageDeleteResponseItem: + type: "object" + x-go-name: "DeleteResponse" + properties: + Untagged: + description: "The image ID of an image that was untagged" + type: "string" + Deleted: + description: "The image ID of an image that was deleted" + type: "string" + + ServiceCreateResponse: + type: "object" + description: | + contains the information returned to a client on the + creation of a new service. + properties: + ID: + description: "The ID of the created service." + type: "string" + x-nullable: false + example: "ak7w3gjqoa3kuz8xcpnyy0pvl" + Warnings: + description: | + Optional warning message. + + FIXME(thaJeztah): this should have "omitempty" in the generated type. + type: "array" + x-nullable: true + items: + type: "string" + example: + - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + + ServiceUpdateResponse: + type: "object" + properties: + Warnings: + description: "Optional warning messages" + type: "array" + items: + type: "string" + example: + Warnings: + - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + + ContainerInspectResponse: + type: "object" + title: "ContainerInspectResponse" + x-go-name: "InspectResponse" + properties: + Id: + description: |- + The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). + type: "string" + x-go-name: "ID" + minLength: 64 + maxLength: 64 + pattern: "^[0-9a-fA-F]{64}$" + example: "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + Created: + description: |- + Date and time at which the container was created, formatted in + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. + type: "string" + format: "dateTime" + x-nullable: true + example: "2025-02-17T17:43:39.64001363Z" + Path: + description: |- + The path to the command being run + type: "string" + example: "/bin/sh" + Args: + description: "The arguments to the command being run" + type: "array" + items: + type: "string" + example: + - "-c" + - "exit 9" + State: + $ref: "#/definitions/ContainerState" + Image: + description: |- + The ID (digest) of the image that this container was created from. + type: "string" + example: "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + ResolvConfPath: + description: |- + Location of the `/etc/resolv.conf` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: "string" + example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf" + HostnamePath: + description: |- + Location of the `/etc/hostname` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: "string" + example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname" + HostsPath: + description: |- + Location of the `/etc/hosts` generated for the container on the + host. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: "string" + example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts" + LogPath: + description: |- + Location of the file used to buffer the container's logs. Depending on + the logging-driver used for the container, this field may be omitted. + + This file is managed through the docker daemon, and should not be + accessed or modified by other tools. + type: "string" + x-nullable: true + example: "/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log" + Name: + description: |- + The name associated with this container. + + For historic reasons, the name may be prefixed with a forward-slash (`/`). + type: "string" + example: "/funny_chatelet" + RestartCount: + description: |- + Number of times the container was restarted since it was created, + or since daemon was started. + type: "integer" + example: 0 + Driver: + description: |- + The storage-driver used for the container's filesystem (graph-driver + or snapshotter). + type: "string" + example: "overlayfs" + Platform: + description: |- + The platform (operating system) for which the container was created. + + This field was introduced for the experimental "LCOW" (Linux Containers + On Windows) features, which has been removed. In most cases, this field + is equal to the host's operating system (`linux` or `windows`). + type: "string" + example: "linux" + ImageManifestDescriptor: + $ref: "#/definitions/OCIDescriptor" + description: |- + OCI descriptor of the platform-specific manifest of the image + the container was created from. + + Note: Only available if the daemon provides a multi-platform + image store. + MountLabel: + description: |- + SELinux mount label set for the container. + type: "string" + example: "" + ProcessLabel: + description: |- + SELinux process label set for the container. + type: "string" + example: "" + AppArmorProfile: + description: |- + The AppArmor profile set for the container. + type: "string" + example: "" + ExecIDs: + description: |- + IDs of exec instances that are running in the container. + type: "array" + items: + type: "string" + x-nullable: true + example: + - "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca" + - "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + HostConfig: + $ref: "#/definitions/HostConfig" + GraphDriver: + $ref: "#/definitions/DriverData" + x-nullable: true + Storage: + $ref: "#/definitions/Storage" + x-nullable: true + SizeRw: + description: |- + The size of files that have been created or changed by this container. + + This field is omitted by default, and only set when size is requested + in the API request. + type: "integer" + format: "int64" + x-nullable: true + example: "122880" + SizeRootFs: + description: |- + The total size of all files in the read-only layers from the image + that the container uses. These layers can be shared between containers. + + This field is omitted by default, and only set when size is requested + in the API request. + type: "integer" + format: "int64" + x-nullable: true + example: "1653948416" + Mounts: + description: |- + List of mounts used by the container. + type: "array" + items: + $ref: "#/definitions/MountPoint" + Config: + $ref: "#/definitions/ContainerConfig" + NetworkSettings: + $ref: "#/definitions/NetworkSettings" + + ContainerSummary: + type: "object" + properties: + Id: + description: |- + The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). + type: "string" + x-go-name: "ID" + minLength: 64 + maxLength: 64 + pattern: "^[0-9a-fA-F]{64}$" + example: "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" + Names: + description: |- + The names associated with this container. Most containers have a single + name, but when using legacy "links", the container can have multiple + names. + + For historic reasons, names are prefixed with a forward-slash (`/`). + type: "array" + items: + type: "string" + example: + - "/funny_chatelet" + Image: + description: |- + The name or ID of the image used to create the container. + + This field shows the image reference as was specified when creating the container, + which can be in its canonical form (e.g., `docker.io/library/ubuntu:latest` + or `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`), + short form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`). + + The content of this field can be updated at runtime if the image used to + create the container is untagged, in which case the field is updated to + contain the the image ID (digest) it was resolved to in its canonical, + non-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`). + type: "string" + example: "docker.io/library/ubuntu:latest" + ImageID: + description: |- + The ID (digest) of the image that this container was created from. + type: "string" + example: "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" + ImageManifestDescriptor: + $ref: "#/definitions/OCIDescriptor" + x-nullable: true + description: | + OCI descriptor of the platform-specific manifest of the image + the container was created from. + + Note: Only available if the daemon provides a multi-platform + image store. + + This field is not populated in the `GET /system/df` endpoint. + Command: + description: "Command to run when starting the container" + type: "string" + example: "/bin/bash" + Created: + description: |- + Date and time at which the container was created as a Unix timestamp + (number of seconds since EPOCH). + type: "integer" + format: "int64" + example: "1739811096" + Ports: + description: |- + Port-mappings for the container. + type: "array" + items: + $ref: "#/definitions/PortSummary" + SizeRw: + description: |- + The size of files that have been created or changed by this container. + + This field is omitted by default, and only set when size is requested + in the API request. + type: "integer" + format: "int64" + x-nullable: true + example: "122880" + SizeRootFs: + description: |- + The total size of all files in the read-only layers from the image + that the container uses. These layers can be shared between containers. + + This field is omitted by default, and only set when size is requested + in the API request. + type: "integer" + format: "int64" + x-nullable: true + example: "1653948416" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.vendor: "Acme" + com.example.license: "GPL" + com.example.version: "1.0" + State: + description: | + The state of this container. + type: "string" + enum: + - "created" + - "running" + - "paused" + - "restarting" + - "exited" + - "removing" + - "dead" + example: "running" + Status: + description: |- + Additional human-readable status of this container (e.g. `Exit 0`) + type: "string" + example: "Up 4 days" + HostConfig: + type: "object" + description: |- + Summary of host-specific runtime information of the container. This + is a reduced set of information in the container's "HostConfig" as + available in the container "inspect" response. + properties: + NetworkMode: + description: |- + Networking mode (`host`, `none`, `container:`) or name of the + primary network the container is using. + + This field is primarily for backward compatibility. The container + can be connected to multiple networks for which information can be + found in the `NetworkSettings.Networks` field, which enumerates + settings per network. + type: "string" + example: "mynetwork" + Annotations: + description: |- + Arbitrary key-value metadata attached to the container. + type: "object" + x-nullable: true + additionalProperties: + type: "string" + example: + io.kubernetes.docker.type: "container" + io.kubernetes.sandbox.id: "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" + NetworkSettings: + description: |- + Summary of the container's network settings + type: "object" + properties: + Networks: + type: "object" + description: |- + Summary of network-settings for each network the container is + attached to. + additionalProperties: + $ref: "#/definitions/EndpointSettings" + Mounts: + type: "array" + description: |- + List of mounts used by the container. + items: + $ref: "#/definitions/MountPoint" + Health: + type: "object" + description: |- + Summary of health status + + Added in v1.52, before that version all container summary not include Health. + After this attribute introduced, it includes containers with no health checks configured, + or containers that are not running with none + properties: + Status: + type: "string" + description: |- + the health status of the container + enum: + - "none" + - "starting" + - "healthy" + - "unhealthy" + example: "healthy" + FailingStreak: + description: "FailingStreak is the number of consecutive failures" + type: "integer" + example: 0 + + ContainersDiskUsage: + type: "object" + x-go-name: "DiskUsage" + x-go-package: "github.com/moby/moby/api/types/container" + description: | + represents system data usage information for container resources. + properties: + ActiveCount: + description: | + Count of active containers. + type: "integer" + format: "int64" + example: 1 + TotalCount: + description: | + Count of all containers. + type: "integer" + format: "int64" + example: 4 + Reclaimable: + description: | + Disk space that can be reclaimed by removing inactive containers. + type: "integer" + format: "int64" + example: 12345678 + TotalSize: + description: | + Disk space in use by containers. + type: "integer" + format: "int64" + example: 98765432 + Items: + description: | + List of container summaries. + type: "array" + x-omitempty: true + items: + x-go-type: + type: Summary + + Driver: + description: "Driver represents a driver (network, logging, secrets)." + type: "object" + required: [Name] + properties: + Name: + description: "Name of the driver." + type: "string" + x-nullable: false + example: "some-driver" + Options: + description: "Key/value map of driver-specific options." + type: "object" + x-nullable: false + additionalProperties: + type: "string" + example: + OptionA: "value for driver-specific option A" + OptionB: "value for driver-specific option B" + + SecretSpec: + type: "object" + properties: + Name: + description: "User-defined name of the secret." + type: "string" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + Data: + description: | + Data is the data to store as a secret, formatted as a standard base64-encoded + ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. + It must be empty if the Driver field is set, in which case the data is + loaded from an external secret store. The maximum allowed size is 500KB, + as defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize). + + This field is only used to _create_ a secret, and is not returned by + other endpoints. + type: "string" + example: "" + Driver: + description: | + Name of the secrets driver used to fetch the secret's value from an + external secret store. + $ref: "#/definitions/Driver" + Templating: + description: | + Templating driver, if applicable + + Templating controls whether and how to evaluate the config payload as + a template. If no driver is set, no templating is used. + $ref: "#/definitions/Driver" + + Secret: + type: "object" + properties: + ID: + type: "string" + example: "blt1owaxmitz71s9v5zh81zun" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + type: "string" + format: "dateTime" + example: "2017-07-20T13:55:28.678958722Z" + UpdatedAt: + type: "string" + format: "dateTime" + example: "2017-07-20T13:55:28.678958722Z" + Spec: + $ref: "#/definitions/SecretSpec" + + ConfigSpec: + type: "object" + properties: + Name: + description: "User-defined name of the config." + type: "string" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + Data: + description: | + Data is the data to store as a config, formatted as a standard base64-encoded + ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string. + The maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize). + type: "string" + Templating: + description: | + Templating driver, if applicable + + Templating controls whether and how to evaluate the config payload as + a template. If no driver is set, no templating is used. + $ref: "#/definitions/Driver" + + Config: + type: "object" + properties: + ID: + type: "string" + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + type: "string" + format: "dateTime" + UpdatedAt: + type: "string" + format: "dateTime" + Spec: + $ref: "#/definitions/ConfigSpec" + + ContainerState: + description: | + ContainerState stores container's running state. It's part of ContainerJSONBase + and will be returned by the "inspect" command. + type: "object" + x-nullable: true + properties: + Status: + description: | + String representation of the container state. Can be one of "created", + "running", "paused", "restarting", "removing", "exited", or "dead". + type: "string" + enum: ["created", "running", "paused", "restarting", "removing", "exited", "dead"] + example: "running" + Running: + description: | + Whether this container is running. + + Note that a running container can be _paused_. The `Running` and `Paused` + booleans are not mutually exclusive: + + When pausing a container (on Linux), the freezer cgroup is used to suspend + all processes in the container. Freezing the process requires the process to + be running. As a result, paused containers are both `Running` _and_ `Paused`. + + Use the `Status` field instead to determine if a container's state is "running". + type: "boolean" + example: true + Paused: + description: "Whether this container is paused." + type: "boolean" + example: false + Restarting: + description: "Whether this container is restarting." + type: "boolean" + example: false + OOMKilled: + description: | + Whether a process within this container has been killed because it ran + out of memory since the container was last started. + type: "boolean" + example: false + Dead: + type: "boolean" + example: false + Pid: + description: "The process ID of this container" + type: "integer" + example: 1234 + ExitCode: + description: "The last exit code of this container" + type: "integer" + example: 0 + Error: + type: "string" + StartedAt: + description: "The time when this container was last started." + type: "string" + example: "2020-01-06T09:06:59.461876391Z" + FinishedAt: + description: "The time when this container last exited." + type: "string" + example: "2020-01-06T09:07:59.461876391Z" + Health: + $ref: "#/definitions/Health" + + ContainerCreateResponse: + description: "OK response to ContainerCreate operation" + type: "object" + title: "ContainerCreateResponse" + x-go-name: "CreateResponse" + required: [Id, Warnings] + properties: + Id: + description: "The ID of the created container" + type: "string" + x-nullable: false + example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + Warnings: + description: "Warnings encountered when creating the container" + type: "array" + x-nullable: false + items: + type: "string" + example: [] + + ContainerUpdateResponse: + type: "object" + title: "ContainerUpdateResponse" + x-go-name: "UpdateResponse" + description: |- + Response for a successful container-update. + properties: + Warnings: + type: "array" + description: |- + Warnings encountered when updating the container. + items: + type: "string" + example: ["Published ports are discarded when using host network mode"] + + ContainerStatsResponse: + description: | + Statistics sample for a container. + type: "object" + x-go-name: "StatsResponse" + title: "ContainerStatsResponse" + properties: + id: + description: | + ID of the container for which the stats were collected. + type: "string" + x-nullable: true + example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + name: + description: | + Name of the container for which the stats were collected. + type: "string" + x-nullable: true + example: "boring_wozniak" + os_type: + description: | + OSType is the OS of the container ("linux" or "windows") to allow + platform-specific handling of stats. + type: "string" + x-nullable: true + example: "linux" + read: + description: | + Date and time at which this sample was collected. + The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + with nano-seconds. + type: "string" + format: "date-time" + example: "2025-01-16T13:55:22.165243637Z" + cpu_stats: + $ref: "#/definitions/ContainerCPUStats" + memory_stats: + $ref: "#/definitions/ContainerMemoryStats" + networks: + description: | + Network statistics for the container per interface. + + This field is omitted if the container has no networking enabled. + x-nullable: true + additionalProperties: + $ref: "#/definitions/ContainerNetworkStats" + example: + eth0: + rx_bytes: 5338 + rx_dropped: 0 + rx_errors: 0 + rx_packets: 36 + tx_bytes: 648 + tx_dropped: 0 + tx_errors: 0 + tx_packets: 8 + eth5: + rx_bytes: 4641 + rx_dropped: 0 + rx_errors: 0 + rx_packets: 26 + tx_bytes: 690 + tx_dropped: 0 + tx_errors: 0 + tx_packets: 9 + pids_stats: + $ref: "#/definitions/ContainerPidsStats" + blkio_stats: + $ref: "#/definitions/ContainerBlkioStats" + num_procs: + description: | + The number of processors on the system. + + This field is Windows-specific and always zero for Linux containers. + type: "integer" + format: "uint32" + example: 16 + storage_stats: + $ref: "#/definitions/ContainerStorageStats" + preread: + description: | + Date and time at which this first sample was collected. This field + is not propagated if the "one-shot" option is set. If the "one-shot" + option is set, this field may be omitted, empty, or set to a default + date (`0001-01-01T00:00:00Z`). + + The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + with nano-seconds. + type: "string" + format: "date-time" + example: "2025-01-16T13:55:21.160452595Z" + precpu_stats: + $ref: "#/definitions/ContainerCPUStats" + + ContainerBlkioStats: + description: | + BlkioStats stores all IO service stats for data read and write. + + This type is Linux-specific and holds many fields that are specific to cgroups v1. + On a cgroup v2 host, all fields other than `io_service_bytes_recursive` + are omitted or `null`. + + This type is only populated on Linux and omitted for Windows containers. + type: "object" + x-go-name: "BlkioStats" + x-nullable: true + properties: + io_service_bytes_recursive: + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_serviced_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_queue_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_service_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_wait_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_merged_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + io_time_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + sectors_recursive: + description: | + This field is only available when using Linux containers with + cgroups v1. It is omitted or `null` when using cgroups v2. + x-nullable: true + type: "array" + items: + $ref: "#/definitions/ContainerBlkioStatEntry" + example: + io_service_bytes_recursive: [ + {"major": 254, "minor": 0, "op": "read", "value": 7593984}, + {"major": 254, "minor": 0, "op": "write", "value": 100} + ] + io_serviced_recursive: null + io_queue_recursive: null + io_service_time_recursive: null + io_wait_time_recursive: null + io_merged_recursive: null + io_time_recursive: null + sectors_recursive: null + + ContainerBlkioStatEntry: + description: | + Blkio stats entry. + + This type is Linux-specific and omitted for Windows containers. + type: "object" + x-go-name: "BlkioStatEntry" + x-nullable: true + properties: + major: + type: "integer" + format: "uint64" + example: 254 + minor: + type: "integer" + format: "uint64" + example: 0 + op: + type: "string" + example: "read" + value: + type: "integer" + format: "uint64" + example: 7593984 + + ContainerCPUStats: + description: | + CPU related info of the container + type: "object" + x-go-name: "CPUStats" + x-nullable: true + properties: + cpu_usage: + $ref: "#/definitions/ContainerCPUUsage" + system_cpu_usage: + description: | + System Usage. + + This field is Linux-specific and omitted for Windows containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 5 + online_cpus: + description: | + Number of online CPUs. + + This field is Linux-specific and omitted for Windows containers. + type: "integer" + format: "uint32" + x-nullable: true + example: 5 + throttling_data: + $ref: "#/definitions/ContainerThrottlingData" + + ContainerCPUUsage: + description: | + All CPU stats aggregated since container inception. + type: "object" + x-go-name: "CPUUsage" + x-nullable: true + properties: + total_usage: + description: | + Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows). + type: "integer" + format: "uint64" + example: 29912000 + percpu_usage: + description: | + Total CPU time (in nanoseconds) consumed per core (Linux). + + This field is Linux-specific when using cgroups v1. It is omitted + when using cgroups v2 and Windows containers. + type: "array" + x-nullable: true + items: + type: "integer" + format: "uint64" + example: 29912000 + + usage_in_kernelmode: + description: | + Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux), + or time spent (in 100's of nanoseconds) by all container processes in + kernel mode (Windows). + + Not populated for Windows containers using Hyper-V isolation. + type: "integer" + format: "uint64" + example: 21994000 + usage_in_usermode: + description: | + Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux), + or time spent (in 100's of nanoseconds) by all container processes in + kernel mode (Windows). + + Not populated for Windows containers using Hyper-V isolation. + type: "integer" + format: "uint64" + example: 7918000 + + ContainerPidsStats: + description: | + PidsStats contains Linux-specific stats of a container's process-IDs (PIDs). + + This type is Linux-specific and omitted for Windows containers. + type: "object" + x-go-name: "PidsStats" + x-nullable: true + properties: + current: + description: | + Current is the number of PIDs in the cgroup. + type: "integer" + format: "uint64" + x-nullable: true + example: 5 + limit: + description: | + Limit is the hard limit on the number of pids in the cgroup. + A "Limit" of 0 means that there is no limit. + type: "integer" + format: "uint64" + x-nullable: true + example: "18446744073709551615" + + ContainerThrottlingData: + description: | + CPU throttling stats of the container. + + This type is Linux-specific and omitted for Windows containers. + type: "object" + x-go-name: "ThrottlingData" + x-nullable: true + properties: + periods: + description: | + Number of periods with throttling active. + type: "integer" + format: "uint64" + example: 0 + throttled_periods: + description: | + Number of periods when the container hit its throttling limit. + type: "integer" + format: "uint64" + example: 0 + throttled_time: + description: | + Aggregated time (in nanoseconds) the container was throttled for. + type: "integer" + format: "uint64" + example: 0 + + ContainerMemoryStats: + description: | + Aggregates all memory stats since container inception on Linux. + Windows returns stats for commit and private working set only. + type: "object" + x-go-name: "MemoryStats" + properties: + usage: + description: | + Current `res_counter` usage for memory. + + This field is Linux-specific and omitted for Windows containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + max_usage: + description: | + Maximum usage ever recorded. + + This field is Linux-specific and only supported on cgroups v1. + It is omitted when using cgroups v2 and for Windows containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + stats: + description: | + All the stats exported via memory.stat. + + The fields in this object differ between cgroups v1 and v2. + On cgroups v1, fields such as `cache`, `rss`, `mapped_file` are available. + On cgroups v2, fields such as `file`, `anon`, `inactive_file` are available. + + This field is Linux-specific and omitted for Windows containers. + type: "object" + additionalProperties: + type: "integer" + format: "uint64" + x-nullable: true + example: + { + "active_anon": 1572864, + "active_file": 5115904, + "anon": 1572864, + "anon_thp": 0, + "file": 7626752, + "file_dirty": 0, + "file_mapped": 2723840, + "file_writeback": 0, + "inactive_anon": 0, + "inactive_file": 2510848, + "kernel_stack": 16384, + "pgactivate": 0, + "pgdeactivate": 0, + "pgfault": 2042, + "pglazyfree": 0, + "pglazyfreed": 0, + "pgmajfault": 45, + "pgrefill": 0, + "pgscan": 0, + "pgsteal": 0, + "shmem": 0, + "slab": 1180928, + "slab_reclaimable": 725576, + "slab_unreclaimable": 455352, + "sock": 0, + "thp_collapse_alloc": 0, + "thp_fault_alloc": 1, + "unevictable": 0, + "workingset_activate": 0, + "workingset_nodereclaim": 0, + "workingset_refault": 0 + } + failcnt: + description: | + Number of times memory usage hits limits. + + This field is Linux-specific and only supported on cgroups v1. + It is omitted when using cgroups v2 and for Windows containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + limit: + description: | + This field is Linux-specific and omitted for Windows containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 8217579520 + commitbytes: + description: | + Committed bytes. + + This field is Windows-specific and omitted for Linux containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + commitpeakbytes: + description: | + Peak committed bytes. + + This field is Windows-specific and omitted for Linux containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + privateworkingset: + description: | + Private working set. + + This field is Windows-specific and omitted for Linux containers. + type: "integer" + format: "uint64" + x-nullable: true + example: 0 + + ContainerNetworkStats: + description: | + Aggregates the network stats of one container + type: "object" + x-go-name: "NetworkStats" + x-nullable: true + properties: + rx_bytes: + description: | + Bytes received. Windows and Linux. + type: "integer" + format: "uint64" + example: 5338 + rx_packets: + description: | + Packets received. Windows and Linux. + type: "integer" + format: "uint64" + example: 36 + rx_errors: + description: | + Received errors. Not used on Windows. + + This field is Linux-specific and always zero for Windows containers. + type: "integer" + format: "uint64" + example: 0 + rx_dropped: + description: | + Incoming packets dropped. Windows and Linux. + type: "integer" + format: "uint64" + example: 0 + tx_bytes: + description: | + Bytes sent. Windows and Linux. + type: "integer" + format: "uint64" + example: 1200 + tx_packets: + description: | + Packets sent. Windows and Linux. + type: "integer" + format: "uint64" + example: 12 + tx_errors: + description: | + Sent errors. Not used on Windows. + + This field is Linux-specific and always zero for Windows containers. + type: "integer" + format: "uint64" + example: 0 + tx_dropped: + description: | + Outgoing packets dropped. Windows and Linux. + type: "integer" + format: "uint64" + example: 0 + endpoint_id: + description: | + Endpoint ID. Not used on Linux. + + This field is Windows-specific and omitted for Linux containers. + type: "string" + x-nullable: true + instance_id: + description: | + Instance ID. Not used on Linux. + + This field is Windows-specific and omitted for Linux containers. + type: "string" + x-nullable: true + + ContainerStorageStats: + description: | + StorageStats is the disk I/O stats for read/write on Windows. + + This type is Windows-specific and omitted for Linux containers. + type: "object" + x-go-name: "StorageStats" + x-nullable: true + properties: + read_count_normalized: + type: "integer" + format: "uint64" + x-nullable: true + example: 7593984 + read_size_bytes: + type: "integer" + format: "uint64" + x-nullable: true + example: 7593984 + write_count_normalized: + type: "integer" + format: "uint64" + x-nullable: true + example: 7593984 + write_size_bytes: + type: "integer" + format: "uint64" + x-nullable: true + example: 7593984 + + ContainerTopResponse: + type: "object" + x-go-name: "TopResponse" + title: "ContainerTopResponse" + description: |- + Container "top" response. + properties: + Titles: + description: "The ps column titles" + type: "array" + items: + type: "string" + example: + Titles: + - "UID" + - "PID" + - "PPID" + - "C" + - "STIME" + - "TTY" + - "TIME" + - "CMD" + Processes: + description: |- + Each process running in the container, where each process + is an array of values corresponding to the titles. + type: "array" + items: + type: "array" + items: + type: "string" + example: + Processes: + - + - "root" + - "13642" + - "882" + - "0" + - "17:03" + - "pts/0" + - "00:00:00" + - "/bin/bash" + - + - "root" + - "13735" + - "13642" + - "0" + - "17:06" + - "pts/0" + - "00:00:00" + - "sleep 10" + + ContainerWaitResponse: + description: "OK response to ContainerWait operation" + type: "object" + x-go-name: "WaitResponse" + title: "ContainerWaitResponse" + required: [StatusCode] + properties: + StatusCode: + description: "Exit code of the container" + type: "integer" + format: "int64" + x-nullable: false + Error: + $ref: "#/definitions/ContainerWaitExitError" + + ContainerWaitExitError: + description: "container waiting error, if any" + type: "object" + x-go-name: "WaitExitError" + properties: + Message: + description: "Details of an error" + type: "string" + + SystemVersion: + type: "object" + description: | + Response of Engine API: GET "/version" + properties: + Platform: + type: "object" + required: [Name] + properties: + Name: + type: "string" + Components: + type: "array" + description: | + Information about system components + items: + type: "object" + x-go-name: ComponentVersion + required: [Name, Version] + properties: + Name: + description: | + Name of the component + type: "string" + example: "Engine" + Version: + description: | + Version of the component + type: "string" + x-nullable: false + example: "27.0.1" + Details: + description: | + Key/value pairs of strings with additional information about the + component. These values are intended for informational purposes + only, and their content is not defined, and not part of the API + specification. + + These messages can be printed by the client as information to the user. + type: "object" + x-nullable: true + Version: + description: "The version of the daemon" + type: "string" + example: "27.0.1" + ApiVersion: + description: | + The default (and highest) API version that is supported by the daemon + type: "string" + example: "1.47" + MinAPIVersion: + description: | + The minimum API version that is supported by the daemon + type: "string" + example: "1.24" + GitCommit: + description: | + The Git commit of the source code that was used to build the daemon + type: "string" + example: "48a66213fe" + GoVersion: + description: | + The version Go used to compile the daemon, and the version of the Go + runtime in use. + type: "string" + example: "go1.22.7" + Os: + description: | + The operating system that the daemon is running on ("linux" or "windows") + type: "string" + example: "linux" + Arch: + description: | + Architecture of the daemon, as returned by the Go runtime (`GOARCH`). + + A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + type: "string" + example: "amd64" + KernelVersion: + description: | + The kernel version (`uname -r`) that the daemon is running on. + + This field is omitted when empty. + type: "string" + example: "6.8.0-31-generic" + Experimental: + description: | + Indicates if the daemon is started with experimental features enabled. + + This field is omitted when empty / false. + type: "boolean" + example: true + BuildTime: + description: | + The date and time that the daemon was compiled. + type: "string" + example: "2020-06-22T15:49:27.000000000+00:00" + + SystemInfo: + type: "object" + properties: + ID: + description: | + Unique identifier of the daemon. + +


+ + > **Note**: The format of the ID itself is not part of the API, and + > should not be considered stable. + type: "string" + example: "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + Containers: + description: "Total number of containers on the host." + type: "integer" + example: 14 + ContainersRunning: + description: | + Number of containers with status `"running"`. + type: "integer" + example: 3 + ContainersPaused: + description: | + Number of containers with status `"paused"`. + type: "integer" + example: 1 + ContainersStopped: + description: | + Number of containers with status `"stopped"`. + type: "integer" + example: 10 + Images: + description: | + Total number of images on the host. + + Both _tagged_ and _untagged_ (dangling) images are counted. + type: "integer" + example: 508 + Driver: + description: "Name of the storage driver in use." + type: "string" + example: "overlay2" + DriverStatus: + description: | + Information specific to the storage driver, provided as + "label" / "value" pairs. + + This information is provided by the storage driver, and formatted + in a way consistent with the output of `docker info` on the command + line. + +


+ + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: "array" + items: + type: "array" + items: + type: "string" + example: + - ["Backing Filesystem", "extfs"] + - ["Supports d_type", "true"] + - ["Native Overlay Diff", "true"] + DockerRootDir: + description: | + Root directory of persistent Docker state. + + Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` + on Windows. + type: "string" + example: "/var/lib/docker" + Plugins: + $ref: "#/definitions/PluginsInfo" + MemoryLimit: + description: "Indicates if the host has memory limit support enabled." + type: "boolean" + example: true + SwapLimit: + description: "Indicates if the host has memory swap limit support enabled." + type: "boolean" + example: true + CpuCfsPeriod: + description: | + Indicates if CPU CFS(Completely Fair Scheduler) period is supported by + the host. + type: "boolean" + example: true + CpuCfsQuota: + description: | + Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by + the host. + type: "boolean" + example: true + CPUShares: + description: | + Indicates if CPU Shares limiting is supported by the host. + type: "boolean" + example: true + CPUSet: + description: | + Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. + + See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) + type: "boolean" + example: true + PidsLimit: + description: "Indicates if the host kernel has PID limit support enabled." + type: "boolean" + example: true + OomKillDisable: + description: "Indicates if OOM killer disable is supported on the host." + type: "boolean" + IPv4Forwarding: + description: "Indicates IPv4 forwarding is enabled." + type: "boolean" + example: true + Debug: + description: | + Indicates if the daemon is running in debug-mode / with debug-level + logging enabled. + type: "boolean" + example: true + NFd: + description: | + The total number of file Descriptors in use by the daemon process. + + This information is only returned if debug-mode is enabled. + type: "integer" + example: 64 + NGoroutines: + description: | + The number of goroutines that currently exist. + + This information is only returned if debug-mode is enabled. + type: "integer" + example: 174 + SystemTime: + description: | + Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) + format with nano-seconds. + type: "string" + example: "2017-08-08T20:28:29.06202363Z" + LoggingDriver: + description: | + The logging driver to use as a default for new containers. + type: "string" + CgroupDriver: + description: | + The driver to use for managing cgroups. + type: "string" + enum: ["cgroupfs", "systemd", "none"] + default: "cgroupfs" + example: "cgroupfs" + CgroupVersion: + description: | + The version of the cgroup. + type: "string" + enum: ["1", "2"] + default: "1" + example: "1" + NEventsListener: + description: "Number of event listeners subscribed." + type: "integer" + example: 30 + KernelVersion: + description: | + Kernel version of the host. + + On Linux, this information obtained from `uname`. On Windows this + information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ + registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. + type: "string" + example: "6.8.0-31-generic" + OperatingSystem: + description: | + Name of the host's operating system, for example: "Ubuntu 24.04 LTS" + or "Windows Server 2016 Datacenter" + type: "string" + example: "Ubuntu 24.04 LTS" + OSVersion: + description: | + Version of the host's operating system + +


+ + > **Note**: The information returned in this field, including its + > very existence, and the formatting of values, should not be considered + > stable, and may change without notice. + type: "string" + example: "24.04" + OSType: + description: | + Generic type of the operating system of the host, as returned by the + Go runtime (`GOOS`). + + Currently returned values are "linux" and "windows". A full list of + possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). + type: "string" + example: "linux" + Architecture: + description: | + Hardware architecture of the host, as returned by the operating system. + This is equivalent to the output of `uname -m` on Linux. + + Unlike `Arch` (from `/version`), this reports the machine's native + architecture, which can differ from the Go runtime architecture when + running a binary compiled for a different architecture (for example, + a 32-bit binary running on 64-bit hardware). + type: "string" + example: "x86_64" + NCPU: + description: | + The number of logical CPUs usable by the daemon. + + The number of available CPUs is checked by querying the operating + system when the daemon starts. Changes to operating system CPU + allocation after the daemon is started are not reflected. + type: "integer" + example: 4 + MemTotal: + description: | + Total amount of physical memory available on the host, in bytes. + type: "integer" + format: "int64" + example: 2095882240 + + IndexServerAddress: + description: | + Address / URL of the index server that is used for image search, + and as a default for user authentication for Docker Hub and Docker Cloud. + default: "https://index.docker.io/v1/" + type: "string" + example: "https://index.docker.io/v1/" + RegistryConfig: + $ref: "#/definitions/RegistryServiceConfig" + GenericResources: + $ref: "#/definitions/GenericResources" + HttpProxy: + description: | + HTTP-proxy configured for the daemon. This value is obtained from the + [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + are masked in the API response. + + Containers do not automatically inherit this configuration. + type: "string" + example: "http://xxxxx:xxxxx@proxy.corp.example.com:8080" + HttpsProxy: + description: | + HTTPS-proxy configured for the daemon. This value is obtained from the + [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. + Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL + are masked in the API response. + + Containers do not automatically inherit this configuration. + type: "string" + example: "https://xxxxx:xxxxx@proxy.corp.example.com:4443" + NoProxy: + description: | + Comma-separated list of domain extensions for which no proxy should be + used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) + environment variable. + + Containers do not automatically inherit this configuration. + type: "string" + example: "*.local, 169.254/16" + Name: + description: "Hostname of the host." + type: "string" + example: "node5.corp.example.com" + Labels: + description: | + User-defined labels (key/value metadata) as set on the daemon. + +


+ + > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, + > set through the daemon configuration, and _node_ labels, set from a + > manager node in the Swarm. Node labels are not included in this + > field. Node labels can be retrieved using the `/nodes/(id)` endpoint + > on a manager node in the Swarm. + type: "array" + items: + type: "string" + example: ["storage=ssd", "production"] + ExperimentalBuild: + description: | + Indicates if experimental features are enabled on the daemon. + type: "boolean" + example: true + ServerVersion: + description: | + Version string of the daemon. + type: "string" + example: "27.0.1" + Runtimes: + description: | + List of [OCI compliant](https://github.com/opencontainers/runtime-spec) + runtimes configured on the daemon. Keys hold the "name" used to + reference the runtime. + + The Docker daemon relies on an OCI compliant runtime (invoked via the + `containerd` daemon) as its interface to the Linux kernel namespaces, + cgroups, and SELinux. + + The default runtime is `runc`, and automatically configured. Additional + runtimes can be configured by the user and will be listed here. + type: "object" + additionalProperties: + $ref: "#/definitions/Runtime" + default: + runc: + path: "runc" + example: + runc: + path: "runc" + runc-master: + path: "/go/bin/runc" + custom: + path: "/usr/local/bin/my-oci-runtime" + runtimeArgs: ["--debug", "--systemd-cgroup=false"] + DefaultRuntime: + description: | + Name of the default OCI runtime that is used when starting containers. + + The default can be overridden per-container at create time. + type: "string" + default: "runc" + example: "runc" + Swarm: + $ref: "#/definitions/SwarmInfo" + LiveRestoreEnabled: + description: | + Indicates if live restore is enabled. + + If enabled, containers are kept running when the daemon is shutdown + or upon daemon start if running containers are detected. + type: "boolean" + default: false + example: false + Isolation: + description: | + Represents the isolation technology to use as a default for containers. + The supported values are platform-specific. + + If no isolation value is specified on daemon start, on Windows client, + the default is `hyperv`, and on Windows server, the default is `process`. + + This option is currently not used on other platforms. + default: "default" + type: "string" + enum: + - "default" + - "hyperv" + - "process" + - "" + InitBinary: + description: | + Name and, optional, path of the `docker-init` binary. + + If the path is omitted, the daemon searches the host's `$PATH` for the + binary and uses the first result. + type: "string" + example: "docker-init" + ContainerdCommit: + $ref: "#/definitions/Commit" + RuncCommit: + $ref: "#/definitions/Commit" + InitCommit: + $ref: "#/definitions/Commit" + SecurityOptions: + description: | + List of security features that are enabled on the daemon, such as + apparmor, seccomp, SELinux, user-namespaces (userns), rootless and + no-new-privileges. + + Additional configuration options for each security feature may + be present, and are included as a comma-separated list of key/value + pairs. + type: "array" + items: + type: "string" + example: + - "name=apparmor" + - "name=seccomp,profile=default" + - "name=selinux" + - "name=userns" + - "name=rootless" + ProductLicense: + description: | + Reports a summary of the product license on the daemon. + + If a commercial license has been applied to the daemon, information + such as number of nodes, and expiration are included. + type: "string" + example: "Community Engine" + DefaultAddressPools: + description: | + List of custom default address pools for local networks, which can be + specified in the daemon.json file or dockerd option. + + Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 + 10.10.[0-255].0/24 address pools. + type: "array" + items: + type: "object" + properties: + Base: + description: "The network address in CIDR format" + type: "string" + example: "10.10.0.0/16" + Size: + description: "The network pool size" + type: "integer" + example: "24" + FirewallBackend: + $ref: "#/definitions/FirewallInfo" + DiscoveredDevices: + description: | + List of devices discovered by device drivers. + + Each device includes information about its source driver, kind, name, + and additional driver-specific attributes. + type: "array" + items: + $ref: "#/definitions/DeviceInfo" + NRI: + $ref: "#/definitions/NRIInfo" + Warnings: + description: | + List of warnings / informational messages about missing features, or + issues related to the daemon configuration. + + These messages can be printed by the client as information to the user. + type: "array" + items: + type: "string" + example: + - "WARNING: No memory limit support" + CDISpecDirs: + description: | + List of directories where (Container Device Interface) CDI + specifications are located. + + These specifications define vendor-specific modifications to an OCI + runtime specification for a container being created. + + An empty list indicates that CDI device injection is disabled. + + Note that since using CDI device injection requires the daemon to have + experimental enabled. For non-experimental daemons an empty list will + always be returned. + type: "array" + items: + type: "string" + example: + - "/etc/cdi" + - "/var/run/cdi" + Containerd: + $ref: "#/definitions/ContainerdInfo" + + ContainerdInfo: + description: | + Information for connecting to the containerd instance that is used by the daemon. + This is included for debugging purposes only. + type: "object" + x-nullable: true + properties: + Address: + description: "The address of the containerd socket." + type: "string" + example: "/run/containerd/containerd.sock" + Namespaces: + description: | + The namespaces that the daemon uses for running containers and + plugins in containerd. These namespaces can be configured in the + daemon configuration, and are considered to be used exclusively + by the daemon, Tampering with the containerd instance may cause + unexpected behavior. + + As these namespaces are considered to be exclusively accessed + by the daemon, it is not recommended to change these values, + or to change them to a value that is used by other systems, + such as cri-containerd. + type: "object" + properties: + Containers: + description: | + The default containerd namespace used for containers managed + by the daemon. + + The default namespace for containers is "moby", but will be + suffixed with the `.` of the remapped `root` if + user-namespaces are enabled and the containerd image-store + is used. + type: "string" + default: "moby" + example: "moby" + Plugins: + description: | + The default containerd namespace used for plugins managed by + the daemon. + + The default namespace for plugins is "plugins.moby", but will be + suffixed with the `.` of the remapped `root` if + user-namespaces are enabled and the containerd image-store + is used. + type: "string" + default: "plugins.moby" + example: "plugins.moby" + + FirewallInfo: + description: | + Information about the daemon's firewalling configuration. + + This field is currently only used on Linux, and omitted on other platforms. + type: "object" + x-nullable: true + properties: + Driver: + description: | + The name of the firewall backend driver. + type: "string" + example: "nftables" + Info: + description: | + Information about the firewall backend, provided as + "label" / "value" pairs. + +


+ + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: "array" + items: + type: "array" + items: + type: "string" + example: + - ["ReloadedAt", "2025-01-01T00:00:00Z"] + + # PluginsInfo is a temp struct holding Plugins name + # registered with docker daemon. It is used by Info struct + PluginsInfo: + description: | + Available plugins per type. + +


+ + > **Note**: Only unmanaged (V1) plugins are included in this list. + > V1 plugins are "lazily" loaded, and are not returned in this list + > if there is no resource using the plugin. + type: "object" + properties: + Volume: + description: "Names of available volume-drivers, and network-driver plugins." + type: "array" + items: + type: "string" + example: ["local"] + Network: + description: "Names of available network-drivers, and network-driver plugins." + type: "array" + items: + type: "string" + example: ["bridge", "host", "ipvlan", "macvlan", "null", "overlay"] + Authorization: + description: "Names of available authorization plugins." + type: "array" + items: + type: "string" + example: ["img-authz-plugin", "hbm"] + Log: + description: "Names of available logging-drivers, and logging-driver plugins." + type: "array" + items: + type: "string" + example: ["awslogs", "fluentd", "gcplogs", "gelf", "journald", "json-file", "splunk", "syslog"] + + + RegistryServiceConfig: + description: | + RegistryServiceConfig stores daemon registry services configuration. + type: "object" + x-nullable: true + properties: + InsecureRegistryCIDRs: + description: | + List of IP ranges of insecure registries, using the CIDR syntax + ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries + accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates + from unknown CAs) communication. + + By default, local registries (`::1/128` and `127.0.0.0/8`) are configured as + insecure. All other registries are secure. Communicating with an + insecure registry is not possible if the daemon assumes that registry + is secure. + + This configuration override this behavior, insecure communication with + registries whose resolved IP address is within the subnet described by + the CIDR syntax. + + Registries can also be marked insecure by hostname. Those registries + are listed under `IndexConfigs` and have their `Secure` field set to + `false`. + + > **Warning**: Using this option can be useful when running a local + > registry, but introduces security vulnerabilities. This option + > should therefore ONLY be used for testing purposes. For increased + > security, users should add their CA to their system's list of trusted + > CAs instead of enabling this option. + type: "array" + items: + type: "string" + example: ["::1/128", "127.0.0.0/8"] + IndexConfigs: + type: "object" + additionalProperties: + $ref: "#/definitions/IndexInfo" + example: + "127.0.0.1:5000": + "Name": "127.0.0.1:5000" + "Mirrors": [] + "Secure": false + "Official": false + "[2001:db8:a0b:12f0::1]:80": + "Name": "[2001:db8:a0b:12f0::1]:80" + "Mirrors": [] + "Secure": false + "Official": false + "docker.io": + Name: "docker.io" + Mirrors: ["https://hub-mirror.corp.example.com:5000/"] + Secure: true + Official: true + "registry.internal.corp.example.com:3000": + Name: "registry.internal.corp.example.com:3000" + Mirrors: [] + Secure: false + Official: false + Mirrors: + description: | + List of registry URLs that act as a mirror for the official + (`docker.io`) registry. + + type: "array" + items: + type: "string" + example: + - "https://hub-mirror.corp.example.com:5000/" + - "https://[2001:db8:a0b:12f0::1]/" + + IndexInfo: + description: + IndexInfo contains information about a registry. + type: "object" + x-nullable: true + properties: + Name: + description: | + Name of the registry, such as "docker.io". + type: "string" + example: "docker.io" + Mirrors: + description: | + List of mirrors, expressed as URIs. + type: "array" + items: + type: "string" + example: + - "https://hub-mirror.corp.example.com:5000/" + - "https://registry-2.docker.io/" + - "https://registry-3.docker.io/" + Secure: + description: | + Indicates if the registry is part of the list of insecure + registries. + + If `false`, the registry is insecure. Insecure registries accept + un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from + unknown CAs) communication. + + > **Warning**: Insecure registries can be useful when running a local + > registry. However, because its use creates security vulnerabilities + > it should ONLY be enabled for testing purposes. For increased + > security, users should add their CA to their system's list of + > trusted CAs instead of enabling this option. + type: "boolean" + example: true + Official: + description: | + Indicates whether this is an official registry (i.e., Docker Hub / docker.io) + type: "boolean" + example: true + + Runtime: + description: | + Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec) + runtime. + + The runtime is invoked by the daemon via the `containerd` daemon. OCI + runtimes act as an interface to the Linux kernel namespaces, cgroups, + and SELinux. + type: "object" + properties: + path: + description: | + Name and, optional, path, of the OCI executable binary. + + If the path is omitted, the daemon searches the host's `$PATH` for the + binary and uses the first result. + type: "string" + example: "/usr/local/bin/my-oci-runtime" + runtimeArgs: + description: | + List of command-line arguments to pass to the runtime when invoked. + type: "array" + x-nullable: true + items: + type: "string" + example: ["--debug", "--systemd-cgroup=false"] + status: + description: | + Information specific to the runtime. + + While this API specification does not define data provided by runtimes, + the following well-known properties may be provided by runtimes: + + `org.opencontainers.runtime-spec.features`: features structure as defined + in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), + in a JSON string representation. + +


+ + > **Note**: The information returned in this field, including the + > formatting of values and labels, should not be considered stable, + > and may change without notice. + type: "object" + x-nullable: true + additionalProperties: + type: "string" + example: + "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" + + Commit: + description: | + Commit holds the Git-commit (SHA1) that a binary was built from, as + reported in the version-string of external tools, such as `containerd`, + or `runC`. + type: "object" + properties: + ID: + description: "Actual commit ID of external tool." + type: "string" + example: "cfb82a876ecc11b5ca0977d1733adbe58599088a" + + SwarmInfo: + description: | + Represents generic information about swarm. + type: "object" + properties: + NodeID: + description: "Unique identifier of for this node in the swarm." + type: "string" + default: "" + example: "k67qz4598weg5unwwffg6z1m1" + NodeAddr: + description: | + IP address at which this node can be reached by other nodes in the + swarm. + type: "string" + default: "" + example: "10.0.0.46" + LocalNodeState: + $ref: "#/definitions/LocalNodeState" + ControlAvailable: + type: "boolean" + default: false + example: true + Error: + type: "string" + default: "" + RemoteManagers: + description: | + List of ID's and addresses of other managers in the swarm. + type: "array" + default: null + x-nullable: true + items: + $ref: "#/definitions/PeerNode" + example: + - NodeID: "71izy0goik036k48jg985xnds" + Addr: "10.0.0.158:2377" + - NodeID: "79y6h1o4gv8n120drcprv5nmc" + Addr: "10.0.0.159:2377" + - NodeID: "k67qz4598weg5unwwffg6z1m1" + Addr: "10.0.0.46:2377" + Nodes: + description: "Total number of nodes in the swarm." + type: "integer" + x-nullable: true + example: 4 + Managers: + description: "Total number of managers in the swarm." + type: "integer" + x-nullable: true + example: 3 + Cluster: + $ref: "#/definitions/ClusterInfo" + + LocalNodeState: + description: "Current local status of this node." + type: "string" + default: "" + enum: + - "" + - "inactive" + - "pending" + - "active" + - "error" + - "locked" + example: "active" + + PeerNode: + description: "Represents a peer-node in the swarm" + type: "object" + properties: + NodeID: + description: "Unique identifier of for this node in the swarm." + type: "string" + Addr: + description: | + IP address and ports at which this node can be reached. + type: "string" + + NetworkAttachmentConfig: + description: | + Specifies how a service should be attached to a particular network. + type: "object" + properties: + Target: + description: | + The target network for attachment. Must be a network name or ID. + type: "string" + Aliases: + description: | + Discoverable alternate names for the service on this network. + type: "array" + items: + type: "string" + DriverOpts: + description: | + Driver attachment options for the network target. + type: "object" + additionalProperties: + type: "string" + + EventActor: + description: | + Actor describes something that generates events, like a container, network, + or a volume. + type: "object" + properties: + ID: + description: "The ID of the object emitting the event" + type: "string" + example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + Attributes: + description: | + Various key/value attributes of the object, depending on its type. + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-label-value" + image: "alpine:latest" + name: "my-container" + + EventMessage: + description: | + EventMessage represents the information an event contains. + type: "object" + title: "SystemEventsResponse" + properties: + Type: + description: "The type of object emitting the event" + type: "string" + enum: ["builder", "config", "container", "daemon", "image", "network", "node", "plugin", "secret", "service", "volume"] + example: "container" + Action: + description: "The type of event" + type: "string" + example: "create" + Actor: + $ref: "#/definitions/EventActor" + scope: + description: | + Scope of the event. Engine events are `local` scope. Cluster (Swarm) + events are `swarm` scope. + type: "string" + enum: ["local", "swarm"] + time: + description: "Timestamp of event" + type: "integer" + format: "int64" + example: 1629574695 + timeNano: + description: "Timestamp of event, with nanosecond accuracy" + type: "integer" + format: "int64" + example: 1629574695515050031 + + OCIDescriptor: + type: "object" + x-go-name: Descriptor + description: | + A descriptor struct containing digest, media type, and size, as defined in + the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). + properties: + mediaType: + description: | + The media type of the object this schema refers to. + type: "string" + example: "application/vnd.oci.image.manifest.v1+json" + digest: + description: | + The digest of the targeted content. + type: "string" + example: "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" + size: + description: | + The size in bytes of the blob. + type: "integer" + format: "int64" + example: 424 + urls: + description: |- + List of URLs from which this object MAY be downloaded. + type: "array" + items: + type: "string" + format: "uri" + x-nullable: true + annotations: + description: |- + Arbitrary metadata relating to the targeted content. + type: "object" + x-nullable: true + additionalProperties: + type: "string" + example: + "com.docker.official-images.bashbrew.arch": "amd64" + "org.opencontainers.image.base.digest": "sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8" + "org.opencontainers.image.base.name": "scratch" + "org.opencontainers.image.created": "2025-01-27T00:00:00Z" + "org.opencontainers.image.revision": "9fabb4bad5138435b01857e2fe9363e2dc5f6a79" + "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base" + "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu" + "org.opencontainers.image.version": "24.04" + data: + type: string + x-nullable: true + description: |- + Data is an embedding of the targeted content. This is encoded as a base64 + string when marshalled to JSON (automatically, by encoding/json). If + present, Data can be used directly to avoid fetching the targeted content. + example: null + platform: + $ref: "#/definitions/OCIPlatform" + artifactType: + description: |- + ArtifactType is the IANA media type of this artifact. + type: "string" + x-nullable: true + example: null + + OCIPlatform: + type: "object" + x-go-name: Platform + x-nullable: true + description: | + Describes the platform which the image in the manifest runs on, as defined + in the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md). + properties: + architecture: + description: | + The CPU architecture, for example `amd64` or `ppc64`. + type: "string" + example: "arm" + os: + description: | + The operating system, for example `linux` or `windows`. + type: "string" + example: "windows" + os.version: + description: | + Optional field specifying the operating system version, for example on + Windows `10.0.19041.1165`. + type: "string" + example: "10.0.19041.1165" + os.features: + description: | + Optional field specifying an array of strings, each listing a required + OS feature (for example on Windows `win32k`). + type: "array" + items: + type: "string" + example: + - "win32k" + variant: + description: | + Optional field specifying a variant of the CPU, for example `v7` to + specify ARMv7 when architecture is `arm`. + type: "string" + example: "v7" + + DistributionInspect: + type: "object" + x-go-name: DistributionInspect + title: "DistributionInspectResponse" + required: [Descriptor, Platforms] + description: | + Describes the result obtained from contacting the registry to retrieve + image metadata. + properties: + Descriptor: + $ref: "#/definitions/OCIDescriptor" + Platforms: + type: "array" + description: | + An array containing all platforms supported by the image. + items: + $ref: "#/definitions/OCIPlatform" + + ClusterVolume: + type: "object" + description: | + Options and information specific to, and only present on, Swarm CSI + cluster volumes. + properties: + ID: + type: "string" + description: | + The Swarm ID of this volume. Because cluster volumes are Swarm + objects, they have an ID, unlike non-cluster volumes. This ID can + be used to refer to the Volume instead of the name. + Version: + $ref: "#/definitions/ObjectVersion" + CreatedAt: + type: "string" + format: "dateTime" + UpdatedAt: + type: "string" + format: "dateTime" + Spec: + $ref: "#/definitions/ClusterVolumeSpec" + Info: + type: "object" + description: | + Information about the global status of the volume. + properties: + CapacityBytes: + type: "integer" + format: "int64" + description: | + The capacity of the volume in bytes. A value of 0 indicates that + the capacity is unknown. + VolumeContext: + type: "object" + description: | + A map of strings to strings returned from the storage plugin when + the volume is created. + additionalProperties: + type: "string" + VolumeID: + type: "string" + description: | + The ID of the volume as returned by the CSI storage plugin. This + is distinct from the volume's ID as provided by Docker. This ID + is never used by the user when communicating with Docker to refer + to this volume. If the ID is blank, then the Volume has not been + successfully created in the plugin yet. + AccessibleTopology: + type: "array" + description: | + The topology this volume is actually accessible from. + items: + $ref: "#/definitions/Topology" + PublishStatus: + type: "array" + description: | + The status of the volume as it pertains to its publishing and use on + specific nodes + items: + type: "object" + properties: + NodeID: + type: "string" + description: | + The ID of the Swarm node the volume is published on. + State: + type: "string" + description: | + The published state of the volume. + * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. + * `published` The volume is published successfully to the node. + * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. + * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. + enum: + - "pending-publish" + - "published" + - "pending-node-unpublish" + - "pending-controller-unpublish" + PublishContext: + type: "object" + description: | + A map of strings to strings returned by the CSI controller + plugin when a volume is published. + additionalProperties: + type: "string" + + ClusterVolumeSpec: + type: "object" + description: | + Cluster-specific options used to create the volume. + properties: + Group: + type: "string" + description: | + Group defines the volume group of this volume. Volumes belonging to + the same group can be referred to by group name when creating + Services. Referring to a volume by group instructs Swarm to treat + volumes in that group interchangeably for the purpose of scheduling. + Volumes with an empty string for a group technically all belong to + the same, emptystring group. + AccessMode: + type: "object" + description: | + Defines how the volume is used by tasks. + properties: + Scope: + type: "string" + description: | + The set of nodes this volume can be used on at one time. + - `single` The volume may only be scheduled to one node at a time. + - `multi` the volume may be scheduled to any supported number of nodes at a time. + default: "single" + enum: ["single", "multi"] + x-nullable: false + Sharing: + type: "string" + description: | + The number and way that different tasks can use this volume + at one time. + - `none` The volume may only be used by one task at a time. + - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly + - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. + - `all` The volume may have any number of readers and writers. + default: "none" + enum: ["none", "readonly", "onewriter", "all"] + x-nullable: false + MountVolume: + type: "object" + description: | + Options for using this volume as a Mount-type volume. + + Either MountVolume or BlockVolume, but not both, must be + present. + properties: + FsType: + type: "string" + description: | + Specifies the filesystem type for the mount volume. + Optional. + MountFlags: + type: "array" + description: | + Flags to pass when mounting the volume. Optional. + items: + type: "string" + BlockVolume: + type: "object" + description: | + Options for using this volume as a Block-type volume. + Intentionally empty. + Secrets: + type: "array" + description: | + Swarm Secrets that are passed to the CSI storage plugin when + operating on this volume. + items: + type: "object" + description: | + One cluster volume secret entry. Defines a key-value pair that + is passed to the plugin. + properties: + Key: + type: "string" + description: | + Key is the name of the key of the key-value pair passed to + the plugin. + Secret: + type: "string" + description: | + Secret is the swarm Secret object from which to read data. + This can be a Secret name or ID. The Secret data is + retrieved by swarm and used as the value of the key-value + pair passed to the plugin. + AccessibilityRequirements: + type: "object" + description: | + Requirements for the accessible topology of the volume. These + fields are optional. For an in-depth description of what these + fields mean, see the CSI specification. + properties: + Requisite: + type: "array" + description: | + A list of required topologies, at least one of which the + volume must be accessible from. + items: + $ref: "#/definitions/Topology" + Preferred: + type: "array" + description: | + A list of topologies that the volume should attempt to be + provisioned in. + items: + $ref: "#/definitions/Topology" + CapacityRange: + type: "object" + description: | + The desired capacity that the volume should be created with. If + empty, the plugin will decide the capacity. + properties: + RequiredBytes: + type: "integer" + format: "int64" + description: | + The volume must be at least this big. The value of 0 + indicates an unspecified minimum + LimitBytes: + type: "integer" + format: "int64" + description: | + The volume must not be bigger than this. The value of 0 + indicates an unspecified maximum. + Availability: + type: "string" + description: | + The availability of the volume for use in tasks. + - `active` The volume is fully available for scheduling on the cluster + - `pause` No new workloads should use the volume, but existing workloads are not stopped. + - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. + default: "active" + x-nullable: false + enum: + - "active" + - "pause" + - "drain" + + Topology: + description: | + A map of topological domains to topological segments. For in depth + details, see documentation for the Topology object in the CSI + specification. + type: "object" + properties: + Segments: + type: "object" + additionalProperties: + type: "string" + + AttestationStatement: + x-go-name: "AttestationStatement" + description: | + AttestationStatement is a single in-toto statement attached to an image. + type: "object" + required: ["Descriptor", "PredicateType"] + properties: + Descriptor: + $ref: "#/definitions/OCIDescriptor" + PredicateType: + description: The in-toto predicate type URI of this statement. + type: "string" + example: "https://slsa.dev/provenance/v0.2" + Statement: + description: | + The verbatim in-toto statement JSON. Only included when the caller + opts in via the `statement=true` query parameter; otherwise absent. + type: "object" + x-nullable: true + ImageManifestSummary: + x-go-name: "ManifestSummary" + description: | + ImageManifestSummary represents a summary of an image manifest. + type: "object" + required: ["ID", "Descriptor", "Available", "Size", "Kind"] + properties: + ID: + description: | + ID is the content-addressable ID of an image and is the same as the + digest of the image manifest. + type: "string" + example: "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + Descriptor: + $ref: "#/definitions/OCIDescriptor" + Available: + description: Indicates whether all the child content (image config, layers) is fully available locally. + type: "boolean" + example: true + Size: + type: "object" + x-nullable: false + required: ["Content", "Total"] + properties: + Total: + type: "integer" + format: "int64" + example: 8213251 + description: | + Total is the total size (in bytes) of all the locally present + data (both distributable and non-distributable) that's related to + this manifest and its children. + This equal to the sum of [Content] size AND all the sizes in the + [Size] struct present in the Kind-specific data struct. + For example, for an image kind (Kind == "image") + this would include the size of the image content and unpacked + image snapshots ([Size.Content] + [ImageData.Size.Unpacked]). + Content: + description: | + Content is the size (in bytes) of all the locally present + content in the content store (e.g. image config, layers) + referenced by this manifest and its children. + This only includes blobs in the content store. + type: "integer" + format: "int64" + example: 3987495 + Kind: + type: "string" + example: "image" + enum: + - "image" + - "attestation" + - "unknown" + description: | + The kind of the manifest. + + kind | description + -------------|----------------------------------------------------------- + image | Image manifest that can be used to start a container. + attestation | Attestation manifest produced by the Buildkit builder for a specific image manifest. + ImageData: + description: | + The image data for the image manifest. + This field is only populated when Kind is "image". + type: "object" + x-nullable: true + x-omitempty: true + required: ["Platform", "Containers", "Size", "UnpackedSize"] + properties: + Platform: + $ref: "#/definitions/OCIPlatform" + description: | + OCI platform of the image. This will be the platform specified in the + manifest descriptor from the index/manifest list. + If it's not available, it will be obtained from the image config. + Identity: + description: | + Identity holds information about the identity and origin of this image. + For image list responses, this can duplicate Build/Pull fields across + image manifests, because those parts are image-level metadata. + x-nullable: true + $ref: "#/definitions/Identity" + Containers: + description: | + The IDs of the containers that are using this image. + type: "array" + items: + type: "string" + example: ["ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430", "abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e"] + Size: + type: "object" + x-nullable: false + required: ["Unpacked"] + properties: + Unpacked: + type: "integer" + format: "int64" + example: 3987495 + description: | + Unpacked is the size (in bytes) of the locally unpacked + (uncompressed) image content that's directly usable by the containers + running this image. + It's independent of the distributable content - e.g. + the image might still have an unpacked data that's still used by + some container even when the distributable/compressed content is + already gone. + AttestationData: + description: | + The image data for the attestation manifest. + This field is only populated when Kind is "attestation". + type: "object" + x-nullable: true + x-omitempty: true + required: ["For"] + properties: + For: + description: | + The digest of the image manifest that this attestation is for. + type: "string" + example: "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" + +paths: + /containers/json: + get: + summary: "List containers" + description: | + Returns a list of containers. For details on the format, see the + [inspect endpoint](#operation/ContainerInspect). + + Note that it uses a different, smaller representation of a container + than inspecting a single container. For example, the list of linked + containers is not propagated . + operationId: "ContainerList" + produces: + - "application/json" + parameters: + - name: "all" + in: "query" + description: | + Return all containers. By default, only running containers are shown. + type: "boolean" + default: false + - name: "limit" + in: "query" + description: | + Return this number of most recently created containers, including + non-running ones. + type: "integer" + - name: "size" + in: "query" + description: | + Return the size of container as fields `SizeRw` and `SizeRootFs`. + type: "boolean" + default: false + - name: "filters" + in: "query" + description: | + Filters to process on the container list, encoded as JSON (a + `map[string][]string`). For example, `{"status": ["paused"]}` will + only return paused containers. + + Available filters: + + - `ancestor`=(`[:]`, ``, or ``) + - `annotation=key` or `annotation="key=value"` of a container annotation + - `before`=(`` or ``) + - `expose`=(`[/]`|`/[]`) + - `exited=` containers with exit code of `` + - `health`=(`starting`|`healthy`|`unhealthy`|`none`) + - `id=` a container's ID + - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) + - `is-task=`(`true`|`false`) + - `label=key` or `label="key=value"` of a container label + - `name=` a container's name + - `network`=(`` or ``) + - `publish`=(`[/]`|`/[]`) + - `since`=(`` or ``) + - `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`) + - `volume`=(`` or ``) + type: "string" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/ContainerSummary" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Container"] + /containers/create: + post: + summary: "Create a container" + operationId: "ContainerCreate" + consumes: + - "application/json" + - "application/octet-stream" + produces: + - "application/json" + parameters: + - name: "name" + in: "query" + description: | + Assign the specified name to the container. Must match + `/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`. + type: "string" + pattern: "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$" + - name: "platform" + in: "query" + description: | + Platform in the format `os[/arch[/variant]]` used for image lookup. + + When specified, the daemon checks if the requested image is present + in the local image cache with the given OS and Architecture, and + otherwise returns a `404` status. + + If the option is not set, the host's native OS and Architecture are + used to look up the image in the image cache. However, if no platform + is passed and the given image does exist in the local image cache, + but its OS or architecture does not match, the container is created + with the available image, and a warning is added to the `Warnings` + field in the response, for example; + + WARNING: The requested image's platform (linux/arm64/v8) does not + match the detected host platform (linux/amd64) and no + specific platform was requested + + type: "string" + default: "" + - name: "body" + in: "body" + description: "Container to create" + schema: + allOf: + - $ref: "#/definitions/ContainerConfig" + - type: "object" + properties: + HostConfig: + $ref: "#/definitions/HostConfig" + NetworkingConfig: + $ref: "#/definitions/NetworkingConfig" + example: + Hostname: "" + Domainname: "" + User: "" + AttachStdin: false + AttachStdout: true + AttachStderr: true + Tty: false + OpenStdin: false + StdinOnce: false + Env: + - "FOO=bar" + - "BAZ=quux" + Cmd: + - "date" + Entrypoint: "" + Image: "ubuntu" + Labels: + com.example.vendor: "Acme" + com.example.license: "GPL" + com.example.version: "1.0" + Volumes: + /volumes/data: {} + WorkingDir: "" + NetworkDisabled: false + ExposedPorts: + 22/tcp: {} + StopSignal: "SIGTERM" + StopTimeout: 10 + HostConfig: + Binds: + - "/tmp:/tmp" + Links: + - "redis3:redis" + Memory: 0 + MemorySwap: 0 + MemoryReservation: 0 + NanoCpus: 500000 + CpuPercent: 80 + CpuShares: 512 + CpuPeriod: 100000 + CpuRealtimePeriod: 1000000 + CpuRealtimeRuntime: 10000 + CpuQuota: 50000 + CpusetCpus: "0,1" + CpusetMems: "0,1" + MaximumIOps: 0 + MaximumIOBps: 0 + BlkioWeight: 300 + BlkioWeightDevice: + - {} + BlkioDeviceReadBps: + - {} + BlkioDeviceReadIOps: + - {} + BlkioDeviceWriteBps: + - {} + BlkioDeviceWriteIOps: + - {} + DeviceRequests: + - Driver: "nvidia" + Count: -1 + DeviceIDs": ["0", "1", "GPU-fef8089b-4820-abfc-e83e-94318197576e"] + Capabilities: [["gpu", "nvidia", "compute"]] + Options: + property1: "string" + property2: "string" + MemorySwappiness: 60 + OomKillDisable: false + OomScoreAdj: 500 + PidMode: "" + PidsLimit: 0 + PortBindings: + 22/tcp: + - HostPort: "11022" + PublishAllPorts: false + Privileged: false + ReadonlyRootfs: false + Dns: + - "8.8.8.8" + DnsOptions: + - "" + DnsSearch: + - "" + VolumesFrom: + - "parent" + - "other:ro" + CapAdd: + - "NET_ADMIN" + CapDrop: + - "MKNOD" + GroupAdd: + - "newgroup" + RestartPolicy: + Name: "" + MaximumRetryCount: 0 + AutoRemove: true + NetworkMode: "bridge" + Devices: [] + Ulimits: + - {} + LogConfig: + Type: "json-file" + Config: {} + SecurityOpt: [] + StorageOpt: {} + CgroupParent: "" + VolumeDriver: "" + ShmSize: 67108864 + NetworkingConfig: + EndpointsConfig: + isolated_nw: + IPAMConfig: + IPv4Address: "172.20.30.33" + IPv6Address: "2001:db8:abcd::3033" + LinkLocalIPs: + - "169.254.34.68" + - "fe80::3468" + Links: + - "container_1" + - "container_2" + Aliases: + - "server_x" + - "server_y" + database_nw: {} + + required: true + responses: + 201: + description: "Container created successfully" + schema: + $ref: "#/definitions/ContainerCreateResponse" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such image" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such image: c2ada9df5af8" + 409: + description: "conflict" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Container"] + /containers/{id}/json: + get: + summary: "Inspect a container" + description: "Return low-level information about a container." + operationId: "ContainerInspect" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/ContainerInspectResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "size" + in: "query" + type: "boolean" + default: false + description: "Return the size of container as fields `SizeRw` and `SizeRootFs`" + tags: ["Container"] + /containers/{id}/top: + get: + summary: "List processes running inside a container" + description: | + On Unix systems, this is done by running the `ps` command. This endpoint + is not supported on Windows. + operationId: "ContainerTop" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/ContainerTopResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "ps_args" + in: "query" + description: "The arguments to pass to `ps`. For example, `aux`" + type: "string" + default: "-ef" + tags: ["Container"] + /containers/{id}/logs: + get: + summary: "Get container logs" + description: | + Get `stdout` and `stderr` logs from a container. + + Note: This endpoint works only for containers with the `json-file` or + `journald` logging driver. + produces: + - "application/vnd.docker.raw-stream" + - "application/vnd.docker.multiplexed-stream" + operationId: "ContainerLogs" + responses: + 200: + description: | + logs returned as a stream in response body. + For the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach). + Note that unlike the attach endpoint, the logs endpoint does not + upgrade the connection and does not set Content-Type. + schema: + type: "string" + format: "binary" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "follow" + in: "query" + description: "Keep connection after returning logs." + type: "boolean" + default: false + - name: "stdout" + in: "query" + description: "Return logs from `stdout`" + type: "boolean" + default: false + - name: "stderr" + in: "query" + description: "Return logs from `stderr`" + type: "boolean" + default: false + - name: "since" + in: "query" + description: "Only return logs since this time, as a UNIX timestamp" + type: "integer" + default: 0 + - name: "until" + in: "query" + description: "Only return logs before this time, as a UNIX timestamp" + type: "integer" + default: 0 + - name: "timestamps" + in: "query" + description: "Add timestamps to every log line" + type: "boolean" + default: false + - name: "tail" + in: "query" + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + type: "string" + default: "all" + tags: ["Container"] + /containers/{id}/changes: + get: + summary: "Get changes on a container’s filesystem" + description: | + Returns which files in a container's filesystem have been added, deleted, + or modified. The `Kind` of modification can be one of: + + - `0`: Modified ("C") + - `1`: Added ("A") + - `2`: Deleted ("D") + operationId: "ContainerChanges" + produces: ["application/json"] + responses: + 200: + description: "The list of changes" + schema: + type: "array" + items: + $ref: "#/definitions/FilesystemChange" + examples: + application/json: + - Path: "/dev" + Kind: 0 + - Path: "/dev/kmsg" + Kind: 1 + - Path: "/test" + Kind: 1 + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + tags: ["Container"] + /containers/{id}/export: + get: + summary: "Export a container" + description: "Export the contents of a container as a tarball." + operationId: "ContainerExport" + produces: + - "application/octet-stream" + responses: + 200: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + tags: ["Container"] + /containers/{id}/stats: + get: + summary: "Get container stats based on resource usage" + description: | + This endpoint returns a live stream of a container’s resource usage + statistics. + + The `precpu_stats` is the CPU statistic of the *previous* read, and is + used to calculate the CPU usage percentage. It is not an exact copy + of the `cpu_stats` field. + + If either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is + nil then for compatibility with older daemons the length of the + corresponding `cpu_usage.percpu_usage` array should be used. + + On a cgroup v2 host, the following fields are not set + * `blkio_stats`: all fields other than `io_service_bytes_recursive` + * `cpu_stats`: `cpu_usage.percpu_usage` + * `memory_stats`: `max_usage` and `failcnt` + Also, `memory_stats.stats` fields are incompatible with cgroup v1. + + To calculate the values shown by the `stats` command of the docker cli tool + the following formulas can be used: + * used_memory = `memory_stats.usage - memory_stats.stats.cache` (cgroups v1) + * used_memory = `memory_stats.usage - memory_stats.stats.inactive_file` (cgroups v2) + * available_memory = `memory_stats.limit` + * Memory usage % = `(used_memory / available_memory) * 100.0` + * cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage` + * system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage` + * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus` + * CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0` + operationId: "ContainerStats" + produces: ["application/json"] + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/ContainerStatsResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "stream" + in: "query" + description: | + Stream the output. If false, the stats will be output once and then + it will disconnect. + type: "boolean" + default: true + - name: "one-shot" + in: "query" + description: | + Only get a single stat instead of waiting for 2 cycles. Must be used + with `stream=false`. + type: "boolean" + default: false + tags: ["Container"] + /containers/{id}/resize: + post: + summary: "Resize a container TTY" + description: "Resize the TTY for a container." + operationId: "ContainerResize" + consumes: + - "application/octet-stream" + produces: + - "text/plain" + responses: + 200: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "cannot resize container" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "h" + in: "query" + required: true + description: "Height of the TTY session in characters" + type: "integer" + - name: "w" + in: "query" + required: true + description: "Width of the TTY session in characters" + type: "integer" + tags: ["Container"] + /containers/{id}/start: + post: + summary: "Start a container" + operationId: "ContainerStart" + responses: + 204: + description: "no error" + 304: + description: "container already started" + 400: + description: "bad parameter, including an invalid checkpoint ID" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "detachKeys" + in: "query" + description: | + Override the key sequence for detaching a container. Format is a + single character `[a-Z]` or `ctrl-` where `` is one + of: `a-z`, `@`, `^`, `[`, `,` or `_`. + type: "string" + tags: ["Container"] + /containers/{id}/stop: + post: + summary: "Stop a container" + operationId: "ContainerStop" + responses: + 204: + description: "no error" + 304: + description: "container already stopped" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "signal" + in: "query" + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + type: "string" + - name: "t" + in: "query" + description: "Number of seconds to wait before killing the container" + type: "integer" + tags: ["Container"] + /containers/{id}/restart: + post: + summary: "Restart a container" + operationId: "ContainerRestart" + responses: + 204: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "signal" + in: "query" + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + type: "string" + - name: "t" + in: "query" + description: "Number of seconds to wait before killing the container" + type: "integer" + tags: ["Container"] + /containers/{id}/kill: + post: + summary: "Kill a container" + description: | + Send a POSIX signal to a container, defaulting to killing to the + container. + operationId: "ContainerKill" + responses: + 204: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 409: + description: "container is not running" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "signal" + in: "query" + description: | + Signal to send to the container as an integer or string (e.g. `SIGINT`). + type: "string" + default: "SIGKILL" + tags: ["Container"] + /containers/{id}/update: + post: + summary: "Update a container" + description: | + Change various configuration options of a container without having to + recreate it. + operationId: "ContainerUpdate" + consumes: ["application/json"] + produces: ["application/json"] + responses: + 200: + description: "The container has been updated." + schema: + $ref: "#/definitions/ContainerUpdateResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "update" + in: "body" + required: true + schema: + allOf: + - $ref: "#/definitions/Resources" + - type: "object" + properties: + RestartPolicy: + $ref: "#/definitions/RestartPolicy" + example: + BlkioWeight: 300 + CpuShares: 512 + CpuPeriod: 100000 + CpuQuota: 50000 + CpuRealtimePeriod: 1000000 + CpuRealtimeRuntime: 10000 + CpusetCpus: "0,1" + CpusetMems: "0" + Memory: 314572800 + MemorySwap: 514288000 + MemoryReservation: 209715200 + RestartPolicy: + MaximumRetryCount: 4 + Name: "on-failure" + tags: ["Container"] + /containers/{id}/rename: + post: + summary: "Rename a container" + operationId: "ContainerRename" + responses: + 204: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 409: + description: "name already in use" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "name" + in: "query" + required: true + description: "New name for the container" + type: "string" + tags: ["Container"] + /containers/{id}/pause: + post: + summary: "Pause a container" + description: | + Use the freezer cgroup to suspend all processes in a container. + + Traditionally, when suspending a process the `SIGSTOP` signal is used, + which is observable by the process being suspended. With the freezer + cgroup the process is unaware, and unable to capture, that it is being + suspended, and subsequently resumed. + operationId: "ContainerPause" + responses: + 204: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + tags: ["Container"] + /containers/{id}/unpause: + post: + summary: "Unpause a container" + description: "Resume a container which has been paused." + operationId: "ContainerUnpause" + responses: + 204: + description: "no error" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + tags: ["Container"] + /containers/{id}/attach: + post: + summary: "Attach to a container" + description: | + Attach to a container to read its output or send it input. You can attach + to the same container multiple times and you can reattach to containers + that have been detached. + + Either the `stream` or `logs` parameter must be `true` for this endpoint + to do anything. + + See the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/) + for more details. + + ### Hijacking + + This endpoint hijacks the HTTP connection to transport `stdin`, `stdout`, + and `stderr` on the same socket. + + This is the response from the daemon for an attach request: + + ``` + HTTP/1.1 200 OK + Content-Type: application/vnd.docker.raw-stream + + [STREAM] + ``` + + After the headers and two new lines, the TCP connection can now be used + for raw, bidirectional communication between the client and server. + + To hint potential proxies about connection hijacking, the Docker client + can also optionally send connection upgrade headers. + + For example, the client sends this request to upgrade the connection: + + ``` + POST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1 + Upgrade: tcp + Connection: Upgrade + ``` + + The Docker daemon will respond with a `101 UPGRADED` response, and will + similarly follow with the raw stream: + + ``` + HTTP/1.1 101 UPGRADED + Content-Type: application/vnd.docker.raw-stream + Connection: Upgrade + Upgrade: tcp + + [STREAM] + ``` + + ### Stream format + + When the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate), + the HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream + and the stream over the hijacked connected is multiplexed to separate out + `stdout` and `stderr`. The stream consists of a series of frames, each + containing a header and a payload. + + The header contains the information which the stream writes (`stdout` or + `stderr`). It also contains the size of the associated frame encoded in + the last four bytes (`uint32`). + + It is encoded on the first eight bytes like this: + + ```go + header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} + ``` + + `STREAM_TYPE` can be: + + - 0: `stdin` (is written on `stdout`) + - 1: `stdout` + - 2: `stderr` + + `SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size + encoded as big endian. + + Following the header is the payload, which is the specified number of + bytes of `STREAM_TYPE`. + + The simplest way to implement this protocol is the following: + + 1. Read 8 bytes. + 2. Choose `stdout` or `stderr` depending on the first byte. + 3. Extract the frame size from the last four bytes. + 4. Read the extracted size and output it on the correct output. + 5. Goto 1. + + ### Stream format when using a TTY + + When the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate), + the stream is not multiplexed. The data exchanged over the hijacked + connection is simply the raw data from the process PTY and client's + `stdin`. + + operationId: "ContainerAttach" + produces: + - "application/vnd.docker.raw-stream" + - "application/vnd.docker.multiplexed-stream" + responses: + 101: + description: "no error, hints proxy about hijacking" + 200: + description: "no error, no upgrade header found" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "detachKeys" + in: "query" + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,` or `_`. + type: "string" + - name: "logs" + in: "query" + description: | + Replay previous logs from the container. + + This is useful for attaching to a container that has started and you + want to output everything since the container started. + + If `stream` is also enabled, once all the previous output has been + returned, it will seamlessly transition into streaming current + output. + type: "boolean" + default: false + - name: "stream" + in: "query" + description: | + Stream attached streams from the time the request was made onwards. + type: "boolean" + default: false + - name: "stdin" + in: "query" + description: "Attach to `stdin`" + type: "boolean" + default: false + - name: "stdout" + in: "query" + description: "Attach to `stdout`" + type: "boolean" + default: false + - name: "stderr" + in: "query" + description: "Attach to `stderr`" + type: "boolean" + default: false + tags: ["Container"] + /containers/{id}/attach/ws: + get: + summary: "Attach to a container via a websocket" + operationId: "ContainerAttachWebsocket" + responses: + 101: + description: "no error, hints proxy about hijacking" + 200: + description: "no error, no upgrade header found" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "detachKeys" + in: "query" + description: | + Override the key sequence for detaching a container.Format is a single + character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, + `@`, `^`, `[`, `,`, or `_`. + type: "string" + - name: "logs" + in: "query" + description: "Return logs" + type: "boolean" + default: false + - name: "stream" + in: "query" + description: "Return stream" + type: "boolean" + default: false + - name: "stdin" + in: "query" + description: "Attach to `stdin`" + type: "boolean" + default: false + - name: "stdout" + in: "query" + description: "Attach to `stdout`" + type: "boolean" + default: false + - name: "stderr" + in: "query" + description: "Attach to `stderr`" + type: "boolean" + default: false + tags: ["Container"] + /containers/{id}/wait: + post: + summary: "Wait for a container" + description: "Block until a container stops, then returns the exit code." + operationId: "ContainerWait" + produces: ["application/json"] + responses: + 200: + description: "The container has exit." + schema: + $ref: "#/definitions/ContainerWaitResponse" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "condition" + in: "query" + description: | + Wait until a container state reaches the given condition. + + Defaults to `not-running` if omitted or empty. + type: "string" + enum: + - "not-running" + - "next-exit" + - "removed" + default: "not-running" + tags: ["Container"] + /containers/{id}: + delete: + summary: "Remove a container" + operationId: "ContainerDelete" + responses: + 204: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 409: + description: "conflict" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: | + You cannot remove a running container: c2ada9df5af8. Stop the + container before attempting removal or force remove + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "v" + in: "query" + description: "Remove anonymous volumes associated with the container." + type: "boolean" + default: false + - name: "force" + in: "query" + description: "If the container is running, kill it before removing it." + type: "boolean" + default: false + - name: "link" + in: "query" + description: "Remove the specified link associated with the container." + type: "boolean" + default: false + tags: ["Container"] + /containers/{id}/archive: + head: + summary: "Get information about files in a container" + description: | + A response header `X-Docker-Container-Path-Stat` is returned, containing + a base64 - encoded JSON object with some filesystem header information + about the path. + operationId: "ContainerArchiveInfo" + responses: + 200: + description: "no error" + headers: + X-Docker-Container-Path-Stat: + type: "string" + description: | + A base64 - encoded JSON object with some filesystem header + information about the path + 400: + description: "Bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "Container or path does not exist" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "path" + in: "query" + required: true + description: "Resource in the container’s filesystem to archive." + type: "string" + tags: ["Container"] + get: + summary: "Get an archive of a filesystem resource in a container" + description: "Get a tar archive of a resource in the filesystem of container id." + operationId: "ContainerArchive" + produces: ["application/x-tar"] + responses: + 200: + description: "no error" + 400: + description: "Bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "Container or path does not exist" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "path" + in: "query" + required: true + description: "Resource in the container’s filesystem to archive." + type: "string" + tags: ["Container"] + put: + summary: "Extract an archive of files or folders to a directory in a container" + description: | + Upload a tar archive to be extracted to a path in the filesystem of container id. + `path` parameter is asserted to be a directory. If it exists as a file, 400 error + will be returned with message "not a directory". + operationId: "PutContainerArchive" + consumes: ["application/x-tar", "application/octet-stream"] + responses: + 200: + description: "The content was extracted successfully" + 400: + description: "Bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "not a directory" + 403: + description: "Permission denied, the volume or container rootfs is marked as read-only." + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "No such container or path does not exist inside the container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the container" + type: "string" + - name: "path" + in: "query" + required: true + description: "Path to a directory in the container to extract the archive’s contents into. " + type: "string" + - name: "noOverwriteDirNonDir" + in: "query" + description: | + If `1`, `true`, or `True` then it will be an error if unpacking the + given content would cause an existing directory to be replaced with + a non-directory and vice versa. + type: "string" + - name: "copyUIDGID" + in: "query" + description: | + If `1`, `true`, then it will copy UID/GID maps to the dest file or + dir + type: "string" + - name: "inputStream" + in: "body" + required: true + description: | + The input stream must be a tar archive compressed with one of the + following algorithms: `identity` (no compression), `gzip`, `bzip2`, + or `xz`. + schema: + type: "string" + format: "binary" + tags: ["Container"] + /containers/prune: + post: + summary: "Delete stopped containers" + produces: + - "application/json" + operationId: "ContainerPrune" + parameters: + - name: "filters" + in: "query" + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels. + type: "string" + responses: + 200: + description: "No error" + schema: + type: "object" + title: "ContainerPruneResponse" + properties: + ContainersDeleted: + description: "Container IDs that were deleted" + type: "array" + items: + type: "string" + SpaceReclaimed: + description: "Disk space reclaimed in bytes" + type: "integer" + format: "int64" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Container"] + /images/json: + get: + summary: "List Images" + description: "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image." + operationId: "ImageList" + produces: + - "application/json" + responses: + 200: + description: "Summary image data for the images matching the query" + schema: + type: "array" + items: + $ref: "#/definitions/ImageSummary" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "all" + in: "query" + description: "Show all images. Only images from a final layer (no children) are shown by default." + type: "boolean" + default: false + - name: "filters" + in: "query" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the images list. + + Available filters: + + - `before`=(`[:]`, `` or ``) + - `dangling=true` + - `label=key` or `label="key=value"` of an image label + - `reference`=(`[:]`) + - `since`=(`[:]`, `` or ``) + - `until=` + type: "string" + - name: "shared-size" + in: "query" + description: "Compute and show shared size as a `SharedSize` field on each image." + type: "boolean" + default: false + - name: "digests" + in: "query" + description: "Show digest information as a `RepoDigests` field on each image." + type: "boolean" + default: false + - name: "manifests" + in: "query" + description: "Include `Manifests` in the image summary." + type: "boolean" + default: false + - name: "identity" + in: "query" + description: "Include `Identity` in each manifest summary. Requires `manifests=1`." + type: "boolean" + default: false + tags: ["Image"] + /build: + post: + summary: "Build an image" + description: | + Build an image from a tar archive with a `Dockerfile` in it. + + The `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/). + + The Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output. + + The build is canceled if the client drops the connection by quitting or being killed. + operationId: "ImageBuild" + consumes: + - "application/octet-stream" + produces: + - "application/json" + parameters: + - name: "inputStream" + in: "body" + description: "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." + schema: + type: "string" + format: "binary" + - name: "dockerfile" + in: "query" + description: "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`." + type: "string" + default: "Dockerfile" + - name: "t" + in: "query" + description: "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters." + type: "string" + - name: "extrahosts" + in: "query" + description: "Extra hosts to add to /etc/hosts" + type: "string" + - name: "remote" + in: "query" + description: "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball." + type: "string" + - name: "q" + in: "query" + description: "Suppress verbose build output." + type: "boolean" + default: false + - name: "nocache" + in: "query" + description: "Do not use the cache when building the image." + type: "boolean" + default: false + - name: "cachefrom" + in: "query" + description: "JSON array of images used for build cache resolution." + type: "string" + - name: "pull" + in: "query" + description: "Attempt to pull the image even if an older image exists locally." + type: "string" + - name: "rm" + in: "query" + description: "Remove intermediate containers after a successful build." + type: "boolean" + default: true + - name: "forcerm" + in: "query" + description: "Always remove intermediate containers, even upon failure." + type: "boolean" + default: false + - name: "memory" + in: "query" + description: "Set memory limit for build." + type: "integer" + format: "int64" + - name: "memswap" + in: "query" + description: "Total memory (memory + swap). Set as `-1` to disable swap." + type: "integer" + format: "int64" + - name: "cpushares" + in: "query" + description: "CPU shares (relative weight)." + type: "integer" + format: "int64" + - name: "cpusetcpus" + in: "query" + description: "CPUs in which to allow execution (e.g., `0-3`, `0,1`)." + type: "string" + - name: "cpuperiod" + in: "query" + description: "The length of a CPU period in microseconds." + type: "integer" + format: "int64" + - name: "cpuquota" + in: "query" + description: "Microseconds of CPU time that the container can get in a CPU period." + type: "integer" + format: "int64" + - name: "buildargs" + in: "query" + description: > + JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker + uses the buildargs as the environment context for commands run via the `Dockerfile` RUN + instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for + passing secret values. + + + For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the + query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded. + + + [Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg) + type: "string" + - name: "shmsize" + in: "query" + description: "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB." + type: "integer" + format: "int64" + - name: "squash" + in: "query" + description: "Squash the resulting images layers into a single layer. *(Experimental release only.)*" + type: "boolean" + - name: "labels" + in: "query" + description: "Arbitrary key/value labels to set on the image, as a JSON map of string pairs." + type: "string" + - name: "networkmode" + in: "query" + description: | + Sets the networking mode for the run commands during build. Supported + standard values are: `bridge`, `host`, `none`, and `container:`. + Any other value is taken as a custom network's name or ID to which this + container should connect to. + type: "string" + - name: "Content-type" + in: "header" + type: "string" + enum: + - "application/x-tar" + default: "application/x-tar" + - name: "X-Registry-Config" + in: "header" + description: | + This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to. + + The key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example: + + ``` + { + "docker.example.com": { + "username": "janedoe", + "password": "hunter2" + }, + "https://index.docker.io/v1/": { + "username": "mobydock", + "password": "conta1n3rize14" + } + } + ``` + + Only the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API. + type: "string" + - name: "platform" + in: "query" + description: "Platform in the format os[/arch[/variant]]" + type: "string" + default: "" + - name: "target" + in: "query" + description: "Target build stage" + type: "string" + default: "" + - name: "outputs" + in: "query" + description: | + BuildKit output configuration in the format of a stringified JSON array of objects. + Each object must have two top-level properties: `Type` and `Attrs`. + The `Type` property must be set to 'moby'. + The `Attrs` property is a map of attributes for the BuildKit output configuration. + See https://docs.docker.com/build/exporters/oci-docker/ for more information. + + Example: + + ``` + [{"Type":"moby","Attrs":{"type":"image","force-compression":"true","compression":"zstd"}}] + ``` + type: "string" + default: "" + - name: "version" + in: "query" + type: "string" + default: "1" + enum: ["1", "2"] + description: | + Version of the builder backend to use. + + - `1` is the first generation classic (deprecated) builder in the Docker daemon (default) + - `2` is [BuildKit](https://github.com/moby/buildkit) + responses: + 200: + description: "no error" + 400: + description: "Bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Image"] + /build/prune: + post: + summary: "Delete builder cache" + produces: + - "application/json" + operationId: "BuildPrune" + parameters: + - name: "reserved-space" + in: "query" + description: "Amount of disk space in bytes to keep for cache" + type: "integer" + format: "int64" + - name: "max-used-space" + in: "query" + description: "Maximum amount of disk space allowed to keep for cache" + type: "integer" + format: "int64" + - name: "min-free-space" + in: "query" + description: "Target amount of free disk space after pruning" + type: "integer" + format: "int64" + - name: "all" + in: "query" + type: "boolean" + description: "Remove all types of build cache" + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the list of build cache objects. + + Available filters: + + - `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time. + - `id=` + - `parent=` + - `type=` + - `description=` + - `inuse` + - `shared` + - `private` + responses: + 200: + description: "No error" + schema: + type: "object" + title: "BuildPruneResponse" + properties: + CachesDeleted: + type: "array" + items: + description: "ID of build cache object" + type: "string" + SpaceReclaimed: + description: "Disk space reclaimed in bytes" + type: "integer" + format: "int64" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Image"] + /images/create: + post: + summary: "Create an image" + description: "Pull or import an image." + operationId: "ImageCreate" + consumes: + - "text/plain" + - "application/octet-stream" + produces: + - "application/json" + responses: + 200: + description: "no error" + 404: + description: "repository does not exist or no read access" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "fromImage" + in: "query" + description: | + Name of the image to pull. If the name includes a tag or digest, specific behavior applies: + + - If only `fromImage` includes a tag, that tag is used. + - If both `fromImage` and `tag` are provided, `tag` takes precedence. + - If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored. + - If neither a tag nor digest is specified, all tags are pulled. + type: "string" + - name: "fromSrc" + in: "query" + description: "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image." + type: "string" + - name: "repo" + in: "query" + description: "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image." + type: "string" + - name: "tag" + in: "query" + description: "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled." + type: "string" + - name: "message" + in: "query" + description: "Set commit message for imported image." + type: "string" + - name: "inputImage" + in: "body" + description: "Image content if the value `-` has been specified in fromSrc query parameter" + schema: + type: "string" + required: false + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + - name: "changes" + in: "query" + description: | + Apply `Dockerfile` instructions to the image that is created, + for example: `changes=ENV DEBUG=true`. + Note that `ENV DEBUG=true` should be URI component encoded. + + Supported `Dockerfile` instructions: + `CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR` + type: "array" + items: + type: "string" + - name: "platform" + in: "query" + description: | + Platform in the format os[/arch[/variant]]. + + When used in combination with the `fromImage` option, the daemon checks + if the given image is present in the local image cache with the given + OS and Architecture, and otherwise attempts to pull the image. If the + option is not set, the host's native OS and Architecture are used. + If the given image does not exist in the local image cache, the daemon + attempts to pull the image with the host's native OS and Architecture. + If the given image does exists in the local image cache, but its OS or + architecture does not match, a warning is produced. + + When used with the `fromSrc` option to import an image from an archive, + this option sets the platform information for the imported image. If + the option is not set, the host's native OS and Architecture are used + for the imported image. + type: "string" + default: "" + tags: ["Image"] + /images/{name}/json: + get: + summary: "Inspect an image" + description: "Return low-level information about an image." + operationId: "ImageInspect" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + $ref: "#/definitions/ImageInspect" + 404: + description: "No such image" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such image: someimage (tag: latest)" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or id" + type: "string" + required: true + - name: "manifests" + in: "query" + description: |- + Include Manifests in the image summary. + + The `manifests` and `platform` options are mutually exclusive, and + an error is produced if both are set. + type: "boolean" + default: false + required: false + - name: "platform" + type: "string" + in: "query" + description: |- + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, + prioritizing the daemon's host platform. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to show inspect. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + The `platform` and `manifests` options are mutually exclusive, and + an error is produced if both are set. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + tags: ["Image"] + /images/{name}/attestations: + get: + summary: "Get attestation statements for an image" + description: | + Return the in-toto attestation statements attached to the image for the + given platform. The daemon locates the attestation manifest(s) that + reference the matching platform image manifest, reads their statement + layers, and returns the verbatim statement JSON together with layer + metadata. + + If the image has no attestations an empty array is returned. + operationId: "ImageAttestations" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + type: "array" + items: + $ref: "#/definitions/AttestationStatement" + 400: + description: "Bad parameter (e.g. malformed `platform` value)" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "No such image, or no manifest found for the requested platform" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + 501: + description: | + The daemon's image backend does not support attestations. This + is returned by the legacy (graphdriver) image store, which does + not preserve OCI image indexes. + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or id" + type: "string" + required: true + - name: "platform" + type: "array" + items: + type: "string" + collectionFormat: "multi" + in: "query" + description: |- + JSON-encoded OCI platform to select the image variant whose + attestations to return. + If omitted, the daemon's default (host) platform is used. + + Only one platform value is currently accepted; passing more than + one returns an error. The parameter is declared as an array so the + wire shape can accept multiple values in the future without an + API version bump. + + Example: `{"os": "linux", "architecture": "amd64"}` + required: false + - name: "type" + type: "array" + items: + type: "string" + collectionFormat: "multi" + in: "query" + description: |- + In-toto predicate type URI to filter returned statements. May be + repeated to accept any of several predicate types. If omitted, all + statements are returned. + + Example: `type=https://slsa.dev/provenance/v0.2&type=https://spdx.dev/Document` + required: false + - name: "statement" + type: "boolean" + in: "query" + description: |- + Include the verbatim in-toto statement body in each returned + entry. Defaults to false; when omitted or false, only the + descriptor and predicate type are returned and statement blobs + are not read. + default: false + required: false + tags: ["Image"] + /images/{name}/history: + get: + summary: "Get the history of an image" + description: "Return parent layers of an image." + operationId: "ImageHistory" + produces: ["application/json"] + responses: + 200: + description: "List of image layers" + schema: + type: "array" + items: + $ref: "#/definitions/ImageHistoryResponseItem" + examples: + application/json: + - Id: "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710" + Created: 1398108230 + CreatedBy: "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /" + Tags: + - "ubuntu:lucid" + - "ubuntu:10.04" + Size: 182964289 + Comment: "" + - Id: "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8" + Created: 1398108222 + CreatedBy: "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/" + Tags: [] + Size: 0 + Comment: "" + - Id: "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158" + Created: 1371157430 + CreatedBy: "" + Tags: + - "scratch12:latest" + - "scratch:latest" + Size: 0 + Comment: "Imported from -" + 404: + description: "No such image" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or ID" + type: "string" + required: true + - name: "platform" + type: "string" + in: "query" + description: | + JSON-encoded OCI platform to select the platform-variant. + If omitted, it defaults to any locally available platform, + prioritizing the daemon's host platform. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to show the history for. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + tags: ["Image"] + /images/{name}/push: + post: + summary: "Push an image" + description: | + Push an image to a registry. + + If you wish to push an image on to a private registry, that image must + already have a tag which references the registry. For example, + `registry.example.com/myimage:latest`. + + The push is cancelled if the HTTP connection is closed. + operationId: "ImagePush" + consumes: + - "application/octet-stream" + responses: + 200: + description: "No error" + 404: + description: "No such image" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + Name of the image to push. For example, `registry.example.com/myimage`. + The image must be present in the local image store with the same name. + + The name should be provided without tag; if a tag is provided, it + is ignored. For example, `registry.example.com/myimage:latest` is + considered equivalent to `registry.example.com/myimage`. + + Use the `tag` parameter to specify the tag to push. + type: "string" + required: true + - name: "tag" + in: "query" + description: | + Tag of the image to push. For example, `latest`. If no tag is provided, + all tags of the given image that are present in the local image store + are pushed. + type: "string" + - name: "platform" + type: "string" + in: "query" + description: | + JSON-encoded OCI platform to select the platform-variant to push. + If not provided, all available variants will attempt to be pushed. + + If the daemon provides a multi-platform image store, this selects + the platform-variant to push to the registry. If the image is + a single-platform image, or if the multi-platform image does not + provide a variant matching the given platform, an error is returned. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + required: true + tags: ["Image"] + /images/{name}/tag: + post: + summary: "Tag an image" + description: | + Create a tag that refers to a source image. + + This creates an additional reference (tag) to the source image. The tag + can include a different repository name and/or tag. If the repository + or tag already exists, it will be overwritten. + operationId: "ImageTag" + responses: + 201: + description: "No error" + 400: + description: "Bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "No such image" + schema: + $ref: "#/definitions/ErrorResponse" + 409: + description: "Conflict" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or ID to tag." + type: "string" + required: true + - name: "repo" + in: "query" + description: "The repository to tag in. For example, `someuser/someimage`." + type: "string" + - name: "tag" + in: "query" + description: "The name of the new tag." + type: "string" + tags: ["Image"] + /images/{name}: + delete: + summary: "Remove an image" + description: | + Remove an image, along with any untagged parent images that were + referenced by that image. + + Images can't be removed if they have descendant images, are being + used by a running container or are being used by a build. + operationId: "ImageDelete" + produces: ["application/json"] + responses: + 200: + description: "The image was deleted successfully" + schema: + type: "array" + items: + $ref: "#/definitions/ImageDeleteResponseItem" + examples: + application/json: + - Untagged: "3e2f21a89f" + - Deleted: "3e2f21a89f" + - Deleted: "53b4f83ac9" + 404: + description: "No such image" + schema: + $ref: "#/definitions/ErrorResponse" + 409: + description: "Conflict" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or ID" + type: "string" + required: true + - name: "force" + in: "query" + description: "Remove the image even if it is being used by stopped containers or has other tags" + type: "boolean" + default: false + - name: "noprune" + in: "query" + description: "Do not delete untagged parent images" + type: "boolean" + default: false + - name: "platforms" + in: "query" + description: | + Select platform-specific content to delete. + Multiple values are accepted. + Each platform is a OCI platform encoded as a JSON string. + type: "array" + items: + # This should be OCIPlatform + # but $ref is not supported for array in query in Swagger 2.0 + # $ref: "#/definitions/OCIPlatform" + type: "string" + tags: ["Image"] + /images/search: + get: + summary: "Search images" + description: "Search for an image on Docker Hub." + operationId: "ImageSearch" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + type: "array" + items: + type: "object" + title: "ImageSearchResponseItem" + properties: + description: + type: "string" + is_official: + type: "boolean" + is_automated: + description: | + Whether this repository has automated builds enabled. + +


+ + > **Deprecated**: This field is deprecated and will always be "false". + type: "boolean" + example: false + name: + type: "string" + star_count: + type: "integer" + examples: + application/json: + - description: "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!" + is_official: true + is_automated: false + name: "alpine" + star_count: 10093 + - description: "Busybox base image." + is_official: true + is_automated: false + name: "Busybox base image." + star_count: 3037 + - description: "The PostgreSQL object-relational database system provides reliability and data integrity." + is_official: true + is_automated: false + name: "postgres" + star_count: 12408 + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "term" + in: "query" + description: "Term to search" + type: "string" + required: true + - name: "limit" + in: "query" + description: "Maximum number of results to return" + type: "integer" + - name: "filters" + in: "query" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters: + + - `is-official=(true|false)` + - `stars=` Matches images that has at least 'number' stars. + type: "string" + tags: ["Image"] + /images/prune: + post: + summary: "Delete unused images" + produces: + - "application/json" + operationId: "ImagePrune" + parameters: + - name: "filters" + in: "query" + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters: + + - `dangling=` When set to `true` (or `1`), prune only + unused *and* untagged images. When set to `false` + (or `0`), all unused images are pruned. + - `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels. + type: "string" + responses: + 200: + description: "No error" + schema: + type: "object" + title: "ImagePruneResponse" + properties: + ImagesDeleted: + description: "Images that were deleted" + type: "array" + items: + $ref: "#/definitions/ImageDeleteResponseItem" + SpaceReclaimed: + description: "Disk space reclaimed in bytes" + type: "integer" + format: "int64" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Image"] + /auth: + post: + summary: "Check auth configuration" + description: | + Validate credentials for a registry and, if available, get an identity + token for accessing the registry without password. + operationId: "SystemAuth" + consumes: ["application/json"] + produces: ["application/json"] + responses: + 200: + description: "An identity token was generated successfully." + schema: + $ref: "#/definitions/AuthResponse" + 204: + description: "No error" + 401: + description: "Auth error" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "authConfig" + in: "body" + description: "Authentication to check" + schema: + $ref: "#/definitions/AuthConfig" + tags: ["System"] + /info: + get: + summary: "Get system information" + operationId: "SystemInfo" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + $ref: "#/definitions/SystemInfo" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["System"] + /version: + get: + summary: "Get version" + description: "Returns the version of Docker that is running and various information about the system that Docker is running on." + operationId: "SystemVersion" + produces: ["application/json"] + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/SystemVersion" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["System"] + /_ping: + get: + summary: "Ping" + description: "This is a dummy endpoint you can use to test if the server is accessible." + operationId: "SystemPing" + produces: ["text/plain"] + responses: + 200: + description: "no error" + schema: + type: "string" + example: "OK" + headers: + Api-Version: + type: "string" + description: "Max API Version the server supports" + Builder-Version: + type: "string" + description: | + Default version of docker image builder + + The default on Linux is version "2" (BuildKit), but the daemon + can be configured to recommend version "1" (classic Builder). + Windows does not yet support BuildKit for native Windows images, + and uses "1" (classic builder) as a default. + + This value is a recommendation as advertised by the daemon, and + it is up to the client to choose which builder to use. + default: "2" + Docker-Experimental: + type: "boolean" + description: "If the server is running with experimental mode enabled" + Swarm: + type: "string" + enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"] + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. + default: "inactive" + Cache-Control: + type: "string" + default: "no-cache, no-store, must-revalidate" + Pragma: + type: "string" + default: "no-cache" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + headers: + Cache-Control: + type: "string" + default: "no-cache, no-store, must-revalidate" + Pragma: + type: "string" + default: "no-cache" + tags: ["System"] + head: + summary: "Ping" + description: "This is a dummy endpoint you can use to test if the server is accessible." + operationId: "SystemPingHead" + produces: ["text/plain"] + responses: + 200: + description: "no error" + schema: + type: "string" + example: "(empty)" + headers: + Api-Version: + type: "string" + description: "Max API Version the server supports" + Builder-Version: + type: "string" + description: "Default version of docker image builder" + Docker-Experimental: + type: "boolean" + description: "If the server is running with experimental mode enabled" + Swarm: + type: "string" + enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"] + description: | + Contains information about Swarm status of the daemon, + and if the daemon is acting as a manager or worker node. + default: "inactive" + Cache-Control: + type: "string" + default: "no-cache, no-store, must-revalidate" + Pragma: + type: "string" + default: "no-cache" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["System"] + /commit: + post: + summary: "Create a new image from a container" + operationId: "ImageCommit" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "no error" + schema: + $ref: "#/definitions/IDResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "containerConfig" + in: "body" + description: "The container configuration" + schema: + $ref: "#/definitions/ContainerConfig" + - name: "container" + in: "query" + description: "The ID or name of the container to commit" + type: "string" + - name: "repo" + in: "query" + description: "Repository name for the created image" + type: "string" + - name: "tag" + in: "query" + description: "Tag name for the create image" + type: "string" + - name: "comment" + in: "query" + description: "Commit message" + type: "string" + - name: "author" + in: "query" + description: "Author of the image (e.g., `John Hannibal Smith `)" + type: "string" + - name: "pause" + in: "query" + description: "Whether to pause the container before committing" + type: "boolean" + default: true + - name: "changes" + in: "query" + description: "`Dockerfile` instructions to apply while committing" + type: "string" + tags: ["Image"] + /events: + get: + summary: "Monitor events" + description: | + Stream real-time events from the server. + + Various objects within Docker report events when something happens to them. + + Containers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune` + + Images report these events: `create`, `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune` + + Volumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune` + + Networks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune` + + The Docker daemon reports these events: `reload` + + Services report these events: `create`, `update`, and `remove` + + Nodes report these events: `create`, `update`, and `remove` + + Secrets report these events: `create`, `update`, and `remove` + + Configs report these events: `create`, `update`, and `remove` + + The Builder reports `prune` events + + operationId: "SystemEvents" + produces: + - "application/jsonl" + - "application/x-ndjson" + - "application/json-seq" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/EventMessage" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "since" + in: "query" + description: "Show events created since this timestamp then stream new events." + type: "string" + - name: "until" + in: "query" + description: "Show events created until this timestamp then stop streaming." + type: "string" + - name: "filters" + in: "query" + description: | + A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters: + + - `config=` config name or ID + - `container=` container name or ID + - `daemon=` daemon name or ID + - `event=` event type + - `image=` image name or ID + - `label=` image or container label + - `network=` network name or ID + - `node=` node ID + - `plugin`= plugin name or ID + - `scope`= local or swarm + - `secret=` secret name or ID + - `service=` service name or ID + - `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config` + - `volume=` volume name + type: "string" + tags: ["System"] + /system/df: + get: + summary: "Get data usage information" + operationId: "SystemDataUsage" + responses: + 200: + description: "no error" + schema: + type: "object" + title: "SystemDataUsageResponse" + properties: + ImageUsage: + $ref: "#/definitions/ImagesDiskUsage" + ContainerUsage: + $ref: "#/definitions/ContainersDiskUsage" + VolumeUsage: + $ref: "#/definitions/VolumesDiskUsage" + BuildCacheUsage: + $ref: "#/definitions/BuildCacheDiskUsage" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "type" + in: "query" + description: | + Object types, for which to compute and return data. + type: "array" + collectionFormat: multi + items: + type: "string" + enum: ["container", "image", "volume", "build-cache"] + - name: "verbose" + in: "query" + description: | + Show detailed information on space usage. + type: "boolean" + default: false + tags: ["System"] + /images/{name}/get: + get: + summary: "Export an image" + description: | + Get a tarball containing all images and metadata for a repository. + + If `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced. + + ### Image tarball format + + An image tarball contains [Content as defined in the OCI Image Layout Specification](https://github.com/opencontainers/image-spec/blob/v1.1.1/image-layout.md#content). + + Additionally, includes the manifest.json file associated with a backwards compatible docker save format. + + If the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs. + + ```json + { + "hello-world": { + "latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1" + } + } + ``` + operationId: "ImageGet" + produces: + - "application/x-tar" + responses: + 200: + description: "no error" + schema: + type: "string" + format: "binary" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or ID" + type: "string" + required: true + - name: "platform" + type: "array" + items: + type: "string" + collectionFormat: "multi" + in: "query" + description: | + JSON encoded OCI platform describing a platform which will be used + to select a platform-specific image to be saved if the image is + multi-platform. + If not provided, the full multi-platform image will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + tags: ["Image"] + /images/get: + get: + summary: "Export several images" + description: | + Get a tarball containing all images and metadata for several image + repositories. + + For each value of the `names` parameter: if it is a specific name and + tag (e.g. `ubuntu:latest`), then only that image (and its parents) are + returned; if it is an image ID, similarly only that image (and its parents) + are returned and there would be no names referenced in the 'repositories' + file for this image ID. + + For details on the format, see the [export image endpoint](#operation/ImageGet). + operationId: "ImageGetAll" + produces: + - "application/x-tar" + responses: + 200: + description: "no error" + schema: + type: "string" + format: "binary" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "names" + in: "query" + description: "Image names to filter by" + type: "array" + items: + type: "string" + - name: "platform" + type: "array" + items: + type: "string" + collectionFormat: "multi" + in: "query" + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to be saved if the image is + multi-platform. If not provided, the full multi-platform image + will be saved. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + tags: ["Image"] + /images/load: + post: + summary: "Import images" + description: | + Load a set of images and tags into a repository. + + For details on the format, see the [export image endpoint](#operation/ImageGet). + operationId: "ImageLoad" + consumes: + - "application/x-tar" + produces: + - "application/json" + responses: + 200: + description: "no error" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "imagesTarball" + in: "body" + description: "Tar archive containing images" + schema: + type: "string" + format: "binary" + - name: "quiet" + in: "query" + description: "Suppress progress details during load." + type: "boolean" + default: false + - name: "platform" + type: "array" + items: + type: "string" + collectionFormat: "multi" + in: "query" + description: | + JSON encoded OCI platform(s) which will be used to select the + platform-specific image(s) to load if the image is + multi-platform. If not provided, the full multi-platform image + will be loaded. + + Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` + tags: ["Image"] + /containers/{id}/exec: + post: + summary: "Create an exec instance" + description: "Run a command inside a running container." + operationId: "ContainerExec" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "no error" + schema: + $ref: "#/definitions/IDResponse" + 404: + description: "no such container" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such container: c2ada9df5af8" + 409: + description: "container is paused" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "execConfig" + in: "body" + description: "Exec configuration" + schema: + type: "object" + title: "ExecConfig" + properties: + AttachStdin: + type: "boolean" + description: "Attach to `stdin` of the exec command." + AttachStdout: + type: "boolean" + description: "Attach to `stdout` of the exec command." + AttachStderr: + type: "boolean" + description: "Attach to `stderr` of the exec command." + ConsoleSize: + type: "array" + description: "Initial console size, as an `[height, width]` array." + x-nullable: true + minItems: 2 + maxItems: 2 + items: + type: "integer" + minimum: 0 + example: [80, 64] + DetachKeys: + type: "string" + description: | + Override the key sequence for detaching a container. Format is + a single character `[a-Z]` or `ctrl-` where `` + is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. + Tty: + type: "boolean" + description: "Allocate a pseudo-TTY." + Env: + description: | + A list of environment variables in the form `["VAR=value", ...]`. + type: "array" + items: + type: "string" + Cmd: + type: "array" + description: "Command to run, as a string or array of strings." + items: + type: "string" + Privileged: + type: "boolean" + description: "Runs the exec process with extended privileges." + default: false + User: + type: "string" + description: | + The user, and optionally, group to run the exec process inside + the container. Format is one of: `user`, `user:group`, `uid`, + or `uid:gid`. + WorkingDir: + type: "string" + description: | + The working directory for the exec process inside the container. + example: + AttachStdin: false + AttachStdout: true + AttachStderr: true + DetachKeys: "ctrl-p,ctrl-q" + Tty: false + Cmd: + - "date" + Env: + - "FOO=bar" + - "BAZ=quux" + required: true + - name: "id" + in: "path" + description: "ID or name of container" + type: "string" + required: true + tags: ["Exec"] + /exec/{id}/start: + post: + summary: "Start an exec instance" + description: | + Starts a previously set up exec instance. If detach is true, this endpoint + returns immediately after starting the command. Otherwise, it sets up an + interactive session with the command. + operationId: "ExecStart" + consumes: + - "application/json" + produces: + - "application/vnd.docker.raw-stream" + - "application/vnd.docker.multiplexed-stream" + responses: + 200: + description: "No error" + 404: + description: "No such exec instance" + schema: + $ref: "#/definitions/ErrorResponse" + 409: + description: "Container is stopped or paused" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "execStartConfig" + in: "body" + schema: + type: "object" + title: "ExecStartConfig" + properties: + Detach: + type: "boolean" + description: "Detach from the command." + example: false + Tty: + type: "boolean" + description: "Allocate a pseudo-TTY." + example: true + ConsoleSize: + type: "array" + description: "Initial console size, as an `[height, width]` array." + x-nullable: true + minItems: 2 + maxItems: 2 + items: + type: "integer" + minimum: 0 + example: [80, 64] + - name: "id" + in: "path" + description: "Exec instance ID" + required: true + type: "string" + tags: ["Exec"] + /exec/{id}/resize: + post: + summary: "Resize an exec instance" + description: | + Resize the TTY session used by an exec instance. This endpoint only works + if `tty` was specified as part of creating and starting the exec instance. + operationId: "ExecResize" + responses: + 200: + description: "No error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "No such exec instance" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Exec instance ID" + required: true + type: "string" + - name: "h" + in: "query" + required: true + description: "Height of the TTY session in characters" + type: "integer" + - name: "w" + in: "query" + required: true + description: "Width of the TTY session in characters" + type: "integer" + tags: ["Exec"] + /exec/{id}/json: + get: + summary: "Inspect an exec instance" + description: "Return low-level information about an exec instance." + operationId: "ExecInspect" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + type: "object" + title: "ExecInspectResponse" + properties: + CanRemove: + type: "boolean" + DetachKeys: + type: "string" + ID: + type: "string" + Running: + type: "boolean" + ExitCode: + type: "integer" + ProcessConfig: + $ref: "#/definitions/ProcessConfig" + OpenStdin: + type: "boolean" + OpenStderr: + type: "boolean" + OpenStdout: + type: "boolean" + ContainerID: + type: "string" + Pid: + type: "integer" + description: "The system process ID for the exec process." + examples: + application/json: + CanRemove: false + ContainerID: "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126" + DetachKeys: "" + ExitCode: 2 + ID: "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b" + OpenStderr: true + OpenStdin: true + OpenStdout: true + ProcessConfig: + arguments: + - "-c" + - "exit 2" + entrypoint: "sh" + privileged: false + tty: true + user: "1000" + Running: false + Pid: 42000 + 404: + description: "No such exec instance" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Exec instance ID" + required: true + type: "string" + tags: ["Exec"] + + /volumes: + get: + summary: "List volumes" + operationId: "VolumeList" + produces: ["application/json"] + responses: + 200: + description: "Summary volume data that matches the query" + schema: + $ref: "#/definitions/VolumeListResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + description: | + JSON encoded value of the filters (a `map[string][]string`) to + process on the volumes list. Available filters: + + - `dangling=` When set to `true` (or `1`), returns all + volumes that are not in use by a container. When set to `false` + (or `0`), only volumes that are in use by one or more + containers are returned. + - `driver=` Matches volumes based on their driver. + - `label=` or `label=:` Matches volumes based on + the presence of a `label` alone or a `label` and a value. + - `name=` Matches all or part of a volume name. + type: "string" + format: "json" + tags: ["Volume"] + + /volumes/create: + post: + summary: "Create a volume" + operationId: "VolumeCreate" + consumes: ["application/json"] + produces: ["application/json"] + responses: + 201: + description: "The volume was created successfully" + schema: + $ref: "#/definitions/Volume" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "volumeConfig" + in: "body" + required: true + description: "Volume configuration" + schema: + $ref: "#/definitions/VolumeCreateRequest" + tags: ["Volume"] + + /volumes/{name}: + get: + summary: "Inspect a volume" + operationId: "VolumeInspect" + produces: ["application/json"] + responses: + 200: + description: "No error" + schema: + $ref: "#/definitions/Volume" + 404: + description: "No such volume" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + required: true + description: "Volume name or ID" + type: "string" + tags: ["Volume"] + + put: + summary: | + "Update a volume. Valid only for Swarm cluster volumes" + operationId: "VolumeUpdate" + consumes: ["application/json"] + produces: ["application/json"] + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such volume" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "The name or ID of the volume" + type: "string" + required: true + - name: "body" + in: "body" + schema: + # though the schema for is an object that contains only a + # ClusterVolumeSpec, wrapping the ClusterVolumeSpec in this object + # means that if, later on, we support things like changing the + # labels, we can do so without duplicating that information to the + # ClusterVolumeSpec. + type: "object" + description: "Volume configuration" + properties: + Spec: + $ref: "#/definitions/ClusterVolumeSpec" + description: | + The spec of the volume to update. Currently, only Availability may + change. All other fields must remain unchanged. + - name: "version" + in: "query" + description: | + The version number of the volume being updated. This is required to + avoid conflicting writes. Found in the volume's `ClusterVolume` + field. + type: "integer" + format: "int64" + required: true + tags: ["Volume"] + + delete: + summary: "Remove a volume" + description: "Instruct the driver to remove the volume." + operationId: "VolumeDelete" + responses: + 204: + description: "The volume was removed" + 404: + description: "No such volume or volume driver" + schema: + $ref: "#/definitions/ErrorResponse" + 409: + description: "Volume is in use and cannot be removed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + required: true + description: "Volume name or ID" + type: "string" + - name: "force" + in: "query" + description: "Force the removal of the volume" + type: "boolean" + default: false + tags: ["Volume"] + + /volumes/prune: + post: + summary: "Delete unused volumes" + produces: + - "application/json" + operationId: "VolumePrune" + parameters: + - name: "filters" + in: "query" + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels. + - `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes. + type: "string" + responses: + 200: + description: "No error" + schema: + type: "object" + title: "VolumePruneResponse" + properties: + VolumesDeleted: + description: "Volumes that were deleted" + type: "array" + items: + type: "string" + SpaceReclaimed: + description: "Disk space reclaimed in bytes" + type: "integer" + format: "int64" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Volume"] + /networks: + get: + summary: "List networks" + description: | + Returns a list of networks. For details on the format, see the + [network inspect endpoint](#operation/NetworkInspect). + + Note that it uses a different, smaller representation of a network than + inspecting a single network. For example, the list of containers attached + to the network is not propagated in API versions 1.28 and up. + operationId: "NetworkList" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + type: "array" + items: + $ref: "#/definitions/NetworkSummary" + examples: + application/json: + - Name: "bridge" + Id: "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566" + Created: "2016-10-19T06:21:00.416543526Z" + Scope: "local" + Driver: "bridge" + EnableIPv4: true + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: "default" + Config: + - + Subnet: "172.17.0.0/16" + Options: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" + com.docker.network.bridge.name: "docker0" + com.docker.network.driver.mtu: "1500" + - Name: "none" + Id: "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794" + Created: "0001-01-01T00:00:00Z" + Scope: "local" + Driver: "null" + EnableIPv4: false + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: "default" + Config: [] + Containers: {} + Options: {} + - Name: "host" + Id: "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e" + Created: "0001-01-01T00:00:00Z" + Scope: "local" + Driver: "host" + EnableIPv4: false + EnableIPv6: false + Internal: false + Attachable: false + Ingress: false + IPAM: + Driver: "default" + Config: [] + Containers: {} + Options: {} + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + description: | + JSON encoded value of the filters (a `map[string][]string`) to process + on the networks list. + + Available filters: + + - `dangling=` When set to `true` (or `1`), returns all + networks that are not in use by a container. When set to `false` + (or `0`), only networks that are in use by one or more + containers are returned. + - `driver=` Matches a network's driver. + - `id=` Matches all or part of a network ID. + - `label=` or `label==` of a network label. + - `name=` Matches all or part of a network name. + - `scope=["swarm"|"global"|"local"]` Filters networks by scope (`swarm`, `global`, or `local`). + - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. + type: "string" + tags: ["Network"] + + /networks/{id}: + get: + summary: "Inspect a network" + operationId: "NetworkInspect" + produces: + - "application/json" + responses: + 200: + description: "No error" + schema: + $ref: "#/definitions/NetworkInspect" + 404: + description: "Network not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Network ID or name" + required: true + type: "string" + - name: "verbose" + in: "query" + description: "Detailed inspect output for troubleshooting" + type: "boolean" + default: false + - name: "scope" + in: "query" + description: "Filter the network by scope (swarm, global, or local)" + type: "string" + tags: ["Network"] + + delete: + summary: "Remove a network" + operationId: "NetworkDelete" + responses: + 204: + description: "No error" + 403: + description: "operation not supported for pre-defined networks" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such network" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Network ID or name" + required: true + type: "string" + tags: ["Network"] + + /networks/create: + post: + summary: "Create a network" + operationId: "NetworkCreate" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "Network created successfully" + schema: + $ref: "#/definitions/NetworkCreateResponse" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 403: + description: | + Forbidden operation. This happens when trying to create a network named after a pre-defined network, + or when trying to create an overlay network on a daemon which is not part of a Swarm cluster. + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "plugin not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "networkConfig" + in: "body" + description: "Network configuration" + required: true + schema: + type: "object" + title: "NetworkCreateRequest" + required: ["Name"] + properties: + Name: + description: "The network's name." + type: "string" + example: "my_network" + Driver: + description: "Name of the network driver plugin to use." + type: "string" + default: "bridge" + example: "bridge" + Scope: + description: | + The level at which the network exists (e.g. `swarm` for cluster-wide + or `local` for machine level). + type: "string" + Internal: + description: "Restrict external access to the network." + type: "boolean" + Attachable: + description: | + Globally scoped network is manually attachable by regular + containers from workers in swarm mode. + type: "boolean" + example: true + Ingress: + description: | + Ingress network is the network which provides the routing-mesh + in swarm mode. + type: "boolean" + example: false + ConfigOnly: + description: | + Creates a config-only network. Config-only networks are placeholder + networks for network configurations to be used by other networks. + Config-only networks cannot be used directly to run containers + or services. + type: "boolean" + default: false + example: false + ConfigFrom: + description: | + Specifies the source which will provide the configuration for + this network. The specified network must be an existing + config-only network; see ConfigOnly. + $ref: "#/definitions/ConfigReference" + IPAM: + description: "Optional custom IP scheme for the network." + $ref: "#/definitions/IPAM" + EnableIPv4: + description: "Enable IPv4 on the network." + type: "boolean" + example: true + EnableIPv6: + description: "Enable IPv6 on the network." + type: "boolean" + example: true + Options: + description: "Network specific options to be used by the drivers." + type: "object" + additionalProperties: + type: "string" + example: + com.docker.network.bridge.default_bridge: "true" + com.docker.network.bridge.enable_icc: "true" + com.docker.network.bridge.enable_ip_masquerade: "true" + com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" + com.docker.network.bridge.name: "docker0" + com.docker.network.driver.mtu: "1500" + Labels: + description: "User-defined key/value metadata." + type: "object" + additionalProperties: + type: "string" + example: + com.example.some-label: "some-value" + com.example.some-other-label: "some-other-value" + tags: ["Network"] + + /networks/{id}/connect: + post: + summary: "Connect a container to a network" + description: "The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container" + operationId: "NetworkConnect" + consumes: + - "application/json" + responses: + 200: + description: "No error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 403: + description: "Operation forbidden" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "Network or container not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Network ID or name" + required: true + type: "string" + - name: "container" + in: "body" + required: true + schema: + $ref: "#/definitions/NetworkConnectRequest" + tags: ["Network"] + + /networks/{id}/disconnect: + post: + summary: "Disconnect a container from a network" + operationId: "NetworkDisconnect" + consumes: + - "application/json" + responses: + 200: + description: "No error" + 403: + description: "Operation not supported for swarm scoped networks" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "Network or container not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "Network ID or name" + required: true + type: "string" + - name: "container" + in: "body" + required: true + schema: + $ref: "#/definitions/NetworkDisconnectRequest" + tags: ["Network"] + /networks/prune: + post: + summary: "Delete unused networks" + produces: + - "application/json" + operationId: "NetworkPrune" + parameters: + - name: "filters" + in: "query" + description: | + Filters to process on the prune list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. + - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels. + type: "string" + responses: + 200: + description: "No error" + schema: + type: "object" + title: "NetworkPruneResponse" + properties: + NetworksDeleted: + description: "Networks that were deleted" + type: "array" + items: + type: "string" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Network"] + /plugins: + get: + summary: "List plugins" + operationId: "PluginList" + description: "Returns information about installed plugins." + produces: ["application/json"] + responses: + 200: + description: "No error" + schema: + type: "array" + items: + $ref: "#/definitions/Plugin" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the plugin list. + + Available filters: + + - `capability=` + - `enable=|` + tags: ["Plugin"] + + /plugins/privileges: + get: + summary: "Get plugin privileges" + operationId: "GetPluginPrivileges" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/PluginPrivilege" + example: + - Name: "network" + Description: "" + Value: + - "host" + - Name: "mount" + Description: "" + Value: + - "/data" + - Name: "device" + Description: "" + Value: + - "/dev/cpu_dma_latency" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "remote" + in: "query" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + tags: + - "Plugin" + + /plugins/pull: + post: + summary: "Install a plugin" + operationId: "PluginPull" + description: | + Pulls and installs a plugin. After the plugin is installed, it can be + enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable). + produces: + - "application/json" + responses: + 204: + description: "no error" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "remote" + in: "query" + description: | + Remote reference for plugin to install. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true + type: "string" + - name: "name" + in: "query" + description: | + Local name for the pulled plugin. + + The `:latest` tag is optional, and is used as the default if omitted. + required: false + type: "string" + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + - name: "body" + in: "body" + schema: + type: "array" + items: + $ref: "#/definitions/PluginPrivilege" + example: + - Name: "network" + Description: "" + Value: + - "host" + - Name: "mount" + Description: "" + Value: + - "/data" + - Name: "device" + Description: "" + Value: + - "/dev/cpu_dma_latency" + tags: ["Plugin"] + /plugins/{name}/json: + get: + summary: "Inspect a plugin" + operationId: "PluginInspect" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Plugin" + 404: + description: "plugin is not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + tags: ["Plugin"] + /plugins/{name}: + delete: + summary: "Remove a plugin" + operationId: "PluginDelete" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Plugin" + 404: + description: "plugin is not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "force" + in: "query" + description: | + Disable the plugin before removing. This may result in issues if the + plugin is in use by a container. + type: "boolean" + default: false + tags: ["Plugin"] + /plugins/{name}/enable: + post: + summary: "Enable a plugin" + operationId: "PluginEnable" + responses: + 200: + description: "no error" + 404: + description: "plugin is not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "timeout" + in: "query" + description: "Set the HTTP client timeout (in seconds)" + type: "integer" + default: 0 + tags: ["Plugin"] + /plugins/{name}/disable: + post: + summary: "Disable a plugin" + operationId: "PluginDisable" + responses: + 200: + description: "no error" + 404: + description: "plugin is not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "force" + in: "query" + description: | + Force disable a plugin even if still in use. + required: false + type: "boolean" + tags: ["Plugin"] + /plugins/{name}/upgrade: + post: + summary: "Upgrade a plugin" + operationId: "PluginUpgrade" + responses: + 204: + description: "no error" + 404: + description: "plugin not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "remote" + in: "query" + description: | + Remote reference to upgrade to. + + The `:latest` tag is optional, and is used as the default if omitted. + required: true + type: "string" + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration to use when pulling a plugin + from a registry. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + - name: "body" + in: "body" + schema: + type: "array" + items: + $ref: "#/definitions/PluginPrivilege" + example: + - Name: "network" + Description: "" + Value: + - "host" + - Name: "mount" + Description: "" + Value: + - "/data" + - Name: "device" + Description: "" + Value: + - "/dev/cpu_dma_latency" + tags: ["Plugin"] + /plugins/create: + post: + summary: "Create a plugin" + operationId: "PluginCreate" + consumes: + - "application/x-tar" + responses: + 204: + description: "no error" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "query" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "tarContext" + in: "body" + description: "Path to tar containing plugin rootfs and manifest" + schema: + type: "string" + format: "binary" + tags: ["Plugin"] + /plugins/{name}/push: + post: + summary: "Push a plugin" + operationId: "PluginPush" + description: | + Push a plugin to the registry. + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + responses: + 200: + description: "no error" + 404: + description: "plugin not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Plugin"] + /plugins/{name}/set: + post: + summary: "Configure a plugin" + operationId: "PluginSet" + consumes: + - "application/json" + parameters: + - name: "name" + in: "path" + description: | + The name of the plugin. The `:latest` tag is optional, and is the + default if omitted. + required: true + type: "string" + - name: "body" + in: "body" + schema: + type: "array" + items: + type: "string" + example: ["DEBUG=1"] + responses: + 204: + description: "No error" + 404: + description: "Plugin not installed" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Plugin"] + /nodes: + get: + summary: "List nodes" + operationId: "NodeList" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/Node" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + description: | + Filters to process on the nodes list, encoded as JSON (a `map[string][]string`). + + Available filters: + - `id=` + - `label=` + - `membership=`(`accepted`|`pending`)` + - `name=` + - `node.label=` + - `role=`(`manager`|`worker`)` + type: "string" + tags: ["Node"] + /nodes/{id}: + get: + summary: "Inspect a node" + operationId: "NodeInspect" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Node" + 404: + description: "no such node" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "The ID or name of the node" + type: "string" + required: true + tags: ["Node"] + delete: + summary: "Delete a node" + operationId: "NodeDelete" + responses: + 200: + description: "no error" + 404: + description: "no such node" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "The ID or name of the node" + type: "string" + required: true + - name: "force" + in: "query" + description: "Force remove a node from the swarm" + default: false + type: "boolean" + tags: ["Node"] + /nodes/{id}/update: + post: + summary: "Update a node" + operationId: "NodeUpdate" + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such node" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "The ID of the node" + type: "string" + required: true + - name: "body" + in: "body" + schema: + $ref: "#/definitions/NodeSpec" + - name: "version" + in: "query" + description: | + The version number of the node object being updated. This is required + to avoid conflicting writes. + type: "integer" + format: "int64" + required: true + tags: ["Node"] + /swarm: + get: + summary: "Inspect swarm" + operationId: "SwarmInspect" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Swarm" + 404: + description: "no such swarm" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Swarm"] + /swarm/init: + post: + summary: "Initialize a new swarm" + operationId: "SwarmInit" + produces: + - "application/json" + - "text/plain" + responses: + 200: + description: "no error" + schema: + description: "The node ID" + type: "string" + example: "7v2t30z9blmxuhnyo6s4cpenp" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is already part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + required: true + schema: + type: "object" + title: "SwarmInitRequest" + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication, as well + as determining the networking interface used for the VXLAN + Tunnel Endpoint (VTEP). This can either be an address/port + combination in the form `192.168.1.1:4567`, or an interface + followed by a port number, like `eth0:4567`. If the port number + is omitted, the default swarm listening port is used. + type: "string" + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: "string" + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + type: "string" + DataPathPort: + description: | + DataPathPort specifies the data path port number for data traffic. + Acceptable port range is 1024 to 49151. + if no port is set or is set to 0, default port 4789 will be used. + type: "integer" + format: "uint32" + DefaultAddrPool: + description: | + Default Address Pool specifies default subnet pools for global + scope networks. + type: "array" + items: + type: "string" + example: ["10.10.0.0/16", "20.20.0.0/16"] + ForceNewCluster: + description: "Force creation of a new swarm." + type: "boolean" + SubnetSize: + description: | + SubnetSize specifies the subnet size of the networks created + from the default subnet pool. + type: "integer" + format: "uint32" + Spec: + $ref: "#/definitions/SwarmSpec" + example: + ListenAddr: "0.0.0.0:2377" + AdvertiseAddr: "192.168.1.1:2377" + DataPathPort: 4789 + DefaultAddrPool: ["10.10.0.0/8", "20.20.0.0/8"] + SubnetSize: 24 + ForceNewCluster: false + Spec: + Orchestration: {} + Raft: {} + Dispatcher: {} + CAConfig: {} + EncryptionConfig: + AutoLockManagers: false + tags: ["Swarm"] + /swarm/join: + post: + summary: "Join an existing swarm" + operationId: "SwarmJoin" + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is already part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + required: true + schema: + type: "object" + title: "SwarmJoinRequest" + properties: + ListenAddr: + description: | + Listen address used for inter-manager communication if the node + gets promoted to manager, as well as determining the networking + interface used for the VXLAN Tunnel Endpoint (VTEP). This is + required for joining a swarm. If the port number is omitted, + the default swarm listening port is used. + type: "string" + AdvertiseAddr: + description: | + Externally reachable address advertised to other nodes. This + can either be an address/port combination in the form + `192.168.1.1:4567`, or an interface followed by a port number, + like `eth0:4567`. If the port number is omitted, the port + number from the listen address is used. If `AdvertiseAddr` is + not specified, it will be automatically detected when possible. + type: "string" + DataPathAddr: + description: | + Address or interface to use for data path traffic (format: + ``), for example, `192.168.1.1`, or an interface, + like `eth0`. If `DataPathAddr` is unspecified, the same address + as `AdvertiseAddr` is used. + + The `DataPathAddr` specifies the address that global scope + network drivers will publish towards other nodes in order to + reach the containers running on this node. Using this parameter + it is possible to separate the container data traffic from the + management traffic of the cluster. + + type: "string" + RemoteAddrs: + description: | + Addresses of manager nodes already participating in the swarm. + type: "array" + items: + type: "string" + JoinToken: + description: "Secret token for joining this swarm." + type: "string" + required: [ListenAddr, RemoteAddrs, JoinToken] + example: + ListenAddr: "0.0.0.0:2377" + AdvertiseAddr: "192.168.1.1:2377" + DataPathAddr: "192.168.1.1" + RemoteAddrs: + - "node1:2377" + JoinToken: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + tags: ["Swarm"] + /swarm/leave: + post: + summary: "Leave a swarm" + operationId: "SwarmLeave" + responses: + 200: + description: "no error" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "force" + description: | + Force leave swarm, even if this is the last manager or that it will + break the cluster. + in: "query" + type: "boolean" + default: false + tags: ["Swarm"] + /swarm/update: + post: + summary: "Update a swarm" + operationId: "SwarmUpdate" + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + required: true + schema: + $ref: "#/definitions/SwarmSpec" + - name: "version" + in: "query" + description: | + The version number of the swarm object being updated. This is + required to avoid conflicting writes. + type: "integer" + format: "int64" + required: true + - name: "rotateWorkerToken" + in: "query" + description: "Rotate the worker join token." + type: "boolean" + default: false + - name: "rotateManagerToken" + in: "query" + description: "Rotate the manager join token." + type: "boolean" + default: false + - name: "rotateManagerUnlockKey" + in: "query" + description: "Rotate the manager unlock key." + type: "boolean" + default: false + tags: ["Swarm"] + /swarm/unlockkey: + get: + summary: "Get the unlock key" + operationId: "SwarmUnlockkey" + consumes: + - "application/json" + responses: + 200: + description: "no error" + schema: + type: "object" + title: "UnlockKeyResponse" + properties: + UnlockKey: + description: "The swarm's unlock key." + type: "string" + example: + UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Swarm"] + /swarm/unlock: + post: + summary: "Unlock a locked manager" + operationId: "SwarmUnlock" + consumes: + - "application/json" + produces: + - "application/json" + parameters: + - name: "body" + in: "body" + required: true + schema: + type: "object" + title: "SwarmUnlockRequest" + properties: + UnlockKey: + description: "The swarm's unlock key." + type: "string" + example: + UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" + responses: + 200: + description: "no error" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Swarm"] + /services: + get: + summary: "List services" + operationId: "ServiceList" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/Service" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the services list. + + Available filters: + + - `id=` + - `label=` + - `mode=["replicated"|"global"]` + - `name=` + - name: "status" + in: "query" + type: "boolean" + description: | + Include service status, with count of running and desired tasks. + tags: ["Service"] + /services/create: + post: + summary: "Create a service" + operationId: "ServiceCreate" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "no error" + schema: + $ref: "#/definitions/ServiceCreateResponse" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 403: + description: "network is not eligible for services" + schema: + $ref: "#/definitions/ErrorResponse" + 409: + description: "name conflicts with an existing service" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + required: true + schema: + allOf: + - $ref: "#/definitions/ServiceSpec" + - type: "object" + example: + Name: "web" + TaskTemplate: + ContainerSpec: + Image: "nginx:alpine" + Mounts: + - + ReadOnly: true + Source: "web-data" + Target: "/usr/share/nginx/html" + Type: "volume" + VolumeOptions: + DriverConfig: {} + Labels: + com.example.something: "something-value" + Hosts: ["10.10.10.10 host1", "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2"] + User: "33" + DNSConfig: + Nameservers: ["8.8.8.8"] + Search: ["example.org"] + Options: ["timeout:3"] + Secrets: + - + File: + Name: "www.example.org.key" + UID: "33" + GID: "33" + Mode: 384 + SecretID: "fpjqlhnwb19zds35k8wn80lq9" + SecretName: "example_org_domain_key" + OomScoreAdj: 0 + LogDriver: + Name: "json-file" + Options: + max-file: "3" + max-size: "10M" + Placement: {} + Resources: + Limits: + MemoryBytes: 104857600 + Reservations: {} + RestartPolicy: + Condition: "on-failure" + Delay: 10000000000 + MaxAttempts: 10 + Mode: + Replicated: + Replicas: 4 + UpdateConfig: + Parallelism: 2 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Ports: + - + Protocol: "tcp" + PublishedPort: 8080 + TargetPort: 80 + Labels: + foo: "bar" + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + tags: ["Service"] + /services/{id}: + get: + summary: "Inspect a service" + operationId: "ServiceInspect" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Service" + 404: + description: "no such service" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "ID or name of service." + required: true + type: "string" + - name: "insertDefaults" + in: "query" + description: "Fill empty fields with default values." + type: "boolean" + default: false + tags: ["Service"] + delete: + summary: "Delete a service" + operationId: "ServiceDelete" + responses: + 200: + description: "no error" + 404: + description: "no such service" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "ID or name of service." + required: true + type: "string" + tags: ["Service"] + /services/{id}/update: + post: + summary: "Update a service" + operationId: "ServiceUpdate" + consumes: ["application/json"] + produces: ["application/json"] + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/ServiceUpdateResponse" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such service" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "ID or name of service." + required: true + type: "string" + - name: "body" + in: "body" + required: true + schema: + allOf: + - $ref: "#/definitions/ServiceSpec" + - type: "object" + example: + Name: "top" + TaskTemplate: + ContainerSpec: + Image: "busybox" + Args: + - "top" + OomScoreAdj: 0 + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: "any" + MaxAttempts: 0 + Placement: {} + ForceUpdate: 0 + Mode: + Replicated: + Replicas: 1 + UpdateConfig: + Parallelism: 2 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + RollbackConfig: + Parallelism: 1 + Delay: 1000000000 + FailureAction: "pause" + Monitor: 15000000000 + MaxFailureRatio: 0.15 + EndpointSpec: + Mode: "vip" + + - name: "version" + in: "query" + description: | + The version number of the service object being updated. This is + required to avoid conflicting writes. + This version number should be the value as currently set on the + service *before* the update. You can find the current version by + calling `GET /services/{id}` + required: true + type: "integer" + - name: "registryAuthFrom" + in: "query" + description: | + If the `X-Registry-Auth` header is not specified, this parameter + indicates where to find registry authorization credentials. + type: "string" + enum: ["spec", "previous-spec"] + default: "spec" + - name: "rollback" + in: "query" + description: | + Set to this parameter to `previous` to cause a server-side rollback + to the previous service spec. The supplied spec will be ignored in + this case. + type: "string" + - name: "X-Registry-Auth" + in: "header" + description: | + A base64url-encoded auth configuration for pulling from private + registries. + + Refer to the [authentication section](#section/Authentication) for + details. + type: "string" + + tags: ["Service"] + /services/{id}/logs: + get: + summary: "Get service logs" + description: | + Get `stdout` and `stderr` logs from a service. See also + [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. + produces: + - "application/vnd.docker.raw-stream" + - "application/vnd.docker.multiplexed-stream" + operationId: "ServiceLogs" + responses: + 200: + description: "logs returned as a stream in response body" + schema: + type: "string" + format: "binary" + 404: + description: "no such service" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such service: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID or name of the service" + type: "string" + - name: "details" + in: "query" + description: "Show service context and extra details provided to logs." + type: "boolean" + default: false + - name: "follow" + in: "query" + description: "Keep connection after returning logs." + type: "boolean" + default: false + - name: "stdout" + in: "query" + description: "Return logs from `stdout`" + type: "boolean" + default: false + - name: "stderr" + in: "query" + description: "Return logs from `stderr`" + type: "boolean" + default: false + - name: "since" + in: "query" + description: "Only return logs since this time, as a UNIX timestamp" + type: "integer" + default: 0 + - name: "timestamps" + in: "query" + description: "Add timestamps to every log line" + type: "boolean" + default: false + - name: "tail" + in: "query" + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + type: "string" + default: "all" + tags: ["Service"] + /tasks: + get: + summary: "List tasks" + operationId: "TaskList" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/Task" + example: + - ID: "0kzzo1i0y4jz6027t0k7aezc7" + Version: + Index: 71 + CreatedAt: "2016-06-07T21:07:31.171892745Z" + UpdatedAt: "2016-06-07T21:07:31.376370513Z" + Spec: + ContainerSpec: + Image: "redis" + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: "any" + MaxAttempts: 0 + Placement: {} + ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" + Slot: 1 + NodeID: "60gvrl6tm78dmak4yl7srz94v" + Status: + Timestamp: "2016-06-07T21:07:31.290032978Z" + State: "running" + Message: "started" + ContainerStatus: + ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035" + PID: 677 + DesiredState: "running" + NetworksAttachments: + - Network: + ID: "4qvuz4ko70xaltuqbt8956gd1" + Version: + Index: 18 + CreatedAt: "2016-06-07T20:31:11.912919752Z" + UpdatedAt: "2016-06-07T21:07:29.955277358Z" + Spec: + Name: "ingress" + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + DriverState: + Name: "overlay" + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: "default" + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + Addresses: + - "10.255.0.10/16" + - ID: "1yljwbmlr8er2waf8orvqpwms" + Version: + Index: 30 + CreatedAt: "2016-06-07T21:07:30.019104782Z" + UpdatedAt: "2016-06-07T21:07:30.231958098Z" + Name: "hopeful_cori" + Spec: + ContainerSpec: + Image: "redis" + Resources: + Limits: {} + Reservations: {} + RestartPolicy: + Condition: "any" + MaxAttempts: 0 + Placement: {} + ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" + Slot: 1 + NodeID: "60gvrl6tm78dmak4yl7srz94v" + Status: + Timestamp: "2016-06-07T21:07:30.202183143Z" + State: "shutdown" + Message: "shutdown" + ContainerStatus: + ContainerID: "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + DesiredState: "shutdown" + NetworksAttachments: + - Network: + ID: "4qvuz4ko70xaltuqbt8956gd1" + Version: + Index: 18 + CreatedAt: "2016-06-07T20:31:11.912919752Z" + UpdatedAt: "2016-06-07T21:07:29.955277358Z" + Spec: + Name: "ingress" + Labels: + com.docker.swarm.internal: "true" + DriverConfiguration: {} + IPAMOptions: + Driver: {} + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + DriverState: + Name: "overlay" + Options: + com.docker.network.driver.overlay.vxlanid_list: "256" + IPAMOptions: + Driver: + Name: "default" + Configs: + - Subnet: "10.255.0.0/16" + Gateway: "10.255.0.1" + Addresses: + - "10.255.0.5/16" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the tasks list. + + Available filters: + + - `desired-state=(running | shutdown | accepted)` + - `id=` + - `label=key` or `label="key=value"` + - `name=` + - `node=` + - `service=` + tags: ["Task"] + /tasks/{id}: + get: + summary: "Inspect a task" + operationId: "TaskInspect" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Task" + 404: + description: "no such task" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "ID of the task" + required: true + type: "string" + tags: ["Task"] + /tasks/{id}/logs: + get: + summary: "Get task logs" + description: | + Get `stdout` and `stderr` logs from a task. + See also [`/containers/{id}/logs`](#operation/ContainerLogs). + + **Note**: This endpoint works only for services with the `local`, + `json-file` or `journald` logging drivers. + operationId: "TaskLogs" + produces: + - "application/vnd.docker.raw-stream" + - "application/vnd.docker.multiplexed-stream" + responses: + 200: + description: "logs returned as a stream in response body" + schema: + type: "string" + format: "binary" + 404: + description: "no such task" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such task: c2ada9df5af8" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + description: "ID of the task" + type: "string" + - name: "details" + in: "query" + description: "Show task context and extra details provided to logs." + type: "boolean" + default: false + - name: "follow" + in: "query" + description: "Keep connection after returning logs." + type: "boolean" + default: false + - name: "stdout" + in: "query" + description: "Return logs from `stdout`" + type: "boolean" + default: false + - name: "stderr" + in: "query" + description: "Return logs from `stderr`" + type: "boolean" + default: false + - name: "since" + in: "query" + description: "Only return logs since this time, as a UNIX timestamp" + type: "integer" + default: 0 + - name: "timestamps" + in: "query" + description: "Add timestamps to every log line" + type: "boolean" + default: false + - name: "tail" + in: "query" + description: | + Only return this number of log lines from the end of the logs. + Specify as an integer or `all` to output all log lines. + type: "string" + default: "all" + tags: ["Task"] + /secrets: + get: + summary: "List secrets" + operationId: "SecretList" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/Secret" + example: + - ID: "blt1owaxmitz71s9v5zh81zun" + Version: + Index: 85 + CreatedAt: "2017-07-20T13:55:28.678958722Z" + UpdatedAt: "2017-07-20T13:55:28.678958722Z" + Spec: + Name: "mysql-passwd" + Labels: + some.label: "some.value" + Driver: + Name: "secret-bucket" + Options: + OptionA: "value for driver option A" + OptionB: "value for driver option B" + - ID: "ktnbjxoalbkvbvedmg1urrz8h" + Version: + Index: 11 + CreatedAt: "2016-11-05T01:20:17.327670065Z" + UpdatedAt: "2016-11-05T01:20:17.327670065Z" + Spec: + Name: "app-dev.crt" + Labels: + foo: "bar" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the secrets list. + + Available filters: + + - `id=` + - `label= or label==value` + - `name=` matches all or part of a secret name (prefix match) + - `names=` matches a secret name (exact match) + tags: ["Secret"] + /secrets/create: + post: + summary: "Create a secret" + operationId: "SecretCreate" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "no error" + schema: + $ref: "#/definitions/IDResponse" + 409: + description: "name conflicts with an existing object" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + schema: + allOf: + - $ref: "#/definitions/SecretSpec" + - type: "object" + example: + Name: "app-key.crt" + Labels: + foo: "bar" + Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + Driver: + Name: "secret-bucket" + Options: + OptionA: "value for driver option A" + OptionB: "value for driver option B" + tags: ["Secret"] + /secrets/{id}: + get: + summary: "Inspect a secret" + operationId: "SecretInspect" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Secret" + examples: + application/json: + ID: "ktnbjxoalbkvbvedmg1urrz8h" + Version: + Index: 11 + CreatedAt: "2016-11-05T01:20:17.327670065Z" + UpdatedAt: "2016-11-05T01:20:17.327670065Z" + Spec: + Name: "app-dev.crt" + Labels: + foo: "bar" + Driver: + Name: "secret-bucket" + Options: + OptionA: "value for driver option A" + OptionB: "value for driver option B" + + 404: + description: "secret not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + description: "ID of the secret" + tags: ["Secret"] + delete: + summary: "Delete a secret" + operationId: "SecretDelete" + produces: + - "application/json" + responses: + 204: + description: "no error" + 404: + description: "secret not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + description: "ID of the secret" + tags: ["Secret"] + /secrets/{id}/update: + post: + summary: "Update a Secret" + operationId: "SecretUpdate" + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such secret" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "The ID or name of the secret" + type: "string" + required: true + - name: "body" + in: "body" + schema: + $ref: "#/definitions/SecretSpec" + description: | + The spec of the secret to update. Currently, only the Labels field + can be updated. All other fields must remain unchanged from the + [SecretInspect endpoint](#operation/SecretInspect) response values. + - name: "version" + in: "query" + description: | + The version number of the secret object being updated. This is + required to avoid conflicting writes. + type: "integer" + format: "int64" + required: true + tags: ["Secret"] + /configs: + get: + summary: "List configs" + operationId: "ConfigList" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + type: "array" + items: + $ref: "#/definitions/Config" + example: + - ID: "ktnbjxoalbkvbvedmg1urrz8h" + Version: + Index: 11 + CreatedAt: "2016-11-05T01:20:17.327670065Z" + UpdatedAt: "2016-11-05T01:20:17.327670065Z" + Spec: + Name: "server.conf" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "filters" + in: "query" + type: "string" + description: | + A JSON encoded value of the filters (a `map[string][]string`) to + process on the configs list. + + Available filters: + + - `id=` + - `label= or label==value` + - `name=` matches all or part of a config name (prefix match) + tags: ["Config"] + /configs/create: + post: + summary: "Create a config" + operationId: "ConfigCreate" + consumes: + - "application/json" + produces: + - "application/json" + responses: + 201: + description: "no error" + schema: + $ref: "#/definitions/IDResponse" + 409: + description: "name conflicts with an existing object" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "body" + in: "body" + schema: + allOf: + - $ref: "#/definitions/ConfigSpec" + - type: "object" + example: + Name: "server.conf" + Labels: + foo: "bar" + Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" + tags: ["Config"] + /configs/{id}: + get: + summary: "Inspect a config" + operationId: "ConfigInspect" + produces: + - "application/json" + responses: + 200: + description: "no error" + schema: + $ref: "#/definitions/Config" + examples: + application/json: + ID: "ktnbjxoalbkvbvedmg1urrz8h" + Version: + Index: 11 + CreatedAt: "2016-11-05T01:20:17.327670065Z" + UpdatedAt: "2016-11-05T01:20:17.327670065Z" + Spec: + Name: "app-dev.crt" + 404: + description: "config not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + description: "ID of the config" + tags: ["Config"] + delete: + summary: "Delete a config" + operationId: "ConfigDelete" + produces: + - "application/json" + responses: + 204: + description: "no error" + 404: + description: "config not found" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + description: "ID of the config" + tags: ["Config"] + /configs/{id}/update: + post: + summary: "Update a Config" + operationId: "ConfigUpdate" + responses: + 200: + description: "no error" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 404: + description: "no such config" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + 503: + description: "node is not part of a swarm" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "id" + in: "path" + description: "The ID or name of the config" + type: "string" + required: true + - name: "body" + in: "body" + schema: + $ref: "#/definitions/ConfigSpec" + description: | + The spec of the config to update. Currently, only the Labels field + can be updated. All other fields must remain unchanged from the + [ConfigInspect endpoint](#operation/ConfigInspect) response values. + - name: "version" + in: "query" + description: | + The version number of the config object being updated. This is + required to avoid conflicting writes. + type: "integer" + format: "int64" + required: true + tags: ["Config"] + /distribution/{name}/json: + get: + summary: "Get image information from the registry" + description: | + Return image digest and platform information by contacting the registry. + operationId: "DistributionInspect" + produces: + - "application/json" + responses: + 200: + description: "descriptor and platform information" + schema: + $ref: "#/definitions/DistributionInspect" + 401: + description: "Failed authentication or no image found" + schema: + $ref: "#/definitions/ErrorResponse" + examples: + application/json: + message: "No such image: someimage (tag: latest)" + 500: + description: "Server error" + schema: + $ref: "#/definitions/ErrorResponse" + parameters: + - name: "name" + in: "path" + description: "Image name or id" + type: "string" + required: true + tags: ["Distribution"] + /session: + post: + summary: "Initialize interactive session" + description: | + Start a new interactive session with a server. Session allows server to + call back to the client for advanced capabilities. + + > **Deprecated**: This endpoint is deprecated and will be removed in a future version. + > Server should support gRPC directly on the listening socket. + + ### Hijacking + + This endpoint hijacks the HTTP connection to HTTP2 transport that allows + the client to expose gPRC services on that connection. + + For example, the client sends this request to upgrade the connection: + + ``` + POST /session HTTP/1.1 + Upgrade: h2c + Connection: Upgrade + ``` + + The Docker daemon responds with a `101 UPGRADED` response follow with + the raw stream: + + ``` + HTTP/1.1 101 UPGRADED + Connection: Upgrade + Upgrade: h2c + ``` + operationId: "Session" + produces: + - "application/vnd.docker.raw-stream" + responses: + 101: + description: "no error, hijacking successful" + 400: + description: "bad parameter" + schema: + $ref: "#/definitions/ErrorResponse" + 500: + description: "server error" + schema: + $ref: "#/definitions/ErrorResponse" + tags: ["Session"] diff --git a/prototypes/api-docs/original/governance.yaml b/prototypes/api-docs/original/governance.yaml new file mode 100644 index 000000000000..e552b2d7b6c9 --- /dev/null +++ b/prototypes/api-docs/original/governance.yaml @@ -0,0 +1,972 @@ +openapi: "3.1.0" + +info: + title: Docker AI Governance Policy API + version: "1" + description: | + HTTP+JSON API for managing Docker governance policies and rules. + + **Resource model.** An organization owns one or more policies. Each policy + contains a list of rules grouped into a single domain: either `network` or + `filesystem`. A policy's domain is derived from its rule actions; mixing + domains within a single policy is not permitted. + + **Lifecycle.** Create a policy with CreatePolicy, then add rules with + CreateRule. Rules can be updated in place with UpdateRule or removed with + DeleteRule. Deleting all rules does not delete the policy itself. + + **Rule evaluation.** All rules in a policy are tested against every request. + `deny` always wins: if any rule matches with `decision: deny`, the request + is denied regardless of any `allow` rules. + + **Enforcement.** Organization policies take precedence over local sandbox + policies and cannot be overridden by individual users. + + **Propagation.** Policy changes take up to five minutes to reach developer + machines after being written. + + See https://docs.docker.com/ai/sandboxes/governance/ for product + documentation. + contact: + name: Docker + url: https://www.docker.com/products/ai-governance/ + +tags: + - name: policies + description: Policy lifecycle management + - name: rules + description: Rule management within an allowlist policy + +servers: + - url: https://hub.docker.com/v2 + +security: + - bearerAuth: [] + +paths: + /orgs/{org_name}/governance/policies: + parameters: + - $ref: "#/components/parameters/OrgName" + get: + operationId: listPolicies + tags: [policies] + summary: List policies + description: > + Returns a shallow summary of all policies for the org. + The rule set is not included; use GetPolicy to fetch the full object. + responses: + "200": + description: Object wrapping an array of policy summaries under `data`. Rule sets are not included; use GetPolicy to fetch a full policy. + content: + application/json: + schema: + type: object + required: [data] + properties: + data: + type: array + items: + $ref: "#/components/schemas/PolicySummary" + examples: + default: + value: + data: + - id: pol_06evsmp24r1pg71cm8500546pkbn + name: "Security Research — hardened" + org: my-org + scope: + teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] + created_at: "2026-04-22T00:00:00Z" + updated_at: "2026-04-22T00:00:00Z" + type: allowlist_v0 + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/PermissionDenied" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalError" + + post: + operationId: createPolicy + tags: [policies] + summary: Create policy + description: > + Creates a new policy with an empty rule set. Rules are added separately + via the rules sub-resource. + requestBody: + description: Policy name and optional scope. + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreatePolicyRequest" + examples: + default: + value: + name: "Security Research — hardened" + scope: + teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] + responses: + "201": + description: Policy created. Returns the new policy without its rule set. + content: + application/json: + schema: + $ref: "#/components/schemas/Policy" + examples: + default: + value: + id: pol_06evsmp24r1pg71cm8500546pkbn + name: "Security Research — hardened" + org: my-org + scope: + teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] + created_at: "2026-04-22T00:00:00Z" + updated_at: "2026-04-22T00:00:00Z" + "400": + $ref: "#/components/responses/InvalidArgument" + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "409": + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/InternalError" + + /orgs/{org_name}/governance/policies/{policy_id}: + parameters: + - $ref: "#/components/parameters/OrgName" + - $ref: "#/components/parameters/PolicyID" + get: + operationId: getPolicy + tags: [policies] + summary: Get policy + description: Returns the full policy including its `allowlist_v0` rule set. + responses: + "200": + description: Full policy including its `allowlist_v0` rule set. + content: + application/json: + schema: + $ref: "#/components/schemas/Policy" + examples: + default: + value: + id: pol_06evsmp24r1pg71cm8500546pkbn + name: "Security Research — hardened" + org: my-org + scope: + teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] + created_at: "2026-04-22T00:00:00Z" + updated_at: "2026-04-22T00:00:00Z" + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: [connect:tcp, connect:udp] + resources: [research.mitre.org, cve.mitre.org] + decision: allow + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/PermissionDenied" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalError" + patch: + operationId: updatePolicy + tags: [policies] + summary: Update policy + description: | + Partially updates a policy's metadata. Only fields present in the + request body are updated; absent fields are left unchanged. The `scope` + object is patched per sub-field: sending `teams` replaces that list, + while an omitted sub-field is left untouched and an empty list clears + it (org-wide). + + The rule set is not modified here — use the rule endpoints for that. + At least one field must be present. Returns the policy in both its old + and new states. Changes may take up to five minutes to reach developer + machines. + requestBody: + description: Fields to update. Absent fields are left unchanged. + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdatePolicyRequest" + examples: + rename: + summary: Rename the policy + value: + name: Security Research + scope: + summary: Restrict to a team + value: + scope: + teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] + responses: + "200": + description: Policy updated, returns old and new states. + content: + application/json: + schema: + $ref: "#/components/schemas/UpdatePolicyResponse" + examples: + default: + value: + old: + id: pol_06evsmp24r1pg71cm8500546pkbn + name: "Security Research — hardened" + org: my-org + scope: + teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] + created_at: "2026-04-22T00:00:00Z" + updated_at: "2026-04-22T00:00:00Z" + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: [connect:tcp, connect:udp] + resources: [research.mitre.org, cve.mitre.org] + decision: allow + new: + id: pol_06evsmp24r1pg71cm8500546pkbn + name: Security Research + org: my-org + scope: + teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] + created_at: "2026-04-22T00:00:00Z" + updated_at: "2026-04-22T10:00:00Z" + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: [connect:tcp, connect:udp] + resources: [research.mitre.org, cve.mitre.org] + decision: allow + "400": + $ref: "#/components/responses/InvalidArgument" + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "409": + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/InternalError" + delete: + operationId: deletePolicy + tags: [policies] + summary: Delete policy + description: | + Permanently deletes the policy and its rule set. Returns the deleted + policy as a courtesy; its `updated_at` is unchanged by the deletion. + Changes may take up to five minutes to reach developer machines. + responses: + "200": + description: Policy deleted, returns the deleted policy. + content: + application/json: + schema: + $ref: "#/components/schemas/DeletePolicyResponse" + examples: + default: + value: + deleted: + id: pol_06evsmp24r1pg71cm8500546pkbn + name: "Security Research — hardened" + org: my-org + scope: + teams: [d290f1ee-6c54-4b01-90e6-d701748f0851] + created_at: "2026-04-22T00:00:00Z" + updated_at: "2026-04-22T00:00:00Z" + allowlist_v0: + domain: network + rules: + - id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: [connect:tcp, connect:udp] + resources: [research.mitre.org, cve.mitre.org] + decision: allow + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/PermissionDenied" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalError" + + /orgs/{org_name}/governance/policies/{policy_id}/rules: + parameters: + - $ref: "#/components/parameters/OrgName" + - $ref: "#/components/parameters/PolicyID" + post: + operationId: createRule + tags: [rules] + summary: Create rule + description: | + Adds a rule to the policy's rule set. All rules in a policy must share + the same domain (network or filesystem); mixing domains is rejected. + + **Network** actions: `connect:tcp`, `connect:udp`. Resources are + hostnames (for example, `example.com`), wildcard subdomains (`*.example.com` + for one level, `**.example.com` for any depth), hostnames with an optional + port (for example, `example.com:443`), or CIDRs in IPv4 or IPv6 notation + (for example, `10.0.0.0/8` or `2001:db8::/32`). + + **Filesystem** actions: `read`, `write`. Resources are paths (for example, + `/data`). Use `*` to match within a single path segment and `**` to match + recursively across segments (for example, `/data/**`). + + Changes may take up to five minutes to reach developer machines. + requestBody: + description: Rule definition including actions, resources, and decision. + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateRuleRequest" + examples: + network: + summary: Network rule + value: + name: allow research mirrors + actions: [connect:tcp, connect:udp] + resources: [research.mitre.org, cve.mitre.org] + decision: allow + filesystem: + summary: Filesystem rule + value: + name: allow data directory + actions: [read, write] + resources: [/data] + decision: allow + responses: + "201": + description: Rule created and added to the policy's rule set. + content: + application/json: + schema: + $ref: "#/components/schemas/Rule" + examples: + network: + summary: Network rule + value: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: [connect:tcp, connect:udp] + resources: [research.mitre.org, cve.mitre.org] + decision: allow + filesystem: + summary: Filesystem rule + value: + id: rule_07fwtnr0kn2qetl1b9olfbyz8kob + name: allow data directory + actions: [read, write] + resources: [/data] + decision: allow + "400": + $ref: "#/components/responses/InvalidArgument" + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "409": + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/InternalError" + + /orgs/{org_name}/governance/policies/{policy_id}/rules/{rule_id}: + parameters: + - $ref: "#/components/parameters/OrgName" + - $ref: "#/components/parameters/PolicyID" + - $ref: "#/components/parameters/RuleID" + patch: + operationId: updateRule + tags: [rules] + summary: Update rule + description: | + Partially updates a rule. Only fields present in the request body are + updated; absent fields are left unchanged. Returns the rule in both its + old and new states. + + Changing `actions` across domains (for example, from network actions to + filesystem actions) is rejected. Changes may take up to five minutes to + reach developer machines. + requestBody: + description: Fields to update. Absent fields are left unchanged. + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateRuleRequest" + examples: + default: + value: + resources: ["research.mitre.org"] + responses: + "200": + description: Rule updated, returns old and new states. + content: + application/json: + schema: + $ref: "#/components/schemas/UpdateRuleResponse" + examples: + default: + value: + old: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: [connect:tcp, connect:udp] + resources: [research.mitre.org, cve.mitre.org] + decision: allow + new: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: [connect:tcp, connect:udp] + resources: [research.mitre.org] + decision: allow + "400": + $ref: "#/components/responses/InvalidArgument" + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/PermissionDenied" + "404": + $ref: "#/components/responses/NotFound" + "409": + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/InternalError" + + delete: + operationId: deleteRule + tags: [rules] + summary: Delete rule + description: | + Deletes a rule from the policy. Returns the deleted rule. Changes may + take up to five minutes to reach developer machines. + responses: + "200": + description: Rule deleted, returns the deleted rule. + content: + application/json: + schema: + $ref: "#/components/schemas/DeleteRuleResponse" + examples: + default: + value: + deleted: + id: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: allow research mirrors + actions: [connect:tcp, connect:udp] + resources: [research.mitre.org, cve.mitre.org] + decision: allow + "401": + $ref: "#/components/responses/Unauthenticated" + "403": + $ref: "#/components/responses/PermissionDenied" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalError" + +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT + description: | + Short-lived JWT obtained by exchanging Docker Hub credentials at + `POST https://hub.docker.com/v2/auth/token`. Pass the JWT in the + `Authorization: Bearer ` header. Tokens expire after a short + period; request a fresh one when you receive a `401`. + + The `password` field of the token request accepts any of the following + credential types: + + | Type | Format | Notes | + |------|--------|-------| + | Password | Plain text | Your Docker Hub account password. | + | Personal Access Token (PAT) | `dckr_pat_*` | Recommended over passwords. Create one under Account Settings → Security. | + | Organization Access Token (OAT) | `dckr_oat_*` | Scoped to an organization. Create one under Organization Settings → Access Tokens. | + + PAT and OAT strings can't be used directly as a bearer token. They must + be exchanged at the token endpoint first. + + See [Docker Hub authentication](https://docs.docker.com/reference/api/hub/latest/#tag/authentication-api/operation/AuthCreateAccessToken) + for full details. + + parameters: + OrgName: + name: org_name + in: path + required: true + description: Docker Hub organization name. + schema: + type: string + examples: + default: + value: my-org + + PolicyID: + name: policy_id + in: path + required: true + description: Unique policy identifier. + schema: + type: string + examples: + default: + value: pol_06evsmp24r1pg71cm8500546pkbn + + RuleID: + name: rule_id + in: path + required: true + description: Unique rule identifier within the policy. + schema: + type: string + examples: + default: + value: rule_06evsm9qjm1pdsk0a8nkfaxy7jna + + schemas: + PolicySummary: + type: object + description: Shallow policy representation returned by ListPolicies. Excludes the rule set. + required: [id, name, org, scope, created_at, updated_at, type] + properties: + id: + type: string + examples: + - pol_06evsmp24r1pg71cm8500546pkbn + name: + type: string + description: Human-readable label, unique within the organization. + examples: + - "Security Research — hardened" + org: + type: string + examples: + - my-org + scope: + $ref: "#/components/schemas/Scope" + created_at: + type: string + format: date-time + examples: + - "2026-04-22T00:00:00Z" + updated_at: + type: string + format: date-time + examples: + - "2026-04-22T00:00:00Z" + type: + type: string + description: > + Identifies the rule-set format. Always `allowlist_v0`, corresponding + to the `allowlist_v0` property on the full Policy object. + examples: + - allowlist_v0 + + Policy: + type: object + description: Full policy representation including the allowlist rule set. + required: [id, name, org, scope, created_at, updated_at] + properties: + id: + type: string + examples: + - pol_06evsmp24r1pg71cm8500546pkbn + name: + type: string + description: Human-readable label, unique within the organization. + examples: + - "Security Research — hardened" + org: + type: string + examples: + - my-org + scope: + $ref: "#/components/schemas/Scope" + created_at: + type: string + format: date-time + examples: + - "2026-04-22T00:00:00Z" + updated_at: + type: string + format: date-time + examples: + - "2026-04-22T00:00:00Z" + allowlist_v0: + $ref: "#/components/schemas/AllowlistV0" + + Scope: + type: object + description: Restricts the policy to specific teams. An empty or absent list means the policy applies org-wide. + properties: + teams: + type: array + items: + type: string + description: Team UUIDs the policy applies to. Each must be a valid team in the org. + examples: + - ["d290f1ee-6c54-4b01-90e6-d701748f0851"] + + AllowlistV0: + type: object + description: | + Network or filesystem allowlist containing a list of rules. Present on + Policy when `PolicySummary.type` is `allowlist_v0`; omitted when the + policy has no rules yet. All rules in an allowlist share the same domain. + All rules are evaluated on every request: `deny` always wins over `allow`. + required: [rules] + properties: + domain: + type: string + description: > + The access-control domain shared by all rules in this allowlist. + Derived from rule actions: network actions (`connect:tcp`, + `connect:udp`) produce `network`; filesystem actions (`read`, + `write`) produce `filesystem`. Present when `rules` is non-empty; + absent when the allowlist has no rules. + enum: [network, filesystem] + examples: + - network + rules: + type: array + items: + $ref: "#/components/schemas/Rule" + + Rule: + type: object + description: A single allow or deny rule within an allowlist policy. + required: [id, name, actions, resources, decision] + properties: + id: + type: string + examples: + - rule_06evsm9qjm1pdsk0a8nkfaxy7jna + name: + type: string + description: Human-readable label for the rule. + examples: + - allow research mirrors + actions: + $ref: "#/components/schemas/RuleActions" + resources: + $ref: "#/components/schemas/RuleResources" + decision: + $ref: "#/components/schemas/RuleDecision" + + CreatePolicyRequest: + type: object + description: Fields required to create a new policy. + required: [name] + properties: + name: + type: string + description: Policy name, unique within the organization. + examples: + - "Security Research — hardened" + scope: + $ref: "#/components/schemas/Scope" + + CreateRuleRequest: + type: object + description: Fields required to create a new rule within a policy's rule set. + required: [name, actions, resources, decision] + properties: + name: + type: string + description: Human-readable label for the rule. + examples: + - allow research mirrors + actions: + $ref: "#/components/schemas/RuleActions" + resources: + $ref: "#/components/schemas/RuleResources" + decision: + $ref: "#/components/schemas/RuleDecision" + + UpdateRuleRequest: + type: object + description: Partial update. Only fields present in the body are updated; absent fields are left unchanged. + properties: + name: + type: string + description: Human-readable label for the rule. + examples: + - allow research mirrors + actions: + $ref: "#/components/schemas/RuleActions" + resources: + $ref: "#/components/schemas/RuleResources" + decision: + $ref: "#/components/schemas/RuleDecision" + + UpdateRuleResponse: + type: object + description: The rule state before and after the update. + required: [old, new] + properties: + old: + $ref: "#/components/schemas/Rule" + new: + $ref: "#/components/schemas/Rule" + + DeleteRuleResponse: + type: object + description: The deleted rule. + required: [deleted] + properties: + deleted: + $ref: "#/components/schemas/Rule" + + UpdatePolicyRequest: + type: object + description: > + Partial update of a policy's metadata. Only fields present in the body + are updated; the rule set is not modified here. At least one field must + be present. + properties: + name: + type: string + minLength: 1 + description: Policy name, unique within the organization. + examples: + - Security Research + scope: + $ref: "#/components/schemas/ScopePatch" + + ScopePatch: + type: object + description: > + Per-sub-field patch of a policy's scope. An omitted sub-field is left + unchanged; a present list replaces that dimension, and an empty list + clears it (making the policy org-wide for that dimension). + properties: + teams: + type: array + items: + type: string + examples: + - ["d290f1ee-6c54-4b01-90e6-d701748f0851"] + + UpdatePolicyResponse: + type: object + description: The full policy before and after the update. + required: [old, new] + properties: + old: + $ref: "#/components/schemas/Policy" + new: + $ref: "#/components/schemas/Policy" + + DeletePolicyResponse: + type: object + description: The full deleted policy. + required: [deleted] + properties: + deleted: + $ref: "#/components/schemas/Policy" + + RuleActions: + type: array + items: + type: string + enum: [connect:tcp, connect:udp, read, write] + minItems: 1 + description: > + Network actions: `connect:tcp`, `connect:udp`. + Filesystem actions: `read`, `write`. + All actions in a rule must belong to the same domain; mixing network + and filesystem actions in one rule is rejected. + examples: + - ["connect:tcp", "connect:udp"] + + RuleResources: + type: array + items: + type: string + minItems: 1 + description: > + Network domain: hostnames (for example, `example.com`), wildcard + subdomains (`*.example.com` or `**.example.com`), hostnames with port + (for example, `example.com:443`), or CIDRs in IPv4 or IPv6 notation + (for example, `10.0.0.0/8` or `2001:db8::/32`). Filesystem domain: + paths (for example, `/data`); `*` matches within one path segment, + `**` matches recursively (for example, `/data/**`). + examples: + - ["research.mitre.org", "cve.mitre.org"] + + RuleDecision: + type: string + enum: [allow, deny] + description: > + Outcome applied when this rule matches a request. `deny` always + wins: if any rule in the policy matches with `decision: deny`, the + request is denied even if other rules match with `decision: allow`. + examples: + - allow + + Error: + type: object + description: Error envelope returned on all non-2xx responses. + required: [error] + properties: + error: + type: object + description: Error detail. + required: [code, message] + examples: + - code: not_found + message: policy not found + properties: + code: + type: string + description: > + Machine-readable error code. `not_found`: the requested resource + does not exist, the org does not exist, or the caller is not a + member of the org (the org's existence is not revealed to callers + who cannot access it). `conflict`: a resource with the same name + already exists. `invalid_argument`: the request body is malformed + or fails validation. `unauthenticated`: missing or invalid + credentials. `permission_denied`: the org is not entitled to use + governance. `limit_exceeded`: the org has reached its maximum + number of policies, or the policy has reached its maximum number + of rules. `unimplemented`: the endpoint or feature is not yet + available. `internal`: unexpected server error. + enum: + - not_found + - conflict + - invalid_argument + - unauthenticated + - permission_denied + - limit_exceeded + - unimplemented + - internal + message: + type: string + + responses: + NotFound: + description: Not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: not_found + message: policy not found + + Conflict: + description: Conflict + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: conflict + message: policy name already in use + + InvalidArgument: + description: Bad request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: invalid_argument + message: "name is required" + + Unauthenticated: + description: Missing or invalid credentials + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: unauthenticated + message: unauthenticated + + PermissionDenied: + description: > + Caller lacks the required permission for this org, or the org is not + entitled to use governance. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: permission_denied + message: permission denied + + Forbidden: + description: > + Caller lacks the required permission for this org, the org is not + entitled to use governance (`permission_denied`), or a creation limit + has been reached (`limit_exceeded`): the org already has the maximum + number of policies, or the policy already has the maximum number of + rules. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + permission_denied: + value: + error: + code: permission_denied + message: permission denied + limit_exceeded: + value: + error: + code: limit_exceeded + message: organization has reached the maximum of 100 policies + + InternalError: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + examples: + default: + value: + error: + code: internal + message: internal error diff --git a/prototypes/api-docs/original/hub.yaml b/prototypes/api-docs/original/hub.yaml new file mode 100644 index 000000000000..3ed32a2c6302 --- /dev/null +++ b/prototypes/api-docs/original/hub.yaml @@ -0,0 +1,4464 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/OAI/OpenAPI-Specification/refs/heads/main/schemas/v3.0/schema.yaml + +openapi: 3.0.3 +info: + title: Docker HUB API + version: 2-beta + x-logo: + url: https://docs.docker.com/assets/images/logo-docker-main.png + href: /reference + description: | + Docker Hub is a service provided by Docker for finding and sharing container images with your team. + + It is the world's largest library and community for container images. + + In addition to the [Docker Hub UI](https://docs.docker.com/docker-hub/) and [Docker Hub CLI tool](https://github.com/docker/hub-tool#readme) (currently experimental), Docker provides an API that allows you to interact with Docker Hub. + + Browse through the Docker Hub API documentation to explore the supported endpoints. +servers: + - description: Docker HUB API + x-audience: public + url: https://hub.docker.com +tags: + - name: changelog + x-displayName: Changelog + description: | + See the [Changelog](/reference/api/hub/changelog) for a summary of changes across Docker Hub API versions. + - name: resources + x-displayName: Resources + description: | + The following resources are available to interact with the documented API: + - [Docker Hub CLI tool](https://github.com/docker/hub-tool#readme) (currently experimental) + - name: rate-limiting + x-displayName: Rate Limiting + description: | + The Docker Hub API is limited on the amount of requests you can perform per minute against it. + + If you haven't hit the limit, each request to the API will return the following headers in the response. + + - `X-RateLimit-Limit` - The limit of requests per minute. + - `X-RateLimit-Remaining` - The remaining amount of calls within the limit period. + - `X-RateLimit-Reset` - The unix timestamp of when the remaining resets. + + If you have hit the limit, you will receive a response status of `429` and the `Retry-After` header in the response. + + The [`Retry-After` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Retry-After) specifies the number of seconds to wait until you can call the API again. + + **Note**: These rate limits are separate from anti-abuse and Docker Hub download, or pull rate limiting. + To learn more about Docker Hub pull rate limiting, see [Usage and limits](https://docs.docker.com/docker-hub/usage/). + - name: authentication + x-displayName: Authentication + description: | + Most Docker Hub API endpoints require you to authenticate using your Docker credentials before using them. + + Additionally, similar to the Docker Hub UI features, API endpoint responses may vary depending on your subscription (Personal, Pro, or Team) and your account's permissions. + + To learn more about the features available in each subscription and to upgrade your existing subscription, see [Docker Pricing](https://www.docker.com/pricing?ref=Docs&refAction=DocsApiHub). + + # Types + + The Docker Hub API supports the following authentication types. + + You must use each authentication type with the [Create access token](#tag/authentication-api/operation/AuthCreateAccessToken) route to obtain a bearer token. + + ## Password + Using a username and password is the most powerful, yet least secure way + to authenticate with Docker as a user. It allows access to resources + for the user without scopes. + + _In general, it is recommended to use a personal access token (PAT) instead._ + + _**The password authentication type is not available if your organization has SSO enforced.**_ + + ## Personal Access Token (PAT) + Using a username and PAT is the most secure way to authenticate with + Docker as a user. PATs are scoped to specific resources and scopes. + + Currently, a PAT is a more secure password due to limited functionality. + In the future, we may add fine-grained access like organization + access tokens for enhanced usage and security. + + ## Organization Access Token (OAT) + Organization access tokens are scoped to specific resources and scopes + in an organization. They are managed by organization owners. + + These tokens are meant for automation and are not meant to be used by + users. + + # Labels + + These labels will show up on routes in this reference that allow for use of bearer + tokens issued from them. + + + + - name: authentication-api + x-displayName: Authentication + description: | + The authentication endpoints allow you to authenticate with Docker Hub APIs. + + For more information, see [Authentication](#tag/authentication). + - name: access-tokens + x-displayName: Personal Access Tokens + description: | + The Personal Access Token endpoints lets you manage personal access tokens. For more information, see [Access Tokens](https://docs.docker.com/security/access-tokens/personal-access-tokens/). + + You can use a personal access token instead of a password in the [Docker CLI](https://docs.docker.com/engine/reference/commandline/cli/) or in the [Create an authentication token](#operation/PostUsersLogin) route to obtain a bearer token. + + ### Scopes + + For each scope grouping (in this case "repo"), you only need to define 1 scope as any lower scopes are assumed. + For example: If you define `repo:write`, the API assumes the scope of both `repo:read` *and* `repo:public_read` as well. + If you were to define both `repo:write` *and* `repo:read`, then `repo:read` is assumed by `repo:write` and ignored. + + ***Treat your personal access token like your password and keep it secret. You cannot retrieve your token after it is generated.*** + - name: audit-logs + x-displayName: Audit Logs + description: | + The Audit Logs API endpoints allow you to query audit log events across a namespace. + + For more information, see [Audit Logs](https://docs.docker.com/admin/activity-logs/). + - name: org-settings + x-displayName: Org Settings + description: | + The Org Settings API endpoints allow you to manage your organization's settings. + - name: repositories + x-displayName: Repositories + description: | + The repository endpoints allow you to access your repository's tags. + - name: orgs + x-displayName: Organizations + x-audience: public + description: | + The organization endpoints allow you to interact with and manage your organizations. + + For more information, see [Organization administration overview](https://docs.docker.com/admin/organization/). + - name: groups + x-displayName: Groups (Teams) + x-audience: public + description: | + The groups endpoints allow you to manage your organization's teams and their members. + + For more information, see [Create and manage a team](https://docs.docker.com/admin/organization/manage/manage-a-team/). + - name: invites + x-displayName: Invites + x-audience: public + description: | + The invites endpoints allow you to manage invites for users to join your Docker organization. + + For more information, see [Invite members](https://docs.docker.com/admin/organization/manage/members/#invite-members). + - name: scim + x-displayName: SCIM + x-audience: public + description: | + SCIM is a provisioning system that lets you manage users within your identity provider (IdP). + + For more information, see [System for Cross-domain Identity management](https://docs.docker.com/security/for-admins/provisioning/scim/). + - name: org-access-tokens + x-displayName: Organization Access Tokens + x-audience: public + description: | + The organization access token endpoints allow you to manage organization access tokens (OATs). See [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information. + + OATs only authenticate requests to the modern namespace-scoped routes under `/v2/namespaces/{namespace}/repositories/`. Legacy repository paths are OAT unsupported, regardless of the token's scopes, and reject every OAT with `403 token issued from organization access token is not allowed`: + + - `GET /v2/repositories/{namespace}/{repository}` — use [Get repository](#tag/repositories/operation/GetRepository) instead. + - `GET /v2/repositories/{namespace}` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead. + - `GET /v2/users/{username}/repositories` — use [List repositories](#tag/repositories/operation/listNamespaceRepositories) instead. +paths: + /v2/users/login: + post: + tags: + - authentication-api + summary: Create an authentication token + operationId: PostUsersLogin + security: [] + deprecated: true + description: | + Creates and returns a bearer token in JWT format that you can use to authenticate with Docker Hub APIs. + + The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. + + _**As of September 16, 2024, this route requires a personal access token (PAT) instead of a password if your organization has SSO enforced.**_ + +
+ Deprecated: Use [Create access token] instead. +
+ requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/UsersLoginRequest" + description: Login details. + required: true + responses: + "200": + description: Authentication successful + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" + "401": + description: Authentication failed or second factor required + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginErrorResponse" + /v2/users/2fa-login: + post: + tags: + - authentication-api + summary: Second factor authentication + operationId: PostUsers2FALogin + security: [] + description: | + When a user has two-factor authentication (2FA) enabled, this is the second call to perform after `/v2/users/login` call. + + Creates and returns a bearer token in JWT format that you can use to authenticate with Docker Hub APIs. + + The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. + + Most Docker Hub APIs require this token either to consume or to get detailed information. For example, to list images in a private repository. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/Users2FALoginRequest" + description: Login details. + required: true + responses: + "200": + description: Authentication successful + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" + "401": + description: Authentication failed + content: + application/json: + schema: + $ref: "#/components/schemas/PostUsers2FALoginErrorResponse" + /v2/auth/token: + post: + tags: + - authentication-api + security: [] + summary: Create access token + operationId: AuthCreateAccessToken + description: | + Creates and returns a short-lived access token in JWT format for use as a bearer when calling Docker APIs. + + If successful, the access token returned should be used in the HTTP Authorization header like + `Authorization: Bearer {access_token}`. + + _**If your organization has SSO enforced, you must use a personal access token (PAT) instead of a password.**_ + requestBody: + content: + application/json: + schema: + description: Request to create access token + type: object + required: + - identifier + - secret + properties: + identifier: + description: | + The identifier of the account to create an access token for. If using a password or personal access token, + this must be a username. If using an organization access token, this must be an organization name. + type: string + example: myusername + secret: + description: | + The secret of the account to create an access token for. This can be a password, personal access token, or + organization access token. + type: string + example: dckr_pat_124509ugsdjga93 + responses: + "200": + description: Token created + content: + application/json: + schema: + $ref: "#/components/schemas/AuthCreateTokenResponse" + "401": + description: Authentication failed + $ref: "#/components/responses/unauthorized" + /v2/access-tokens: + post: + summary: Create personal access token + description: Creates and returns a personal access token. + tags: + - access-tokens + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/createAccessTokenRequest" + required: true + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/createAccessTokensResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" + get: + summary: List personal access tokens + description: Returns a paginated list of personal access tokens. + tags: + - access-tokens + security: + - bearerAuth: [] + parameters: + - in: query + name: page + schema: + type: number + default: 1 + - in: query + name: page_size + schema: + type: number + default: 10 + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/getAccessTokensResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" + /v2/access-tokens/{uuid}: + parameters: + - in: path + name: uuid + required: true + schema: + type: string + patch: + summary: Update personal access token + description: | + Updates a personal access token partially. You can either update the token's label or enable/disable it. + tags: + - access-tokens + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/patchAccessTokenRequest" + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/patchAccessTokenResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" + get: + summary: Get personal access token + description: Returns a personal access token by UUID. + tags: + - access-tokens + security: + - bearerAuth: [] + responses: + "200": + description: OK + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/accessToken" + - type: object + properties: + token: + type: string + example: "" + "401": + $ref: "#/components/responses/Unauthorized" + "404": + $ref: "#/components/responses/NotFound" + delete: + summary: Delete personal access token + description: | + Deletes a personal access token permanently. This cannot be undone. + tags: + - access-tokens + security: + - bearerAuth: [] + responses: + "204": + description: A successful response. + "401": + $ref: "#/components/responses/Unauthorized" + "404": + $ref: "#/components/responses/NotFound" + /v2/auditlogs/{account}/actions: + get: + summary: List audit log actions + description: | + List audit log actions for a namespace to be used as a filter for querying audit log events. + + + operationId: AuditLogs_ListAuditActions + security: + - bearerAuth: [] + responses: + "200": + description: A successful response. + content: + application/json: + schema: + $ref: "#/components/schemas/GetAuditActionsResponse" + examples: + response: + value: + actions: + billing: + actions: + - name: plan.upgrade + description: Occurs when your organization’s billing plan is upgraded to a higher tier plan. + label: Plan Upgraded + - name: plan.downgrade + description: Occurs when your organization’s billing plan is downgraded to a lower tier plan. + label: Plan Downgraded + - name: plan.seat_add + description: Occurs when a seat is added to your organization’s billing plan. + label: Seat Added + - name: plan.seat_remove + description: Occurs when a seat is removed from your organization’s billing plan. + label: Seat Removed + - name: plan.cycle_change + description: Occurs when there is a change in the recurring interval that your organization is charged. + label: Billing Cycle Changed + - name: plan.downgrade_cancel + description: Occurs when a scheduled plan downgrade for your organization is canceled. + label: Plan Downgrade Canceled + - name: plan.seat_removal_cancel + description: Occurs when a scheduled seat removal for an organization’s billing plan is canceled. + label: Seat Removal Canceled + - name: plan.upgrade.request + description: Occurs when a user in your organization requests a plan upgrade. + label: Plan Upgrade Requested + - name: plan.downgrade.request + description: Occurs when a user in your organization requests a plan downgrade. + label: Plan Downgrade Requested + - name: plan.seat_add.request + description: Occurs when a user in your organization requests an increase in the number of seats. + label: Seat Addition Requested + - name: plan.seat_removal.request + description: Occurs when a user in your organization requests a decrease in the number of seats. + label: Seat Removal Requested + - name: plan.cycle_change.request + description: Occurs when a user in your organization requests a change in the billing cycle. + label: Billing Cycle Change Requested + - name: plan.downgrade_cancel.request + description: Occurs when a user in your organization requests a cancellation of a scheduled plan downgrade. + label: Plan Downgrade Cancellation Requested + - name: plan.seat_removal_cancel.request + description: Occurs when a user in your organization requests a cancellation of a scheduled seat removal. + label: Seat Removal Cancellation Requested + - name: plan.product_change + description: Occurs when there is a change in the product that your organization subscribes to. + label: Billing Product Changed + label: Billing + enterprise: + actions: + - name: setting.policy.create + description: Details of adding an admin settings policy + label: Policy created + - name: setting.policy.update + description: Details of updating an admin settings policy + label: Policy updated + - name: setting.policy.delete + description: Details of deleting an admin settings policy + label: Policy deleted + - name: setting.policy.transfer + description: Details of transferring an admin settings policy to another owner + label: Policy transferred + - name: sso.connection.create + description: Details of creating a new org/company SSO connection + label: Create SSO Connection + - name: sso.connection.update + description: Details of updating an existing org/company SSO connection + label: Update SSO Connection + - name: sso.connection.delete + description: Details of deleting an existing org/company SSO connection + label: Delete SSO Connection + - name: sso.connection.enforcement_toggle + description: Details of toggling enforcement on an existing org/company SSO connection + label: Enforce SSO + - name: sso.connection.scim_toggle + description: Details of toggling SCIM on an existing org/company SSO connection + label: Enforce SCIM + - name: sso.connection.scim_token_refresh + description: Details of a SCIM token refresh on an existing org/company SSO connection + label: Refresh SCIM Token + - name: sso.connection.connection_type_change + description: Details of a connection type change on an existing org/company SSO connection + label: Change SSO Connection Type + - name: sso.connection.jit_toggle + description: Details of a JIT toggle on an existing org/company SSO connection + label: Toggle JIT provisioning + label: Enterprise + offload: + actions: + - name: lease.start + description: Details of the started Offload lease. + label: Offload lease start + - name: lease.end + description: Details of the ended Offload lease. + label: Offload lease end + label: Offload + oidc: + actions: + - name: connection.create + description: Details of creating an OIDC connection. + label: OIDC connection created + - name: connection.update + description: Details of updating an OIDC connection. + label: OIDC connection updated + - name: connection.delete + description: Details of deleting an OIDC connection. + label: OIDC connection deleted + label: OIDC + org: + actions: + - name: create + description: Activities related to the creation of a new organization + label: Organization Created + - name: member.add + description: Details of the member added to your organization + label: Organization Member Added + - name: member.remove + description: Details about the member removed from your organization + label: Organization Member Removed + - name: member.role.change + description: Details about the role changed for a member in your organization + label: Member Role Changed + - name: member.invite.send + description: Details of the member invited to your organization + label: Org Member Invited + - name: team.create + description: Activities related to the creation of a team + label: Organization Created + - name: team.update + description: Activities related to the modification of a team + label: Organization Deleted + - name: team.delete + description: Activities related to the deletion of a team + label: Organization Deleted + - name: team.member.add + description: Details of the member added to your team + label: Team Member Added + - name: team.member.remove + description: Details of the member removed from your team + label: Team Member Removed + - name: domain.create + description: Details of the single sign-on domain added to your organization + label: Single Sign-On domain added + - name: domain.verify + description: Details of the single sign-on domain verified for your organization + label: Single Sign-On domain verified + - name: domain.delete + description: Details of the single sign-on domain removed from your organization + label: Single Sign-On domain deleted + - name: domain.auto-provisioning.toggle + description: Details of toggling the Auto-Provisioning feature on a domain on or off + label: Organization Auto-Provisioning Toggled + - name: settings.update + description: Details related to the organization setting that was updated + label: Organization Settings Updated + - name: registry_access.enabled + description: Activities related to enabling Registry Access Management + label: Registry Access Management enabled + - name: registry_access.disabled + description: Activities related to disabling Registry Access Management + label: Registry Access Management disabled + - name: registry_access.registry_added + description: Activities related to the addition of a registry + label: Registry Access Management registry added + - name: registry_access.registry_updated + description: Details related to the registry that was updated + label: Registry Access Management registry updated + - name: registry_access.registry_removed + description: Activities related to the removal of a registry + label: Registry Access Management registry removed + - name: access_token.create + description: Access token created in organization + label: Access token created + - name: access_token.update + description: Access token updated in organization + label: Access token updated + - name: access_token.delete + description: Access token deleted in organization + label: Access token deleted + - name: customrole.create + description: A custom role was created + label: Custom role created + - name: customrole.update + description: An existing custom role was updated + label: Custom role updated + - name: customrole.delete + description: A custom role was deleted + label: Custom role deleted + - name: securepolicyconfigure.create + description: A secure policy configuration was created + label: Secure Policy Configuration created + - name: securepolicyconfigure.update + description: A secure policy configuration was updated + label: Secure Policy Configuration updated + - name: securepolicyconfigure.delete + description: A secure policy configuration was deleted + label: Secure Policy Configuration deleted + - name: securepolicyclient.create + description: A secure policy client was created + label: Secure Policy Client created + - name: securepolicyclient.update + description: A secure policy client was updated + label: Secure Policy Client updated + - name: securepolicyclient.delete + description: A secure policy client was deleted + label: Secure Policy Client deleted + - name: securepolicyprofile.create + description: A secure policy profile was created + label: Secure Policy Profile created + - name: securepolicyprofile.update + description: A secure policy profile was updated + label: Secure Policy Profile updated + - name: securepolicyprofile.delete + description: A secure policy profile was deleted + label: Secure Policy Profile deleted + label: Organization + repo: + actions: + - name: create + description: Activities related to the creation of a new repository + label: Repository Created + - name: update + description: Activities related to the modification of a repository + label: Repository Updated + - name: delete + description: Activities related to the deletion of a repository + label: Repository Deleted + - name: change_privacy + description: Details related to the privacy policies that were updated + label: Privacy Changed + - name: category.updated + description: Details related to updating a repository categories + label: Categories updated + - name: immutable.tags.updated + description: Details related to updating tag immutability of a repository + label: Tag immutability updated + - name: tag.push + description: Activities related to the tags pushed + label: Tag Pushed + - name: tag.delete + description: Activities related to the tags deleted + label: Tag Deleted + label: Repository + "429": + description: "" + content: + application/json: + schema: {} + examples: + response: + value: + detail: Rate limit exceeded + error: false + "500": + description: "" + content: + application/json: + schema: {} + default: + description: An unexpected error response. + content: + application/json: + schema: + $ref: "#/components/schemas/rpcStatus" + parameters: + - name: account + description: Namespace to query audit log actions for. + in: path + required: true + schema: + type: string + tags: + - audit-logs + /v2/auditlogs/{account}: + get: + summary: List audit log events + description: | + List audit log events for a given namespace. + + + operationId: AuditLogs_ListAuditLogs + security: + - bearerAuth: [] + responses: + "200": + description: A successful response. + content: + application/json: + schema: + $ref: "#/components/schemas/GetAuditLogsResponse" + examples: + response: + value: + logs: + - account: docker + action: repo.tag.push + name: docker/example + actor: docker + data: + digest: sha256:c1ae9c435032a276f80220c7d9b40f76266bbe79243d34f9cda30b76fe114dfa + tag: latest + timestamp: "2021-02-19T01:34:35Z" + action_description: | + pushed the tag latest with the digest sha256:c1ae9c435032a to the repository docker/example + - account: docker + action: offload.lease.end + name: docker + actor: docker + data: + lease_id: l_3EgPuRCjtUqT279CFPOQWcO8zOf + resource_type: run_4cpu_8mem + started_at: "2026-06-04T18:24:21Z" + updated_at: "2026-06-04T18:36:43Z" + org_id: b908ca6e-b9a9-4a53-a9a5-6bec96f72432 + user_id: ecae6747-e42c-43cb-925d-cfce1ab32b02 + timestamp: "2026-06-04T18:36:43Z" + action_description: "offload lease 'l_3EgPuRCjtUqT279CFPOQWcO8zOf' ended, ran for '12m22s'" + "429": + description: "" + content: + application/json: + schema: {} + examples: + response: + value: + detail: Rate limit exceeded + error: false + "500": + description: "" + content: + application/json: + schema: {} + default: + description: An unexpected error response. + content: + application/json: + schema: + $ref: "#/components/schemas/rpcStatus" + parameters: + - name: account + description: Namespace to query audit logs for. + in: path + required: true + schema: + type: string + - name: action + description: | + action name one of ["repo.tag.push", ...]. Optional parameter to filter specific audit log actions. + in: query + required: false + schema: + type: string + - name: name + description: | + name. Optional parameter to filter audit log events to a specific name. For repository events, this is the name of the repository. For organization events, this is the name of the organization. For team member events, this is the username of the team member. + in: query + required: false + schema: + type: string + - name: actor + description: | + actor name. Optional parameter to filter audit log events to the specific user who triggered the event. + in: query + required: false + schema: + type: string + - name: from + description: Start of the time window you wish to query audit events for. + in: query + required: false + schema: + type: string + format: date-time + - name: to + description: End of the time window you wish to query audit events for. + in: query + required: false + schema: + type: string + format: date-time + - name: page + description: page - specify page number. Page number to get. + in: query + required: false + schema: + type: integer + format: int32 + default: 1 + - name: page_size + description: page_size - specify page size. Number of events to return per page. + in: query + required: false + schema: + type: integer + format: int32 + default: 25 + tags: + - audit-logs + /v2/orgs/{name}/settings: + parameters: + - in: path + name: name + description: Name of the organization. + required: true + schema: + type: string + get: + summary: Get organization settings + description: | + Returns organization settings by name. + tags: + - org-settings + security: + - bearerAuth: [] + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/orgSettings" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + put: + summary: Update organization settings + description: | + Updates an organization's settings. Some settings are only used when the organization is on a business subscription. + + ***Only users with administrative privileges for the organization (owner role) can modify these settings.*** + + The following settings are only used on a business subscription: + - `restricted_images` + tags: + - org-settings + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + required: + - restricted_images + properties: + restricted_images: + allOf: + - $ref: "#/components/schemas/restricted_images" + - type: object + required: + - enabled + - allow_official_images + - allow_verified_publishers + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/orgSettings" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + /v2/orgs/{name}/access-tokens: + post: + summary: Create access token + description: | + Create an access token for an organization. + tags: + - org-access-tokens + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/createOrgAccessTokenRequest" + required: true + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/createOrgAccessTokenResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + get: + summary: List access tokens + description: | + List access tokens for an organization. + tags: + - org-access-tokens + security: + - bearerAuth: [] + parameters: + - in: query + name: page + schema: + type: number + default: 1 + - in: query + name: page_size + schema: + type: number + default: 10 + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/getOrgAccessTokensResponse" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + + /v2/orgs/{org_name}/access-tokens/{access_token_id}: + parameters: + - $ref: "#/components/parameters/org_name" + - in: path + name: access_token_id + required: true + schema: + type: string + description: The ID of the access token to retrieve + example: "a7a5ef25-8889-43a0-8cc7-f2a94268e861" + get: + summary: Get access token + description: | + Get details of a specific access token for an organization. + tags: + - org-access-tokens + security: + - bearerAuth: [] + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/getOrgAccessTokenResponse" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + patch: + summary: Update access token + description: | + Update a specific access token for an organization. + tags: + - org-access-tokens + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/updateOrgAccessTokenRequest" + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/updateOrgAccessTokenResponse" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + delete: + summary: Delete access token + description: | + Delete a specific access token for an organization. This action cannot be undone. + tags: + - org-access-tokens + security: + - bearerAuth: [] + responses: + "204": + description: Access token deleted successfully + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + /v2/namespaces/{namespace}/repositories/{repository}/tags: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + get: + operationId: ListRepositoryTags + summary: List repository tags + description: | + Returns the list of tags for the specified repository. + + + tags: + - repositories + security: + - bearerAuth: [] + parameters: + - in: query + name: page + required: false + schema: + type: integer + description: Page number to get. Defaults to 1. + - in: query + name: page_size + required: false + schema: + type: integer + description: Number of items to get per page. Defaults to 10. Max of 100. + responses: + "200": + $ref: "#/components/responses/list_tags" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + head: + summary: Check repository tags + description: | + Checks whether the repository has any tags. + + + tags: + - repositories + security: + - bearerAuth: [] + responses: + "200": + description: Repository contains tags + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + /v2/namespaces/{namespace}/repositories/{repository}/tags/{tag}: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + - $ref: "#/components/parameters/tag" + get: + operationId: GetRepositoryTag + summary: Read repository tag + description: | + Returns details for a specific tag in the specified repository. + + + tags: + - repositories + security: + - bearerAuth: [] + responses: + "200": + $ref: "#/components/responses/get_tag" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + head: + summary: Check repository tag + description: | + Checks whether the specified tag exists in the repository. + + + tags: + - repositories + security: + - bearerAuth: [] + responses: + "200": + description: Repository tag exists + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + /v2/namespaces/{namespace}/repositories/{repository}/immutabletags: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + patch: + operationId: UpdateRepositoryImmutableTags + summary: "Update repository immutable tags" + description: | + Updates the immutable tags configuration for this repository. + + **Only users with administrative privileges for the repository can modify these settings.** + + + tags: + - repositories + security: + - bearerAuth: [] + requestBody: + $ref: "#/components/requestBodies/update_repository_immutable_tags_request" + responses: + 200: + $ref: "#/components/responses/update_repository_immutable_tags_response" + 400: + $ref: "#/components/responses/bad_request" + 401: + $ref: "#/components/responses/unauthorized" + 403: + $ref: "#/components/responses/forbidden" + 404: + $ref: "#/components/responses/not_found" + /v2/namespaces/{namespace}/repositories/{repository}/immutabletags/verify: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + post: + operationId: VerifyRepositoryImmutableTags + summary: "Verify repository immutable tags" + description: | + Validates the immutable tags regex passed in the request body and returns a list of tags matching it in this repository. + + **Only users with administrative privileges for the repository can call this endpoint.** + + + tags: + - repositories + security: + - bearerAuth: [] + requestBody: + $ref: "#/components/requestBodies/immutable_tags_verify_request" + responses: + 200: + $ref: "#/components/responses/immutable_tags_verify_response" + 400: + $ref: "#/components/responses/bad_request" + 401: + $ref: "#/components/responses/unauthorized" + 403: + $ref: "#/components/responses/forbidden" + 404: + $ref: "#/components/responses/not_found" + /v2/repositories/{namespace}/{repository}/groups: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + post: + summary: Assign a group (Team) to a repository for access + description: | + Assigns an organization group (team) to a repository with a specified permission level. + + + tags: + - repositories + operationId: CreateRepositoryGroup + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/RepositoryGroupCreationRequest" + example: + group_id: 12345 + permission: "write" + responses: + "200": + description: Repository group permission created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/RepositoryGroup" + example: + group_name: "developers" + permission: "write" + group_id: 12345 + "400": + description: Bad Request - Invalid request parameters + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/NotFound" + /v2/namespaces/{namespace}/repositories: + parameters: + - $ref: "#/components/parameters/namespace" + get: + operationId: listNamespaceRepositories + summary: List repositories in a namespace + description: | + Returns a list of repositories within the specified namespace (organization or user). + + Public repositories are accessible to everyone, while private repositories require appropriate authentication and permissions. + + + + **OAT listing behavior**: an OAT with the `scope-repository-list` scope sees all repositories including private ones. An OAT without that scope only sees public repositories. This filtering is silent: the response is a normal `200` with no indication that private repositories were withheld. + tags: + - repositories + security: + - bearerAuth: [] + - {} # Allow anonymous access for public repositories + parameters: + - in: query + name: page + required: false + schema: + type: integer + minimum: 1 + default: 1 + description: Page number to get. Defaults to 1. + - in: query + name: page_size + required: false + schema: + type: integer + minimum: 1 + maximum: 100 + default: 10 + description: Number of repositories to get per page. Defaults to 10. Max of 100. + - in: query + name: name + required: false + schema: + type: string + description: Filter repositories by name (partial match). + - in: query + name: ordering + required: false + schema: + type: string + enum: + - name + - -name + - last_updated + - -last_updated + - pull_count + - -pull_count + description: | + Order repositories by the specified field. Prefix with '-' for descending order. + Available options: + - `name` / `-name`: Repository name (ascending/descending) + - `last_updated` / `-last_updated`: Last update time (ascending/descending) + - `pull_count` / `-pull_count`: Number of pulls (ascending/descending) + responses: + "200": + description: List of repositories + content: + application/json: + schema: + $ref: "#/components/schemas/list_repositories_response" + examples: + repositories_list: + value: + count: 287 + next: "https://hub.docker.com/v2/namespaces/docker/repositories?page=2&page_size=2" + previous: null + results: + - name: "highland_builder" + namespace: "docker" + repository_type: "image" + status: 1 + status_description: "active" + description: "Image for performing Docker build requests" + is_private: false + star_count: 7 + pull_count: 15722123 + last_updated: "2023-06-20T10:44:45.459826Z" + last_modified: "2024-10-16T13:48:34.145251Z" + date_registered: "2015-05-19T21:13:35.937763Z" + affiliation: "" + media_types: + - "application/octet-stream" + - "application/vnd.docker.container.image.v1+json" + - "application/vnd.docker.distribution.manifest.v1+prettyjws" + content_types: + - "unrecognized" + - "image" + categories: + - name: "Languages & frameworks" + slug: "languages-and-frameworks" + - name: "Integration & delivery" + slug: "integration-and-delivery" + - name: "Operating systems" + slug: "operating-systems" + storage_size: 488723114800 + - name: "whalesay" + namespace: "docker" + repository_type: null + status: 1 + status_description: "active" + description: "An image for use in the Docker demo tutorial" + is_private: false + star_count: 757 + pull_count: 130737682 + last_updated: "2015-06-19T19:06:27.388123Z" + last_modified: "2024-10-16T13:48:34.145251Z" + date_registered: "2015-06-09T18:16:36.527329Z" + affiliation: "" + media_types: + - "application/vnd.docker.distribution.manifest.v1+prettyjws" + content_types: + - "image" + categories: + - name: "Languages & frameworks" + slug: "languages-and-frameworks" + - name: "Integration & delivery" + slug: "integration-and-delivery" + storage_size: 103666708 + "400": + description: Bad Request - Invalid request parameters + content: + application/json: + schema: + $ref: "#/components/schemas/error" + examples: + invalid_ordering: + summary: Invalid ordering value + value: + fields: + ordering: + [ + "Invalid ordering value. Must be one of: name, -name, last_updated, -last_updated, pull_count, -pull_count", + ] + text: "Invalid ordering value" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + description: Page not found - occurs when requesting a page number `>1` that exceeds the available results + content: + application/json: + schema: + $ref: "#/components/schemas/error" + post: + summary: Create a new repository + description: | + Creates a new repository within the specified namespace. The repository will be created + with the provided metadata including name, description, and privacy settings. + + + operationId: CreateRepository + tags: + - repositories + security: + - BearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/repo_creation_request" + example: + name: "my-app" + namespace: "myorganization" + description: "A sample application repository" + full_description: "This is a comprehensive description of my application repository that contains additional details about the project." + registry: "docker.io" + is_private: false + responses: + 201: + description: Repository created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/repository_info" + example: + name: "my-app" + namespace: "myorganization" + repository_type: "image" + status: 1 + status_description: "Active" + description: "A sample application repository" + is_private: false + is_automated: false + star_count: 0 + pull_count: 0 + last_updated: "2025-01-20T10:30:00Z" + date_registered: "2025-01-20T10:30:00Z" + collaborator_count: 0 + hub_user: "myorganization" + has_starred: false + full_description: "This is a comprehensive description of my application repository that contains additional details about the project." + media_types: [] + content_types: [] + categories: [] + immutable_tags_settings: + enabled: false + rules: [] + storage_size: null + source: null + 400: + $ref: "#/components/responses/bad_request" + 401: + $ref: "#/components/responses/unauthorized" + 403: + $ref: "#/components/responses/forbidden" + 404: + $ref: "#/components/responses/not_found" + 500: + $ref: "#/components/responses/internal_error" + /v2/namespaces/{namespace}/repositories/{repository}: + parameters: + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + get: + operationId: GetRepository + summary: Get repository in a namespace + description: | + Returns a repository within the specified namespace (organization or user). + + Public repositories are accessible to everyone, while private repositories require appropriate authentication and permissions. + + + tags: + - repositories + security: + - bearerAuth: [] + - {} # Allow anonymous access for public repositories + responses: + 200: + content: + application/json: + schema: + $ref: "#/components/schemas/repository_info" + example: + name: "my-app" + namespace: "myorganization" + repository_type: "image" + status: 1 + status_description: "Active" + description: "A sample application repository" + is_private: false + is_automated: false + star_count: 0 + pull_count: 0 + last_updated: "2025-01-20T10:30:00Z" + date_registered: "2025-01-20T10:30:00Z" + collaborator_count: 0 + hub_user: "myorganization" + has_starred: false + full_description: "This is a comprehensive description of my application repository that contains additional details about the project." + media_types: [] + content_types: [] + categories: [] + immutable_tags_settings: + enabled: false + rules: [] + storage_size: null + source: null + 401: + $ref: "#/components/responses/unauthorized" + 403: + $ref: "#/components/responses/forbidden" + 404: + $ref: "#/components/responses/not_found" + 500: + $ref: "#/components/responses/internal_error" + head: + operationId: CheckRepository + summary: Check repository in a namespace + description: | + Check a repository within the specified namespace (organization or user). + + Public repositories are accessible to everyone, while private repositories require appropriate authentication and permissions. + + + tags: + - repositories + security: + - bearerAuth: [] + - {} # Allow anonymous access for public repositories + responses: + 200: + content: + application/json: + schema: + $ref: "#/components/schemas/repository_info" + example: + name: "my-app" + namespace: "myorganization" + repository_type: "image" + status: 1 + status_description: "Active" + description: "A sample application repository" + is_private: false + is_automated: false + star_count: 0 + pull_count: 0 + last_updated: "2025-01-20T10:30:00Z" + date_registered: "2025-01-20T10:30:00Z" + collaborator_count: 0 + hub_user: "myorganization" + has_starred: false + full_description: "This is a comprehensive description of my application repository that contains additional details about the project." + media_types: [] + content_types: [] + categories: [] + immutable_tags_settings: + enabled: false + rules: [] + storage_size: null + source: null + 401: + $ref: "#/components/responses/unauthorized" + 403: + $ref: "#/components/responses/forbidden" + 404: + $ref: "#/components/responses/not_found" + 500: + $ref: "#/components/responses/internal_error" + /v2/orgs/{org_name}/members: + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/search" + - $ref: "#/components/parameters/page" + - $ref: "#/components/parameters/page_size" + - $ref: "#/components/parameters/invites" + - $ref: "#/components/parameters/type" + - $ref: "#/components/parameters/role" + get: + summary: List org members + description: | + Returns a list of members for an organization. + + _The following fields are only visible to orgs with insights enabled._ + + - `last_logged_in_at` + - `last_seen_at` + - `last_desktop_version` + + To make visible, please see [View Insights for organization users](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). + + + tags: + - orgs + security: + - bearerAuth: [] + responses: + "200": + description: List of members + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/org_member_paginated" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + /v2/orgs/{org_name}/members/export: + parameters: + - $ref: "#/components/parameters/org_name" + get: + summary: Export org members CSV + description: | + Export members of an organization as a CSV + + + tags: + - orgs + security: + - bearerAuth: [] + responses: + "200": + description: Exported members + content: + text/csv: + schema: + type: array + items: + type: object + required: + - Name + - Username + - Email + - Type + - Role + - Date Joined + properties: + Name: + type: string + description: First and last name of the member + Username: + type: string + description: Username of the member + Email: + type: string + description: Email address of the member + Type: + type: string + description: Type of the member + enum: + - Invitee + - User + Permission: + type: string + description: Permission of the member + enum: + - Owner + - Member + Teams: + type: string + description: Comma-separated list of teams the member is part of + example: team-1, team-2 + Date Joined: + type: string + description: Date the member joined the organization + example: 2020-01-01 15:00:51.193355 +0000 UTC + headers: + Content-Disposition: + schema: + type: string + example: attachment;filename="{org_name}-members-{timestamp}.csv" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + /v2/orgs/{org_name}/members/{username}: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/username" + put: + summary: Update org member (role) + description: | + Updates the role of a member in the organization. + ***Only users in the "owners" group of the organization can use this endpoint.*** + + + tags: + - orgs + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + required: + - role + properties: + role: + type: string + description: | + Role of the member. Valid values are the core roles + `owner`, `editor`, and `member`, or the name of an + existing [custom role](https://docs.docker.com/enterprise/security/roles-and-permissions/custom-roles/manage/). + Use the custom role's name identifier, not its label or UUID. + example: owner + responses: + "200": + description: Member role updated + content: + application/json: + schema: + $ref: "#/components/schemas/org_member" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + delete: + summary: Remove member from org + description: | + Removes the member from the org, ie. all groups in the org, unless they're the last owner + + + tags: + - orgs + security: + - bearerAuth: [] + responses: + "204": + description: Member removed successfully + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + /v2/orgs/{org_name}/invites: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + get: + summary: List org invites + description: | + Return all pending invites for a given org, only team owners can call this endpoint + + + tags: + - invites + security: + - bearerAuth: [] + responses: + "200": + description: "" + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + $ref: "#/components/schemas/invite" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + /v2/orgs/{org_name}/groups: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + get: + summary: Get groups of an organization + description: | + + tags: + - groups + security: + - bearerAuth: [] + parameters: + - $ref: "#/components/parameters/page" + - $ref: "#/components/parameters/page_size" + - in: query + name: username + schema: + type: string + description: Get groups for the specified username in the organization. + - in: query + name: search + schema: + type: string + description: Get groups for the specified group in the organization. + responses: + "200": + description: "" + content: + application/json: + schema: + properties: + count: + type: number + example: 1 + next: + type: string + example: null + previous: + type: string + example: null + results: + type: array + items: + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + post: + summary: Create a new group + description: | + Create a new group within an organization. + + + tags: + - groups + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + required: + - name + properties: + name: + type: string + description: + type: string + responses: + "201": + description: Group created successfully + content: + application/json: + schema: + $ref: "#/components/schemas/org_group" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + /v2/orgs/{org_name}/groups/{group_name}: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" + get: + summary: Get a group of an organization + description: | + + tags: + - groups + security: + - bearerAuth: [] + responses: + "200": + description: "" + content: + application/json: + schema: + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + put: + summary: Update the details for an organization group + description: | + + tags: + - groups + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + required: + - name + properties: + name: + type: string + description: + type: string + responses: + "200": + description: "" + content: + application/json: + schema: + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + patch: + summary: Update some details for an organization group + description: | + + tags: + - groups + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + properties: + name: + type: string + description: + type: string + role: + type: string + description: | + Role assigned to the team. Valid values are the core roles + `owner`, `editor`, and `member`, or the name of an + existing [custom role](https://docs.docker.com/enterprise/security/roles-and-permissions/custom-roles/manage/). + Use the custom role's name identifier, not its label or UUID. + responses: + "200": + description: "" + content: + application/json: + schema: + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + delete: + summary: Delete an organization group + description: | + + tags: + - groups + security: + - bearerAuth: [] + responses: + "204": + description: Group deleted successfully + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + /v2/orgs/{org_name}/groups/{group_name}/members: + x-audience: public + get: + security: + - bearerAuth: [] + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" + - $ref: "#/components/parameters/page" + - $ref: "#/components/parameters/page_size" + - in: query + name: search + schema: + type: string + description: Search members by username, full_name or email. + summary: List members of a group + description: | + List the members (users) that are in a group. + If user is owner of the org or has otherwise elevated permissions, they can search by email and the result will also contain emails. + + + tags: + - groups + responses: + "200": + description: "" + content: + application/json: + schema: + properties: + count: + type: number + example: 1 + next: + type: string + example: null + previous: + type: string + example: null + results: + type: array + items: + $ref: "#/components/schemas/group_member" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + post: + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" + summary: Add a member to a group + description: | + + tags: + - groups + security: + - bearerAuth: [] + requestBody: + $ref: "#/components/requestBodies/add_member_to_org_group" + responses: + "200": + description: OK + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + "500": + $ref: "#/components/responses/internal_error" + /v2/orgs/{org_name}/groups/{group_name}/members/{username}: + x-audience: public + parameters: + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" + - $ref: "#/components/parameters/username" + delete: + summary: Remove a user from a group + description: | + + tags: + - groups + security: + - bearerAuth: [] + responses: + "204": + description: User removed successfully + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + /v2/invites/{id}: + x-audience: public + parameters: + - in: path + name: id + required: true + schema: + type: string + delete: + summary: Cancel an invite + description: | + Mark the invite as cancelled so it doesn't show up on the list of pending invites + + + tags: + - invites + security: + - bearerAuth: [] + responses: + "204": + description: "" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + /v2/invites/{id}/resend: + x-audience: public + parameters: + - in: path + name: id + schema: + type: string + required: true + patch: + summary: Resend an invite + description: | + Resend a pending invite to the user, any org owner can resend an invite + + + tags: + - invites + security: + - bearerAuth: [] + responses: + "204": + description: "" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + /v2/invites/bulk: + x-audience: public + parameters: + - $ref: "#/components/parameters/bulk_invite" + post: + summary: Bulk create invites + description: | + Create multiple invites by emails or DockerIDs. Only a team owner can create invites. + + + tags: + - invites + requestBody: + $ref: "#/components/requestBodies/bulk_invite_request" + security: + - bearerAuth: [] + responses: + "202": + description: Accepted + content: + application/json: + schema: + type: object + properties: + invitees: + $ref: "#/components/schemas/bulk_invite" + "400": + $ref: "#/components/responses/bad_request" + "409": + $ref: "#/components/responses/conflict" + /v2/scim/2.0/ServiceProviderConfig: + x-audience: public + get: + summary: Get service provider config + description: | + Returns a service provider config for Docker's configuration. + tags: + - scim + security: + - bearerSCIMAuth: [] + responses: + "200": + $ref: "#/components/responses/scim_get_service_provider_config_resp" + "401": + $ref: "#/components/responses/scim_unauthorized" + "500": + $ref: "#/components/responses/scim_error" + /v2/scim/2.0/ResourceTypes: + x-audience: public + get: + summary: List resource types + description: | + Returns all resource types supported for the SCIM configuration. + tags: + - scim + security: + - bearerSCIMAuth: [] + responses: + "200": + $ref: "#/components/responses/scim_get_resource_types_resp" + "401": + $ref: "#/components/responses/scim_unauthorized" + "500": + $ref: "#/components/responses/scim_error" + /v2/scim/2.0/ResourceTypes/{name}: + x-audience: public + get: + summary: Get a resource type + description: | + Returns a resource type by name. + tags: + - scim + parameters: + - name: name + in: path + schema: + type: string + example: User + required: true + security: + - bearerSCIMAuth: [] + responses: + "200": + $ref: "#/components/responses/scim_get_resource_type_resp" + "401": + $ref: "#/components/responses/scim_unauthorized" + "404": + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" + /v2/scim/2.0/Schemas: + x-audience: public + get: + summary: List schemas + description: | + Returns all schemas supported for the SCIM configuration. + tags: + - scim + security: + - bearerSCIMAuth: [] + responses: + "200": + $ref: "#/components/responses/scim_get_schemas_resp" + "401": + $ref: "#/components/responses/scim_unauthorized" + "500": + $ref: "#/components/responses/scim_error" + /v2/scim/2.0/Schemas/{id}: + x-audience: public + get: + summary: Get a schema + description: | + Returns a schema by ID. + tags: + - scim + parameters: + - name: id + in: path + schema: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + required: true + security: + - bearerSCIMAuth: [] + responses: + "200": + $ref: "#/components/responses/scim_get_schema_resp" + "401": + $ref: "#/components/responses/scim_unauthorized" + "404": + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" + /v2/scim/2.0/Users: + x-audience: public + get: + summary: List users + description: | + Returns paginated users for an organization. Use `startIndex` and `count` query parameters to receive paginated results. + + **Sorting:** + + Sorting allows you to specify the order in which resources are returned by specifying a combination of `sortBy` and `sortOrder` query parameters. + + The `sortBy` parameter specifies the attribute whose value will be used to order the returned responses. The `sortOrder` parameter defines the order in which the `sortBy` parameter is applied. Allowed values are "ascending" and "descending". + + **Filtering:** + + You can request a subset of resources by specifying the `filter` query parameter containing a filter expression. Attribute names and attribute operators used in filters are case insensitive. The filter parameter must contain at least one valid expression. Each expression must contain an attribute name followed by an attribute operator and an optional value. + + Supported operators are listed below. + + - `eq` equal + - `ne` not equal + - `co` contains + - `sw` starts with + - `and` Logical "and" + - `or` Logical "or" + - `not` "Not" function + - `()` Precedence grouping + tags: + - scim + security: + - bearerSCIMAuth: [] + parameters: + - name: startIndex + in: query + schema: + type: integer + minimum: 1 + description: "" + example: 1 + - name: count + in: query + schema: + type: integer + minimum: 1 + maximum: 200 + description: "" + example: 10 + - name: filter + in: query + schema: + type: string + description: "" + example: userName eq "jon.snow@docker.com" + - $ref: "#/components/parameters/scim_attributes" + - name: sortOrder + in: query + schema: + type: string + enum: + - ascending + - descending + - name: sortBy + in: query + schema: + type: string + description: User attribute to sort by. + example: userName + responses: + "200": + $ref: "#/components/responses/scim_get_users_resp" + "400": + $ref: "#/components/responses/scim_bad_request" + "401": + $ref: "#/components/responses/scim_unauthorized" + "403": + $ref: "#/components/responses/scim_forbidden" + "404": + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" + post: + summary: Create user + description: | + Creates a user. If the user already exists by email, they are assigned to the organization on the "company" team. + tags: + - scim + security: + - bearerSCIMAuth: [] + requestBody: + $ref: "#/components/requestBodies/scim_create_user_request" + responses: + "201": + $ref: "#/components/responses/scim_create_user_resp" + "400": + $ref: "#/components/responses/scim_bad_request" + "401": + $ref: "#/components/responses/scim_unauthorized" + "403": + $ref: "#/components/responses/scim_forbidden" + "404": + $ref: "#/components/responses/scim_not_found" + "409": + $ref: "#/components/responses/scim_conflict" + "500": + $ref: "#/components/responses/scim_error" + /v2/scim/2.0/Users/{id}: + x-audience: public + parameters: + - $ref: "#/components/parameters/scim_user_id" + get: + summary: Get a user + description: | + Returns a user by ID. + tags: + - scim + security: + - bearerSCIMAuth: [] + responses: + "200": + $ref: "#/components/responses/scim_get_user_resp" + "400": + $ref: "#/components/responses/scim_bad_request" + "401": + $ref: "#/components/responses/scim_unauthorized" + "403": + $ref: "#/components/responses/scim_forbidden" + "404": + $ref: "#/components/responses/scim_not_found" + "500": + $ref: "#/components/responses/scim_error" + put: + summary: Update a user + description: | + Updates a user. This route is used to change the user's name, activate, and deactivate the user. + tags: + - scim + security: + - bearerSCIMAuth: [] + requestBody: + $ref: "#/components/requestBodies/scim_update_user_request" + responses: + "200": + $ref: "#/components/responses/scim_update_user_resp" + "400": + $ref: "#/components/responses/scim_bad_request" + "401": + $ref: "#/components/responses/scim_unauthorized" + "403": + $ref: "#/components/responses/scim_forbidden" + "404": + $ref: "#/components/responses/scim_not_found" + "409": + $ref: "#/components/responses/scim_conflict" + "500": + $ref: "#/components/responses/scim_error" +components: + responses: + BadRequest: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/ValueError" + Unauthorized: + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + Forbidden: + description: Forbidden + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + NotFound: + description: Not Found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + list_tags: + description: list repository tags + content: + application/json: + schema: + $ref: "#/components/schemas/paginated_tags" + get_tag: + description: repository tag + content: + application/json: + schema: + $ref: "#/components/schemas/tag" + bad_request: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/error" + unauthorized: + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/error" + forbidden: + description: Forbidden + content: + application/json: + schema: + $ref: "#/components/schemas/error" + not_found: + description: Not Found + content: + application/json: + schema: + $ref: "#/components/schemas/error" + conflict: + description: Conflict + content: + application/json: + schema: + $ref: "#/components/schemas/error" + internal_error: + description: Internal + content: + application/json: + schema: + $ref: "#/components/schemas/error" + scim_bad_request: + description: Bad Request + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "400" + scimType: + type: string + description: Some types of errors will return this per the specification. + scim_unauthorized: + description: Unauthorized + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "401" + scim_forbidden: + description: Forbidden + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "403" + scim_not_found: + description: Not Found + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "404" + scim_conflict: + description: Conflict + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "409" + scim_error: + description: Internal Error + content: + application/scim+json: + schema: + allOf: + - $ref: "#/components/schemas/scim_error" + - properties: + status: + example: "500" + scim_get_service_provider_config_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_service_provider_config" + scim_get_resource_types_resp: + description: "" + content: + application/scim+json: + schema: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + totalResults: + type: integer + example: 1 + resources: + type: array + items: + $ref: "#/components/schemas/scim_resource_type" + scim_get_resource_type_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_resource_type" + scim_get_schemas_resp: + description: "" + content: + application/scim+json: + schema: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + totalResults: + type: integer + example: 1 + resources: + type: array + items: + $ref: "#/components/schemas/scim_schema" + scim_get_schema_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_schema" + scim_get_users_resp: + description: "" + content: + application/scim+json: + schema: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - urn:ietf:params:scim:api:messages:2.0:ListResponse + totalResults: + type: integer + example: 1 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 10 + resources: + type: array + items: + $ref: "#/components/schemas/scim_user" + scim_create_user_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_user" + scim_get_user_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_user" + scim_update_user_resp: + description: "" + content: + application/scim+json: + schema: + $ref: "#/components/schemas/scim_user" + update_repository_immutable_tags_response: + description: "" + content: + application/json: + schema: + $ref: "#/components/schemas/repository_info" + immutable_tags_verify_response: + description: "" + content: + application/json: + schema: + $ref: "#/components/schemas/immutable_tags_verify_response" + schemas: + update_repository_immutable_tags_request: + type: object + properties: + immutable_tags: + type: boolean + description: Whether immutable tags are enabled + immutable_tags_rules: + type: array + items: + type: string + description: List of immutable tag rules + example: + - "v.*" + - ".*-RELEASE" + required: + - immutable_tags + - immutable_tags_rules + repo_creation_request: + type: object + required: + - name + - namespace + properties: + name: + type: string + description: | + The name of the repository. Must be 2-255 characters long and may only include + alphanumeric characters, periods (.), underscores (_), or hyphens (-). + Letters must be lowercase. + minLength: 2 + maxLength: 255 + pattern: "^[a-z0-9]+(?:[._-][a-z0-9]+)*$" + example: "my-app" + namespace: + type: string + description: The namespace where the repository will be created + example: "myorganization" + description: + type: string + description: Short description of the repository + maxLength: 100 + example: "A sample application repository" + full_description: + type: string + description: Detailed description of the repository + maxLength: 25000 + example: "This is a comprehensive description of my application repository that contains additional details about the project, its purpose, usage instructions, and other relevant information." + registry: + type: string + description: The registry where the repository will be hosted + example: "docker.io" + is_private: + type: boolean + description: Whether the repository should be private + default: false + example: false + RepositoryGroupCreationRequest: + type: object + required: + - group_id + - permission + properties: + group_id: + type: integer + format: int64 + description: The ID of the organization group to grant access to + example: 12345 + permission: + type: string + description: | + The permission level to grant to the group: + - read: Can view and pull from the repository + - write: Can view, pull, and push to the repository + - admin: Can view, pull, push, and manage repository settings + enum: ["read", "write", "admin"] + example: "write" + RepositoryGroup: + type: object + properties: + group_name: + type: string + description: The name of the group + example: "developers" + permission: + type: string + description: The permission level granted to the group + enum: ["read", "write", "admin"] + example: "write" + group_id: + type: integer + format: int64 + description: The ID of the group + example: 12345 + repository_info: + type: object + properties: + user: + type: string + description: Username of the repository owner + name: + type: string + description: Repository name + namespace: + type: string + description: Repository namespace + repository_type: + type: string + nullable: true + description: Type of the repository + status: + type: integer + description: Repository status code + status_description: + type: string + description: Description of the repository status + description: + type: string + description: Short description of the repository + is_private: + type: boolean + description: Whether the repository is private + is_automated: + type: boolean + description: Whether the repository has automated builds + star_count: + type: integer + format: int64 + description: Number of stars + pull_count: + type: integer + format: int64 + description: Number of pulls + last_updated: + type: string + format: date-time + example: "2021-01-05T21:06:53.506400Z" + description: ISO 8601 timestamp of when repository was last updated + last_modified: + type: string + format: date-time + example: "2021-01-05T21:06:53.506400Z" + nullable: true + description: ISO 8601 timestamp of when repository was last modified + date_registered: + type: string + format: date-time + example: "2021-01-05T21:06:53.506400Z" + description: ISO 8601 timestamp of when repository was created + collaborator_count: + type: integer + format: int64 + description: Number of collaborators + affiliation: + type: string + nullable: true + description: Repository affiliation + hub_user: + type: string + nullable: true + description: Hub user information + has_starred: + type: boolean + description: Whether the current user has starred this repository + full_description: + type: string + nullable: true + description: Full description of the repository + permissions: + $ref: "#/components/schemas/repo_permissions" + media_types: + type: array + items: + type: string + nullable: true + description: Supported media types + content_types: + type: array + items: + type: string + description: Supported content types + categories: + type: array + items: + $ref: "#/components/schemas/category" + description: Repository categories + immutable_tags_settings: + $ref: "#/components/schemas/immutable_tags_settings" + storage_size: + type: integer + format: int64 + nullable: true + description: Storage size in bytes + source: + type: string + nullable: true + description: Source of the repository, where it was created from + required: + - user + - name + - namespace + - status + - status_description + - description + - is_private + - is_automated + - star_count + - pull_count + - last_updated + - date_registered + - collaborator_count + - has_starred + - permissions + - media_types + - content_types + - categories + - immutable_tags_settings + repo_permissions: + type: object + properties: + read: + type: boolean + description: Read permission + write: + type: boolean + description: Write permission + admin: + type: boolean + description: Admin permission + required: + - read + - write + - admin + immutable_tags_settings: + type: object + properties: + enabled: + type: boolean + description: Whether immutable tags are enabled + rules: + type: array + items: + type: string + description: List of immutable tag rules + required: + - enabled + - rules + immutable_tags_verify_request: + type: object + properties: + regex: + type: string + pattern: '^[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*(\\/[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*)*$' + description: 'Immutable tags rule regex pattern. Must match format: [a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*(\\/[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*)*' + example: "v.*" + required: + - regex + immutable_tags_verify_response: + type: object + properties: + tags: + type: array + items: + type: string + description: List of tags that match the provided regex pattern + example: + - "v1.0.0" + - "v2.1.3" + - "latest" + required: + - tags + repository_list_entry: + type: object + properties: + name: + type: string + description: Name of the repository + example: "hello-world" + namespace: + type: string + description: Namespace (organization or username) that owns the repository + example: "docker" + repository_type: + type: string + description: Type of repository + enum: + - image + - plugin + - null + example: "image" + nullable: true + status: + type: integer + description: Repository status code + example: 1 + status_description: + type: string + description: Human-readable repository status + enum: + - active + - inactive + example: "active" + description: + type: string + description: Repository description + nullable: true + example: "Hello World! (an example of minimal Dockerization)" + is_private: + type: boolean + description: Whether the repository is private + example: false + star_count: + type: integer + description: Number of users who starred this repository + minimum: 0 + example: 1234 + pull_count: + type: integer + description: Total number of pulls for this repository + minimum: 0 + example: 50000000 + last_updated: + type: string + format: date-time + description: ISO 8601 timestamp of when the repository was last updated + example: "2023-12-01T10:30:00Z" + nullable: true + last_modified: + type: string + format: date-time + description: ISO 8601 timestamp of when the repository was last modified + example: "2023-12-01T10:30:00Z" + nullable: true + date_registered: + type: string + format: date-time + description: ISO 8601 timestamp of when the repository was created + example: "2013-06-19T19:07:54Z" + affiliation: + type: string + description: User's affiliation with the repository (empty string if no affiliation) + example: "" + media_types: + type: array + description: Media types supported by this repository + items: + type: string + example: + - "application/vnd.docker.plugin.v1+json" + content_types: + type: array + description: Content types supported by this repository + items: + type: string + example: + - "plugin" + categories: + type: array + description: Categories associated with this repository + items: + $ref: "#/components/schemas/category" + example: [] + storage_size: + type: integer + description: Storage size in bytes used by this repository + minimum: 0 + example: 232719127 + category: + type: object + required: + - name + - slug + properties: + name: + type: string + description: Human-readable name of the category + example: "Databases" + minLength: 1 + slug: + type: string + description: URL-friendly identifier for the category + example: "databases" + minLength: 1 + pattern: "^[a-z0-9]+(?:-[a-z0-9]+)*$" + description: Repository category for classification and discovery + list_repositories_response: + allOf: + - $ref: "#/components/schemas/page" + - type: object + properties: + results: + type: array + items: + $ref: "#/components/schemas/repository_list_entry" + UsersLoginRequest: + description: User login details + type: object + required: + - username + - password + properties: + username: + description: The username of the Docker Hub account to authenticate with. + type: string + example: myusername + password: + description: | + The password or personal access token (PAT) of the Docker Hub account to authenticate with. + type: string + example: p@ssw0rd + AuthCreateTokenResponse: + description: successful access token response + type: object + properties: + access_token: + description: The created access token. This expires in 10 minutes. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + PostUsersLoginSuccessResponse: + description: successful user login response + type: object + properties: + token: + description: | + Created authentication token. + This token can be used in the HTTP Authorization header as a JWT to authenticate with the Docker Hub APIs. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + nullable: false + PostUsersLoginErrorResponse: + description: failed user login response or second factor required + type: object + required: + - detail + properties: + detail: + description: Description of the error. + type: string + example: Incorrect authentication credentials + nullable: false + login_2fa_token: + description: | + Short time lived token to be used on `/v2/users/2fa-login` to complete the authentication. This field is present only if 2FA is enabled. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + nullable: true + Users2FALoginRequest: + description: Second factor user login details + type: object + required: + - login_2fa_token + - code + properties: + login_2fa_token: + description: The intermediate 2FA token returned from `/v2/users/login` API. + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + code: + description: | + The Time-based One-Time Password of the Docker Hub account to authenticate with. + type: string + example: 123456 + PostUsers2FALoginErrorResponse: + description: failed second factor login response. + type: object + properties: + detail: + description: Description of the error. + type: string + example: Incorrect authentication credentials + nullable: false + protobufAny: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + rpcStatus: + type: object + properties: + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + $ref: "#/components/schemas/protobufAny" + AuditLogAction: + type: object + properties: + name: + type: string + description: Name of audit log action. + description: + type: string + description: Description of audit log action. + label: + type: string + description: Label for audit log action. + description: Audit Log action + AuditLogActions: + type: object + properties: + actions: + type: array + items: + $ref: "#/components/schemas/AuditLogAction" + description: List of audit log actions. + label: + type: string + description: Grouping label for a particular set of audit log actions. + GetAuditActionsResponse: + type: object + properties: + actions: + type: object + additionalProperties: + $ref: "#/components/schemas/AuditLogActions" + description: Map of audit log actions. + description: GetAuditActions response. + GetAuditLogsResponse: + type: object + properties: + logs: + type: array + items: + $ref: "#/components/schemas/AuditLog" + description: List of audit log events. + description: GetAuditLogs response. + AuditLog: + type: object + properties: + account: + type: string + action: + type: string + name: + type: string + actor: + type: string + data: + type: object + additionalProperties: + type: string + timestamp: + type: string + format: date-time + action_description: + type: string + description: Audit log event. + ValueError: + type: object + description: Used to error if input validation fails. + properties: + fields: + type: object + items: + type: string + text: + type: string + Error: + type: object + properties: + detail: + type: string + message: + type: string + accessToken: + type: object + properties: + uuid: + type: string + example: b30bbf97-506c-4ecd-aabc-842f3cb484fb + client_id: + type: string + example: HUB + creator_ip: + type: string + example: 127.0.0.1 + creator_ua: + type: string + example: some user agent + created_at: + type: string + example: "2021-07-20T12:00:00.000000Z" + last_used: + type: string + example: null + nullable: true + generated_by: + type: string + example: manual + is_active: + type: boolean + example: true + token: + type: string + example: a7a5ef25-8889-43a0-8cc7-f2a94268e861 + token_label: + type: string + example: My read only token + scopes: + type: array + example: + - repo:read + items: + type: string + expires_at: + type: string + format: date-time + example: "2021-10-28T18:30:19.520861Z" + createAccessTokenRequest: + type: object + required: + - token_label + - scopes + properties: + token_label: + type: string + description: Friendly name for you to identify the token. + example: My read only token + minLength: 1 + maxLength: 100 + scopes: + type: array + description: | + Valid scopes: "repo:admin", "repo:write", "repo:read", "repo:public_read" + example: + - repo:read + items: + type: string + expires_at: + type: string + description: | + Optional expiration date for the token. + If omitted, the token will remain valid indefinitely. + format: date-time + example: "2021-10-28T18:30:19.520861Z" + createAccessTokensResponse: + $ref: "#/components/schemas/accessToken" + getAccessTokensResponse: + type: object + properties: + count: + type: number + example: 1 + next: + type: string + example: null + previous: + type: string + example: null + active_count: + type: number + example: 1 + results: + type: array + items: + allOf: + - $ref: "#/components/schemas/accessToken" + - type: object + properties: + token: + type: string + example: "" + patchAccessTokenRequest: + type: object + properties: + token_label: + type: string + example: My read only token + minLength: 1 + maxLength: 100 + is_active: + type: boolean + example: false + patchAccessTokenResponse: + $ref: "#/components/schemas/accessToken" + orgSettings: + type: object + properties: + restricted_images: + $ref: "#/components/schemas/restricted_images" + restricted_images: + type: object + properties: + enabled: + type: boolean + description: Whether or not to restrict image usage for users in the organization. + example: true + allow_official_images: + type: boolean + description: Allow usage of official images if "enabled" is `true`. + example: true + allow_verified_publishers: + type: boolean + description: Allow usage of verified publisher images if "enabled" is `true`. + example: true + layer: + type: object + properties: + digest: + type: string + description: image layer digest + nullable: true + size: + type: integer + description: size of the layer + instruction: + type: string + description: Dockerfile instruction + image: + type: object + properties: + architecture: + type: string + description: CPU architecture + features: + type: string + description: CPU features + variant: + type: string + description: CPU variant + digest: + type: string + description: image digest + nullable: true + layers: + type: array + items: + $ref: "#/components/schemas/layer" + os: + type: string + description: operating system + os_features: + type: string + description: OS features + os_version: + type: string + description: OS version + size: + type: integer + description: size of the image + status: + type: string + enum: + - active + - inactive + description: Status of the image + last_pulled: + type: string + example: "2021-01-05T21:06:53.506400Z" + description: datetime of last pull + nullable: true + last_pushed: + type: string + example: "2021-01-05T21:06:53.506400Z" + description: datetime of last push + nullable: true + tag: + type: object + properties: + id: + type: integer + description: tag ID + images: + type: object + $ref: "#/components/schemas/image" + creator: + type: integer + description: ID of the user that pushed the tag + last_updated: + type: string + example: "2021-01-05T21:06:53.506400Z" + description: datetime of last update + nullable: true + last_updater: + type: integer + description: ID of the last user that updated the tag + last_updater_username: + type: string + description: Hub username of the user that updated the tag + name: + type: string + description: name of the tag + repository: + type: integer + description: repository ID + full_size: + type: integer + description: compressed size (sum of all layers) of the tagged image + v2: + type: string + description: repository API version + status: + type: string + enum: + - active + - inactive + description: whether a tag has been pushed to or pulled in the past month + tag_last_pulled: + type: string + example: "2021-01-05T21:06:53.506400Z" + description: datetime of last pull + nullable: true + tag_last_pushed: + type: string + example: "2021-01-05T21:06:53.506400Z" + description: datetime of last push + nullable: true + paginated_tags: + allOf: + - $ref: "#/components/schemas/page" + - type: object + properties: + results: + type: array + items: + $ref: "#/components/schemas/tag" + page: + type: object + properties: + count: + type: integer + description: total number of results available across all pages + next: + type: string + description: link to next page of results if any + nullable: true + previous: + type: string + description: link to previous page of results if any + nullable: true + scim_schema_attribute: + type: object + properties: + name: + type: string + example: userName + type: + enum: + - string + - boolean + - complex + type: string + example: string + multiValued: + type: boolean + example: false + description: + type: string + example: Unique identifier for the User, typically used by the user to directly authenticate to the service provider. Each User MUST include a non-empty userName value. This identifier MUST be unique across the service provider's entire set of Users. + required: + type: boolean + example: true + caseExact: + type: boolean + example: false + mutability: + type: string + example: readWrite + returned: + type: string + example: default + uniqueness: + type: string + example: server + scim_schema_parent_attribute: + allOf: + - $ref: "#/components/schemas/scim_schema_attribute" + - type: object + properties: + subAttributes: + type: array + items: + $ref: "#/components/schemas/scim_schema_attribute" + invite: + type: object + properties: + id: + type: string + description: uuid representing the invite id + example: e36eca69-4cc8-4f17-9845-ae8c2b832691 + inviter_username: + type: string + example: moby + invitee: + type: string + description: can either be a dockerID for registered users or an email for non-registered users + example: invitee@docker.com + org: + type: string + description: name of the org to join + example: docker + team: + type: string + description: name of the team (user group) to join + example: owners + created_at: + type: string + example: "2021-10-28T18:30:19.520861Z" + bulk_invite: + type: object + properties: + invitees: + type: array + description: A list of invitees + items: + type: object + properties: + invitee: + type: string + description: invitee email or Docker ID + status: + type: string + description: status of the invite or validation error + invite: + description: Invite data if successfully invited + $ref: "#/components/schemas/invite" + example: + invitees: + - invitee: invitee@docker.com + status: invited + invite: + id: e36eca69-4cc8-4f17-9845-ae8c2b832691 + inviter_username: moby + invitee: invitee@docker.com + org: docker + team: owners + created_at: "2021-10-28T18:30:19.520861Z" + - invitee: invitee2@docker.com + status: existing_org_member + - invitee: invitee3@docker.com + status: invalid_email_or_docker_id + error: + type: object + properties: + errinfo: + type: object + items: + type: string + detail: + type: string + message: + type: string + scim_error: + type: object + properties: + status: + type: string + description: The status code for the response in string format. + schemas: + type: array + items: + type: string + default: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + description: Details about why the request failed. + user: + type: object + properties: + id: + type: string + example: 0ab70deb065a43fcacd55d48caa945d8 + description: The UUID trimmed + company: + type: string + example: Docker Inc + date_joined: + type: string + example: "2021-01-05T21:06:53.506400Z" + full_name: + type: string + example: Jon Snow + gravatar_email: + type: string + gravatar_url: + type: string + location: + type: string + profile_url: + type: string + type: + type: string + enum: + - User + - Org + example: User + username: + type: string + example: dockeruser + org_member: + allOf: + - $ref: "#/components/schemas/user" + properties: + email: + type: string + description: User's email address + example: example@docker.com + role: + type: string + description: | + The member's role in the organization (`Owner`, `Editor`, + `Member`, or `Invitee` for pending invites). + enum: + - Owner + - Editor + - Member + - Invitee + example: Owner + groups: + type: array + description: Groups (Teams) that the user is member of + items: + type: string + example: + - developers + - owners + is_guest: + type: boolean + description: If the organization has verified domains, members that have email addresses outside of those domains will be flagged as guests. + example: false + primary_email: + type: string + description: The user's email primary address. + example: example@docker.com + deprecated: true + last_logged_in_at: + type: string + format: date-time + description: | + Last time the user logged in. To access this field, you must have insights visible for your organization. See + [Insights](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). + example: "2021-01-05T21:06:53.506400Z" + last_seen_at: + type: string + format: date-time + description: | + Last time the user was seen. To access this field, you must have insights visible for your organization. See + [Insights](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). + example: "2021-01-05T21:06:53.506400Z" + last_desktop_version: + type: string + description: | + Last desktop version the user used. To access this field, you must have insights visible for your organization. See + [Insights](https://docs.docker.com/admin/insights/#view-insights-for-organization-users). + example: 4.29.0 + + org_member_paginated: + type: object + properties: + count: + type: number + description: The total number of items that match with the search. + example: 120 + previous: + type: string + description: The URL or link for the previous page of items. + example: https://hub.docker.com/v2/some/resources/items?page=1&page_size=20 + next: + type: string + description: The URL or link for the next page of items. + example: https://hub.docker.com/v2/some/resources/items?page=3&page_size=20 + results: + type: array + description: List of accounts. + items: + $ref: "#/components/schemas/org_member" + org_group: + type: object + properties: + id: + type: number + example: 10 + description: Group ID + uuid: + type: string + description: UUID for the group + name: + type: string + example: mygroup + description: Name of the group + description: + type: string + example: Groups description + description: Description of the group + member_count: + type: number + example: 10 + description: Member count of the group + role: + type: string + description: | + Role assigned to the team. A core role (`owner`, `editor`, or `member`) + or the name of a custom role (not the label or UUID). + group_member: + type: object + properties: + id: + type: string + example: 0ab70deb065a43fcacd55d48caa945d8 + description: The UUID trimmed + company: + type: string + example: Docker Inc + date_joined: + type: string + format: date-time + example: "2021-01-05T21:06:53.506400Z" + full_name: + type: string + example: John Snow + gravatar_email: + type: string + gravatar_url: + type: string + location: + type: string + profile_url: + type: string + type: + type: string + enum: + - User + - Org + example: User + username: + type: string + example: dockeruser + email: + type: string + example: dockeruser@docker.com + email_address: + type: object + properties: + id: + type: number + user_id: + type: number + email: + type: string + example: dockeruser@docker.com + verified: + type: boolean + primary: + type: boolean + legacy_email_address: + allOf: + - $ref: "#/components/schemas/email_address" + - type: object + properties: + user: + type: string + example: dockeruser + email_with_username: + allOf: + - $ref: "#/components/schemas/email_address" + - type: object + properties: + username: + type: string + example: dockeruser + scim_service_provider_config: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig + documentationUri: + type: string + example: "" + patch: + properties: + supported: + type: boolean + example: false + bulk: + type: object + properties: + supported: + type: boolean + example: false + maxOperations: + type: integer + maxPayloadSize: + type: integer + filter: + type: object + properties: + supported: + type: boolean + example: true + maxResults: + type: integer + example: 99999 + changePassword: + type: object + properties: + supported: + type: boolean + example: false + sort: + type: object + properties: + supported: + type: boolean + example: true + etag: + type: object + properties: + supported: + type: boolean + example: false + authenticationSchemes: + type: object + properties: + name: + type: string + example: OAuth 2.0 Bearer Token + description: + type: string + example: The OAuth 2.0 Bearer Token Authentication scheme. OAuth enables clients to access protected resources by obtaining an access token, which is defined in RFC 6750 as "a string representing an access authorization issued to the client", rather than using the resource owner's credentials directly. + specUri: + type: string + example: http://tools.ietf.org/html/rfc6750 + type: + type: string + example: oauthbearertoken + scim_resource_type: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - urn:ietf:params:scim:schemas:core:2.0:ResourceType + id: + type: string + example: User + name: + type: string + example: User + description: + type: string + example: User + endpoint: + type: string + example: /Users + schema: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + scim_schema: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - urn:ietf:params:scim:schemas:core:2.0:Schema + id: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + name: + type: string + example: User + description: + type: string + example: User Account + attributes: + type: array + example: [] + items: + $ref: "#/components/schemas/scim_schema_parent_attribute" + scim_email: + type: object + properties: + value: + type: string + example: jon.snow@docker.com + display: + type: string + example: jon.snow@docker.com + primary: + type: boolean + example: true + scim_group: + type: object + properties: + value: + type: string + example: nightswatch + display: + type: string + example: nightswatch + scim_user_username: + type: string + description: The user's email address. This must be reachable via email. + example: jon.snow@docker.com + scim_user_name: + type: object + properties: + givenName: + type: string + example: Jon + familyName: + type: string + example: Snow + scim_user_display_name: + type: string + description: The username in Docker. Also known as the "Docker ID". + example: jonsnow + scim_user_schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + minItems: 1 + scim_user_id: + type: string + example: d80f7c79-7730-49d8-9a41-7c42fb622d9c + description: The unique identifier for the user. A v4 UUID. + scim_user: + type: object + properties: + schemas: + $ref: "#/components/schemas/scim_user_schemas" + id: + $ref: "#/components/schemas/scim_user_id" + userName: + $ref: "#/components/schemas/scim_user_username" + name: + $ref: "#/components/schemas/scim_user_name" + displayName: + $ref: "#/components/schemas/scim_user_display_name" + active: + type: boolean + example: true + emails: + type: array + items: + $ref: "#/components/schemas/scim_email" + groups: + type: array + items: + $ref: "#/components/schemas/scim_group" + meta: + type: object + properties: + resourceType: + type: string + example: User + location: + type: string + example: https://hub.docker.com/v2/scim/2.0/Users/d80f7c79-7730-49d8-9a41-7c42fb622d9c + created: + type: string + format: date-time + description: The creation date for the user as a RFC3339 formatted string. + example: "2022-05-20T00:54:18Z" + lastModified: + type: string + format: date-time + description: The date the user was last modified as a RFC3339 formatted string. + example: "2022-05-20T00:54:18Z" + orgAccessToken: + type: object + properties: + id: + type: string + example: "a7a5ef25-8889-43a0-8cc7-f2a94268e861" + label: + type: string + example: "My organization token" + created_by: + type: string + example: "johndoe" + is_active: + type: boolean + example: true + created_at: + type: string + format: date-time + example: "2022-05-20T00:54:18Z" + expires_at: + type: string + format: date-time + example: "2023-05-20T00:54:18Z" + nullable: true + last_used_at: + type: string + format: date-time + example: "2022-06-15T12:30:45Z" + nullable: true + orgAccessTokenResource: + type: object + properties: + type: + type: string + enum: + - TYPE_REPO + - TYPE_ORG + example: "TYPE_REPO" + description: The type of resource + required: true + path: + type: string + example: "myorg/myrepo" + description: | + The path of the resource. The format of this will change depending on the type of resource. + + For TYPE_REPO resources: + - Must be an existing repository name (e.g., "myorg/myrepo") + - Can use glob patterns (e.g., "myorg/*" for all repositories in the organization) + - Use "*/*/public" to reference all public repositories + required: true + scopes: + type: array + description: The scopes this token has access to + items: + type: string + example: "scope-image-pull" + required: true + getOrgAccessTokensResponse: + type: object + properties: + total: + type: number + example: 10 + next: + type: string + example: https://hub.docker.com/v2/orgs/docker/access-tokens?page=2&page_size=10 + previous: + type: string + example: https://hub.docker.com/v2/orgs/docker/access-tokens?page=1&page_size=10 + results: + type: array + items: + $ref: "#/components/schemas/orgAccessToken" + getOrgAccessTokenResponse: + allOf: + - $ref: "#/components/schemas/orgAccessToken" + - type: object + properties: + resources: + type: array + description: Resources this token has access to + items: + $ref: "#/components/schemas/orgAccessTokenResource" + createOrgAccessTokenRequest: + type: object + properties: + label: + type: string + description: Label for the access token + example: "My organization token" + required: true + description: + type: string + description: Description of the access token + example: "Token for CI/CD pipeline" + resources: + type: array + description: Resources this token has access to + items: + $ref: "#/components/schemas/orgAccessTokenResource" + expires_at: + type: string + format: date-time + description: Expiration date for the token + example: "2023-05-20T00:54:18Z" + nullable: true + createOrgAccessTokenResponse: + type: object + allOf: + - type: object + properties: + id: + type: string + example: "a7a5ef25-8889-43a0-8cc7-f2a94268e861" + label: + type: string + example: "My organization token" + is_active: + type: boolean + example: true + created_at: + type: string + format: date-time + example: "2022-05-20T00:54:18Z" + expires_at: + type: string + format: date-time + example: "2023-05-20T00:54:18Z" + nullable: true + last_used_at: + type: string + format: date-time + example: "2022-06-15T12:30:45Z" + nullable: true + - type: object + properties: + token: + type: string + description: The actual token value that can be used for authentication + example: "dckr_oat_7awgM4jG5SQvxcvmNzhKj8PQjxo" + resources: + type: array + items: + $ref: "#/components/schemas/orgAccessTokenResource" + updateOrgAccessTokenRequest: + type: object + properties: + label: + type: string + description: Label for the access token + example: "My organization token" + description: + type: string + description: Description of the access token + example: "Token for CI/CD pipeline" + resources: + type: array + description: Resources this token has access to + items: + $ref: "#/components/schemas/orgAccessTokenResource" + is_active: + type: boolean + description: Whether the token is active + example: true + updateOrgAccessTokenResponse: + type: object + allOf: + - $ref: "#/components/schemas/orgAccessToken" + - type: object + properties: + resources: + type: array + description: Resources this token has access to + items: + $ref: "#/components/schemas/orgAccessTokenResource" + team_repo: + allOf: + - $ref: "#/components/responses/team_repo" + properties: + group_name: + type: string + description: Name of the group + permission: + type: string + description: Repo access permission + enum: + - read + - write + - admin + parameters: + namespace: + in: path + name: namespace + required: true + schema: + type: string + repository: + in: path + name: repository + required: true + schema: + type: string + tag: + in: path + name: tag + required: true + schema: + type: string + org_name: + in: path + name: org_name + description: Name of the organization (namespace). + schema: + type: string + example: myorganization + required: true + group_name: + in: path + name: group_name + description: Name of the group (team) in the organization. + schema: + type: string + example: developers + required: true + username: + in: path + name: username + description: Username, identifier for the user (namespace, DockerID). + schema: + type: string + example: jonsnow + required: true + page: + in: query + name: page + description: Page number (starts on 1). + schema: + type: integer + page_size: + in: query + name: page_size + description: Number of items (rows) per page. + schema: + type: integer + invites: + in: query + name: invites + description: Include invites in the response. + schema: + type: boolean + search: + in: query + name: search + schema: + type: integer + description: Search term. + scim_attributes: + in: query + name: attributes + schema: + type: string + description: Comma delimited list of attributes to limit to in the response. + example: userName,displayName + scim_user_id: + name: id + in: path + schema: + type: string + description: The user ID. + example: d80f7c79-7730-49d8-9a41-7c42fb622d9c + required: true + type: + in: query + name: type + schema: + type: string + enum: + - all + - invitee + - member + example: all + role: + in: query + name: role + schema: + type: string + enum: + - owner + - editor + - member + example: owner + bulk_invite: + in: header + name: X-Analytics-Client-Feature + description: Optional string that indicates the feature used to submit the bulk invites (e.g.'file', 'web') + schema: + type: string + requestBodies: + bulk_invite_request: + required: true + content: + application/json: + schema: + type: object + required: + - org + - invitees + properties: + org: + type: string + description: organization name + example: docker + team: + type: string + description: team name + example: owners + role: + type: string + description: role for invitees + example: member + invitees: + type: array + description: list of invitees emails or Docker Ids + items: + type: string + description: invitee email or Docker ID + example: + - invitee1DockerId + - invitee2@docker.com + - invitee3@docker.com + dry_run: + type: boolean + description: Optional, run through validation but don't actually change data. + example: true + scim_create_user_request: + required: true + content: + application/scim+json: + schema: + type: object + required: + - schemas + - userName + properties: + schemas: + $ref: "#/components/schemas/scim_user_schemas" + userName: + $ref: "#/components/schemas/scim_user_username" + name: + $ref: "#/components/schemas/scim_user_name" + scim_update_user_request: + required: true + content: + application/scim+json: + schema: + type: object + required: + - schemas + properties: + schemas: + $ref: "#/components/schemas/scim_user_schemas" + name: + allOf: + - $ref: "#/components/schemas/scim_user_name" + - description: If this is omitted from the request, the update will skip the update on it. We will only ever change the name, but not clear it. + enabled: + type: boolean + default: false + description: If this is omitted from the request, it will default to false resulting in a deactivated user. + add_member_to_org_group: + required: true + content: + application/json: + schema: + type: object + required: + - member + properties: + member: + type: string + example: jonsnow + update_repository_immutable_tags_request: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/update_repository_immutable_tags_request" + immutable_tags_verify_request: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/immutable_tags_verify_request" + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT + bearerSCIMAuth: + type: http + scheme: bearer +x-tagGroups: + - name: General + tags: + - changelog + - resources + - rate-limiting + - authentication + - name: API + tags: + - authentication-api + - access-tokens + - images + - audit-logs + - org-settings + - repositories + - scim + - orgs + - org-access-tokens + - groups + - invites diff --git a/prototypes/api-docs/original/registry.yaml b/prototypes/api-docs/original/registry.yaml new file mode 100644 index 000000000000..445cc7f98f95 --- /dev/null +++ b/prototypes/api-docs/original/registry.yaml @@ -0,0 +1,1353 @@ +openapi: 3.0.3 +info: + title: Supported registry API for Docker Hub + description: | + Docker Hub is an OCI-compliant registry, which means it adheres to the open + standards defined by the Open Container Initiative (OCI) for distributing + container images. This ensures compatibility with a wide range of tools and + platforms in the container ecosystem. + + This reference documents the Docker Hub-supported subset of the Registry HTTP API V2. + It focuses on pulling, pushing, and deleting images. It does not cover the full OCI Distribution Specification. + + For the complete OCI specification, see [OCI Distribution Specification](https://github.com/opencontainers/distribution-spec). +servers: + - description: Docker Hub registry API + x-audience: public + url: https://registry-1.docker.io + +tags: + - name: overview + x-displayName: Overview + description: | + All endpoints in this API are prefixed by the version and repository name, for example: + + ``` + /v2// + ``` + + This format provides structured access control and URI-based scoping of image operations. + + For example, to interact with the `library/ubuntu` repository, use: + + ``` + /v2/library/ubuntu/ + ``` + + Repository names must meet these requirements: + 1. Consist of path components matching `[a-z0-9]+(?:[._-][a-z0-9]+)*` + 2. If more than one component, they must be separated by `/` + 3. Full repository name must be fewer than 256 characters + + + - name: authentication + x-displayName: Authentication + description: | + Specifies registry authentication. + externalDocs: + description: Detailed authentication workflow and token usage + url: https://docs.docker.com/reference/api/registry/auth/ + + - name: Manifests + x-displayName: Manifests + description: | + Image manifests are JSON documents that describe an image: its configuration blob, the digests of each layer blob, and metadata such as media‑types and annotations. + + - name: Blobs + x-displayName: Blobs + description: | + Blobs are the binary objects referenced from manifests: + the config JSON and one or more compressed layer tarballs. + + - name: pull + x-displayName: Pulling Images + description: | + Pulling an image involves retrieving the manifest and downloading each of the image's layer blobs. This section outlines the general steps followed by a working example. + + 1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/). + 2. [Get the image manifest](#operation/GetImageManifest). + 3. If the response in the previous step is a multi-architecture manifest list, you must do the following: + - Parse the `manifests[]` array to locate the digest for your target platform (e.g., `linux/amd64`). + - [Get the image manifest](#operation/GetImageManifest) using the located digest. + 4. [Check if the blob exists](#operation/CheckBlobExists) before downloading. The client should send a `HEAD` request for each layer digest. + 5. [Download each layer blob](#operation/GetBlob) using the digest obtained from the manifest. The client should send a `GET` request for each layer digest. + + The following bash script example pulls `library/ubuntu:latest` from Docker Hub. + + ```bash + #!/bin/bash + + # Step 1: Get a bearer token + TOKEN=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull" | jq -r .token) + + # Step 2: Get the image manifest. In this example, an image manifest list is returned. + curl -s -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.list.v2+json" \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/latest \ + -o manifest-list.json + + # Step 3a: Parse the `manifests[]` array to locate the digest for your target platform (e.g., `linux/amd64`). + IMAGE_MANIFEST_DIGEST=$(jq -r '.manifests[] | select(.platform.architecture == "amd64" and .platform.os == "linux") | .digest' manifest-list.json) + + # Step 3b: Get the platform-specific image manifest + curl -s -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/$IMAGE_MANIFEST_DIGEST \ + -o manifest.json + + # Step 4: Send a HEAD request to check if the layer blob exists + DIGEST=$(jq -r '.layers[0].digest' manifest.json) + curl -I -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/$DIGEST + + # Step 5: Download the layer blob + curl -L -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/$DIGEST + ``` + + This example pulls the manifest and the first layer for the `ubuntu:latest` image on the `linux/amd64` platform. Repeat steps 4 and 5 for each digest in the `.layers[]` array in the manifest. + + + - name: push + x-displayName: Pushing Images + description: | + Pushing an image involves uploading any image blobs (such as the config or layers), and then uploading the manifest that references those blobs. + + This section outlines the basic steps to push an image using the registry API. + + 1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/) + + 2. [Check if the blob exists](#operation/CheckBlobExists) using a `HEAD` request for each blob digest. + + 3. If the blob does not exist, [upload the blob](#operation/CompleteBlobUpload) using a monolithic `PUT` request: + - First, [initiate the upload](#operation/InitiateBlobUpload) with `POST`. + - Then [upload and complete](#operation/CompleteBlobUpload) with `PUT`. + + **Note**: Alternatively, you can upload the blob in multiple chunks by using `PATCH` requests to send each chunk, followed by a final `PUT` request to complete the upload. This is known as a [chunked upload](#operation/UploadBlobChunk) and is useful for large blobs or when resuming interrupted uploads. + + + 4. [Upload the image manifest](#operation/PutImageManifest) using a `PUT` request to associate the config and layers. + + The following bash script example pushes a dummy config blob and manifest to `yourusername/helloworld:latest` on Docker Hub. You can replace `yourusername` with your Docker Hub username and `dckr_pat` with your Docker Hub personal access token. + + ```bash + #!/bin/bash + + USERNAME=yourusername + PASSWORD=dckr_pat + REPO=yourusername/helloworld + TAG=latest + CONFIG=config.json + MIME_TYPE=application/vnd.docker.container.image.v1+json + + # Step 1: Get a bearer token + TOKEN=$(curl -s -u "$USERNAME:$PASSWORD" \ + "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO:push,pull" \ + | jq -r .token) + + # Create a dummy config blob and compute its digest + echo '{"architecture":"amd64","os":"linux","config":{},"rootfs":{"type":"layers","diff_ids":[]}}' > $CONFIG + DIGEST="sha256:$(sha256sum $CONFIG | awk '{print $1}')" + + # Step 2: Check if the blob exists + STATUS=$(curl -s -o /dev/null -w "%{http_code}" -I \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/$REPO/blobs/$DIGEST) + + if [ "$STATUS" != "200" ]; then + # Step 3: Upload blob using monolithic upload + LOCATION=$(curl -sI -X POST \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/$REPO/blobs/uploads/ \ + | grep -i Location | tr -d '\r' | awk '{print $2}') + + curl -s -X PUT "$LOCATION&digest=$DIGEST" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @$CONFIG + fi + + # Step 4: Upload the manifest that references the config blob + MANIFEST=$(cat < **Note** + > + > Manifest deletion operations may experience latency and could return a `500 Internal Server Error` during deletion. The system automatically retries the deletion in the background, so the manifest will eventually be removed. You do not need to manually retry the request. + + This section outlines the basic steps to delete an image using the registry API. + + 1. [Get a bearer token for the repository](https://docs.docker.com/reference/api/registry/auth/). + 2. [Get the manifest](#operation/GetImageManifest) using the image's tag. + 3. Retrieve the `Docker-Content-Digest` header from the manifest response. This digest uniquely identifies the manifest. + 4. [Delete the manifest](#operation/DeleteImageManifest) using a `DELETE` request and the digest. + + The following bash script example deletes the `latest` tag from `yourusername/helloworld` on Docker Hub. Replace `yourusername` with your Docker Hub username and `dckr_pat` with your Docker Hub personal access token. + + ```bash + #!/bin/bash + + USERNAME=yourusername + PASSWORD=dckr_pat + REPO=yourusername/helloworld + TAG=latest + + # Step 1: Get a bearer token + TOKEN=$(curl -s -u "$USERNAME:$PASSWORD" \ + "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO:pull,push,delete" \ + | jq -r .token) + + # Step 2 and 3: Get the manifest and extract the digest from response headers + DIGEST=$(curl -sI -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + https://registry-1.docker.io/v2/$REPO/manifests/$TAG \ + | grep -i Docker-Content-Digest | tr -d '\r' | awk '{print $2}') + + echo "Deleting manifest with digest: $DIGEST" + + # Step 4: Delete the manifest by digest + curl -s -X DELETE \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/$REPO/manifests/$DIGEST + + echo "Deleted image: $REPO@$DIGEST" + ``` + + This example deletes the manifest for the `latest` tag. To fully delete all references to an image, ensure no other tags or referrers point to the same manifest digest. + + +paths: + /v2/{name}/manifests/{reference}: + get: + tags: + - Manifests + x-displayName: Manifests + summary: Get image manifest + operationId: GetImageManifest + description: | + Fetch the manifest identified by `name` and `reference`, where `reference` can be a tag (e.g., `latest`) or a digest (e.g., `sha256:...`). + + The manifest contains metadata about the image, including configuration and layer digests. It is required for pulling images from the registry. + + This endpoint requires authentication. Use the `Authorization: Bearer ` header. + + x-codeSamples: + - lang: Bash + label: cURL + source: | + # GET a manifest (by tag or digest) + curl -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/latest + parameters: + - name: name + in: path + required: true + description: Name of the target repository + example: library/ubuntu + schema: + type: string + - name: reference + in: path + required: true + description: Tag or digest of the target manifest + examples: + by-tag: + summary: Tag + value: latest + by-digest: + summary: Digest + value: sha256:abc123def456... + schema: + type: string + - name: Authorization + in: header + required: true + description: RFC7235-compliant authorization header (e.g., `Bearer `). + schema: + type: string + - name: Accept + in: header + required: false + description: | + Media type(s) the client supports for the manifest. + + The registry supports the following media types: + - application/vnd.docker.distribution.manifest.v2+json + - application/vnd.docker.distribution.manifest.list.v2+json + - application/vnd.oci.image.manifest.v1+json + - application/vnd.oci.image.index.v1+json + schema: + type: string + + responses: + "200": + description: Manifest fetched successfully. + headers: + Docker-Content-Digest: + description: Digest of the returned manifest content. + schema: + type: string + Content-Type: + description: Media type of the returned manifest. + schema: + type: string + content: + application/vnd.docker.distribution.manifest.v2+json: + schema: + type: object + required: + - schemaVersion + - mediaType + - config + - layers + properties: + schemaVersion: + type: integer + example: 2 + mediaType: + type: string + example: application/vnd.docker.distribution.manifest.v2+json + config: + type: object + properties: + mediaType: + type: string + example: application/vnd.docker.container.image.v1+json + size: + type: integer + example: 7023 + digest: + type: string + example: sha256:a3f3e...c1234 + layers: + type: array + items: + type: object + properties: + mediaType: + type: string + example: application/vnd.docker.image.rootfs.diff.tar.gzip + size: + type: integer + example: 32654 + digest: + type: string + example: sha256:bcf2...78901 + examples: + docker-manifest: + summary: Docker image manifest (schema v2) + value: + { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "config": { + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 7023, + "digest": "sha256:123456abcdef..." + }, + "layers": [ + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 32654, + "digest": "sha256:abcdef123456..." + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 16724, + "digest": "sha256:7890abcdef12..." + } + ] + } + + "400": + description: Invalid name or reference. + "401": + description: Authentication required. + "403": + description: Access denied. + "404": + description: Repository or manifest not found. + "429": + description: Too many requests. + + + put: + tags: + - Manifests + summary: Put image manifest + operationId: PutImageManifest + description: | + Upload an image manifest for a given tag or digest. This operation registers a manifest in a repository, allowing it to be pulled using the specified reference. + + This endpoint is typically used after all layer and config blobs have been uploaded to the registry. + + The manifest must conform to the expected schema and media type. For Docker image manifest schema version 2, use: + `application/vnd.docker.distribution.manifest.v2+json` + + Requires authentication via a bearer token with `push` scope for the target repository. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # PUT a manifest (tag = latest) + curl -X PUT \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/vnd.docker.distribution.manifest.v2+json" \ + --data-binary @manifest.json \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/latest + parameters: + - name: name + in: path + required: true + description: Name of the target Repository + example: library/ubuntu + schema: + type: string + - name: reference + in: path + required: true + description: Tag or digest to associate with the uploaded Manifest + examples: + by-tag: + summary: Tag + value: latest + by-digest: + summary: Digest + value: sha256:abc123def456... + schema: + type: string + - name: Authorization + in: header + required: true + description: RFC7235-compliant authorization header (e.g., `Bearer `). + schema: + type: string + - name: Content-Type + in: header + required: true + description: Media type of the manifest being uploaded. + schema: + type: string + example: application/vnd.docker.distribution.manifest.v2+json + + requestBody: + required: true + content: + application/vnd.docker.distribution.manifest.v2+json: + schema: + type: object + required: + - schemaVersion + - mediaType + - config + - layers + properties: + schemaVersion: + type: integer + example: 2 + mediaType: + type: string + example: application/vnd.docker.distribution.manifest.v2+json + config: + type: object + required: + - mediaType + - size + - digest + properties: + mediaType: + type: string + example: application/vnd.docker.container.image.v1+json + size: + type: integer + example: 7023 + digest: + type: string + example: sha256:123456abcdef... + layers: + type: array + items: + type: object + required: + - mediaType + - size + - digest + properties: + mediaType: + type: string + example: application/vnd.docker.image.rootfs.diff.tar.gzip + size: + type: integer + example: 32654 + digest: + type: string + example: sha256:abcdef123456... + + examples: + sample-manifest: + summary: Sample Docker image manifest (schema v2) + value: + { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "config": { + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 7023, + "digest": "sha256:123456abcdef..." + }, + "layers": [ + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 32654, + "digest": "sha256:abcdef123456..." + } + ] + } + + responses: + "201": + description: Manifest created successfully. + headers: + Docker-Content-Digest: + description: Digest of the stored manifest. + schema: + type: string + example: sha256:abcdef123456... + Location: + description: Canonical location of the uploaded manifest. + schema: + type: string + example: /v2/library/ubuntu/manifests/latest + Content-Length: + description: Always zero. + schema: + type: integer + example: 0 + "400": + description: Invalid name, reference, or manifest. + "401": + description: Authentication required. + "403": + description: Access denied. + "404": + description: Repository not found. + "405": + description: Operation not allowed. + "429": + description: Too many requests. + head: + tags: + - Manifests + summary: Check if manifest exists + operationId: HeadImageManifest + description: | + Use this endpoint to verify whether a manifest exists by tag or digest. + + This is a lightweight operation that returns only headers (no body). It is useful for: + - Checking for the existence of a specific image version + - Determining the digest or size of a manifest before downloading or deleting + + This endpoint requires authentication with pull scope. + + parameters: + - name: name + in: path + required: true + description: Name of the Repository + example: library/ubuntu + schema: + type: string + - name: reference + in: path + required: true + description: Tag or digest to check + examples: + by-tag: + summary: Tag + value: latest + by-digest: + summary: Digest + value: sha256:abc123def456... + schema: + type: string + - name: Authorization + in: header + required: true + schema: + type: string + description: Bearer token for authentication + - name: Accept + in: header + required: false + schema: + type: string + example: application/vnd.docker.distribution.manifest.v2+json + description: | + Media type of the manifest to check. The response will match one of the accepted types. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # HEAD /v2/{name}/manifests/{reference} + curl -I \ + -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + https://registry-1.docker.io/v2/library/ubuntu/manifests/latest + responses: + "200": + description: Manifest exists. + headers: + Content-Length: + description: Size of the manifest in bytes + schema: + type: integer + example: 7082 + Docker-Content-Digest: + description: Digest of the manifest + schema: + type: string + example: sha256:abc123... + Content-Type: + description: Media type of the manifest + schema: + type: string + example: application/vnd.docker.distribution.manifest.v2+json + "404": + description: Manifest not found. + "401": + description: Authentication required. + "403": + description: Access denied. + "429": + description: Too many requests. + delete: + tags: + - Manifests + summary: Delete image manifest + operationId: DeleteImageManifest + description: | + Delete an image manifest from a repository by digest. + + Only untagged or unreferenced manifests can be deleted. If the manifest is still referenced by a tag or another image, the registry will return `403 Forbidden`. + + This operation requires `delete` access to the repository. + + > **Note** + > + > Manifest deletion operations may take some time and could return a `500 Internal Server Error`. The system automatically retries the deletion in the background. Manual intervention is not required. + parameters: + - name: name + in: path + required: true + description: Name of the repository + example: yourusername/helloworld + schema: + type: string + - name: reference + in: path + required: true + description: Digest of the manifest to delete (e.g., `sha256:...`) + example: sha256:abc123def456... + schema: + type: string + - name: Authorization + in: header + required: true + description: Bearer token with `delete` access + schema: + type: string + x-codeSamples: + - lang: Bash + label: cURL + source: | + # DELETE a manifest by digest + curl -X DELETE \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/yourusername/helloworld/manifests/sha256:abc123def456... + responses: + "202": + description: Manifest deleted successfully. No content returned. + "401": + description: Authentication required. + "403": + description: Access denied. The manifest may still be referenced. + "404": + description: Manifest or repository not found. + "405": + description: Only digest-based deletion is allowed. + "429": + description: Too many requests. + /v2/{name}/blobs/uploads/: + post: + tags: + - Blobs + summary: Initiate blob upload or attempt cross-repository blob mount + operationId: InitiateBlobUpload + description: | + Initiate an upload session for a blob (layer or config) in a repository. + + This is the first step in uploading a blob. It returns a `Location` URL where the blob can be uploaded using `PATCH` (chunked) or `PUT` (monolithic). + + Instead of uploading a blob, a client may attempt to mount a blob from another repository (if it has read access) by including the `mount` and `from` query parameters. + + If successful, the registry responds with `201 Created` and the blob is reused without re-upload. + + If the mount fails, the upload proceeds as usual and returns a `202 Accepted`. + + You must authenticate with `push` access to the target repository. + x-codeSamples: + - lang: Bash + label: cURL (Initiate Standard Upload) + source: | + # Initiate a standard blob upload session + curl -i -X POST \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/ + + - lang: Bash + label: cURL (Cross-Repository Blob Mount) + source: | + # Attempt a cross-repository blob mount + curl -i -X POST \ + -H "Authorization: Bearer $TOKEN" \ + "https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/?mount=sha256:abc123def456...&from=library/busybox" + + parameters: + - name: name + in: path + required: true + description: Name of the target repository + example: library/ubuntu + schema: + type: string + - name: mount + in: query + required: false + description: Digest of the blob to mount from another repository + schema: + type: string + example: sha256:abc123def456... + - name: from + in: query + required: false + description: Source repository to mount the blob from + schema: + type: string + example: library/busybox + - name: Authorization + in: header + required: true + schema: + type: string + description: Bearer token for authentication with `push` scope + + responses: + "201": + description: Blob successfully mounted from another repository. + headers: + Location: + description: URL where the mounted blob is accessible + schema: + type: string + example: /v2/library/ubuntu/blobs/sha256:abc123... + Docker-Content-Digest: + description: Canonical digest of the mounted blob + schema: + type: string + example: sha256:abc123... + Content-Length: + description: Always zero + schema: + type: integer + example: 0 + "202": + description: Upload initiated successfully (fallback if mount fails). + headers: + Location: + description: Upload location URL for `PATCH` or `PUT` requests + schema: + type: string + example: /v2/library/ubuntu/blobs/uploads/abc123 + Docker-Upload-UUID: + description: Server-generated UUID for the upload session + schema: + type: string + example: abc123 + Range: + description: Current upload byte range (typically `0-0` at init) + schema: + type: string + example: 0-0 + Content-Length: + description: Always zero + schema: + type: integer + example: 0 + "401": + description: Authentication required. + "403": + description: Access denied. + "404": + description: Repository not found. + "429": + description: Too many requests. + /v2/{name}/blobs/{digest}: + head: + tags: + - Blobs + summary: Check existence of blob + operationId: CheckBlobExists + description: | + Check whether a blob (layer or config) exists in the registry. + + This is useful before uploading a blob to avoid duplicates. + + If the blob is present, the registry returns a `200 OK` response with headers like `Content-Length` and `Docker-Content-Digest`. + + If the blob does not exist, the response will be `404 Not Found`. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # HEAD to check if a blob exists + curl -I \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/sha256:abc123... + parameters: + - name: name + in: path + required: true + description: Name of the Repository + example: library/ubuntu + schema: + type: string + - name: digest + in: path + required: true + description: Digest of the blob + schema: + type: string + example: sha256:abc123def4567890... + - name: Authorization + in: header + required: true + description: Bearer token with pull or push scope + schema: + type: string + example: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6... + + responses: + "200": + description: Blob exists + headers: + Content-Length: + description: Size of the blob in bytes + schema: + type: integer + example: 32654 + Docker-Content-Digest: + description: Digest of the blob + schema: + type: string + example: sha256:abc123def4567890... + Content-Type: + description: MIME type of the blob content + schema: + type: string + example: application/octet-stream + content: + application/json: + examples: + blob-check-request: + summary: Sample request + value: + method: HEAD + url: /v2/library/ubuntu/blobs/sha256:abc123def4567890... + headers: + Authorization: Bearer + Accept: '*/*' + blob-check-response: + summary: Sample 200 response headers + value: + status: 200 OK + headers: + Docker-Content-Digest: sha256:abc123def4567890... + Content-Length: 32654 + Content-Type: application/octet-stream + + "404": + description: Blob not found + "401": + description: Authentication required + "403": + description: Access denied + "429": + description: Too many requests + get: + tags: + - Blobs + summary: Retrieve blob + operationId: GetBlob + description: | + Download the blob identified by digest from the registry. + + Blobs include image layers and configuration objects. Clients must use the digest from the manifest to retrieve a blob. + + This endpoint may return a `307 Temporary Redirect` to a CDN or storage location. Clients must follow the redirect to obtain the actual blob content. + + The blob content is typically a gzipped tarball (for layers) or JSON (for configs). The MIME type is usually `application/octet-stream`. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # GET (download) a blob + curl -L \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/sha256:abc123... \ + -o layer.tar.gz + parameters: + - name: name + in: path + required: true + description: Repository Name + example: library/ubuntu + schema: + type: string + - name: digest + in: path + required: true + description: Digest of the Blob + schema: + type: string + example: sha256:abc123def456... + - name: Authorization + in: header + required: true + schema: + type: string + description: Bearer token with pull scope + example: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6... + + responses: + "200": + description: Blob content returned directly + headers: + Content-Length: + description: Size of the blob in bytes + schema: + type: integer + example: 32768 + Content-Type: + description: MIME type of the blob + schema: + type: string + example: application/octet-stream + Docker-Content-Digest: + description: Digest of the returned blob + schema: + type: string + example: sha256:abc123def456... + content: + application/octet-stream: + schema: + type: string + format: binary + examples: + small-layer: + summary: Example binary blob (gzipped tar layer) + value: "" + + "307": + description: Temporary redirect to blob location + headers: + Location: + description: Redirect URL for blob download (e.g., S3 or CDN) + schema: + type: string + example: https://cdn.docker.io/blobs/library/ubuntu/abc123... + "401": + description: Authentication required + "403": + description: Access denied + "404": + description: Blob not found + "429": + description: Too many requests + /v2/{name}/blobs/uploads/{uuid}: + get: + tags: + - Blobs + summary: Get blob upload status + operationId: GetBlobUploadStatus + description: | + Retrieve the current status of an in-progress blob upload. + + This is useful for: + - Resuming an interrupted upload + - Determining how many bytes have been accepted so far + - Retrying from the correct offset in chunked uploads + + The response includes the `Range` header indicating the byte range received so far, and a `Docker-Upload-UUID` for identifying the session. + x-codeSamples: + - lang: Bash + label: cURL + source: | + # GET upload status + curl -I \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123 + parameters: + - name: name + in: path + required: true + description: Repository Name + example : library/ubuntu + schema: + type: string + - name: uuid + in: path + required: true + description: Upload session UUID + schema: + type: string + example: abc123 + - name: Authorization + in: header + required: true + schema: + type: string + example: Bearer eyJhbGciOi... + + responses: + "204": + description: Upload in progress. No body is returned. + headers: + Range: + description: Current byte range uploaded (inclusive) + schema: + type: string + example: 0-16383 + Docker-Upload-UUID: + description: UUID of the upload session + schema: + type: string + example: abc123 + Location: + description: URL to continue or complete the upload + schema: + type: string + example: /v2/library/ubuntu/blobs/uploads/abc123 + "401": + description: Authentication required + "403": + description: Access denied + "404": + description: Upload session not found + "429": + description: Too many requests + + put: + tags: + - Blobs + summary: Complete blob upload + operationId: CompleteBlobUpload + description: | + Complete the upload of a blob by finalizing an upload session. + + This request must include the `digest` query parameter and optionally the last chunk of data. When the registry receives this request, it verifies the digest and stores the blob. + + This endpoint supports: + - Monolithic uploads (upload entire blob in this request) + - Finalizing chunked uploads (last chunk plus `digest`) + + x-codeSamples: + - lang: Bash + label: cURL + source: | + # PUT – complete upload (monolithic or final chunk) + curl -X PUT \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @layer.tar.gz \ + "https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123?digest=sha256:abcd1234..." + + + parameters: + - name: name + in: path + required: true + description: Repository name + schema: + type: string + example: library/ubuntu + - name: uuid + in: path + required: true + description: Upload session UUID returned from the POST request + schema: + type: string + example: abc123 + - name: digest + in: query + required: true + description: Digest of the uploaded blob + schema: + type: string + example: sha256:abcd1234... + - name: Authorization + in: header + required: true + schema: + type: string + example: Bearer eyJhbGciOi... + + requestBody: + required: false + content: + application/octet-stream: + schema: + type: string + format: binary + examples: + layer-upload: + summary: Layer tarball blob + value: "" + + responses: + "201": + description: Upload completed successfully + headers: + Docker-Content-Digest: + description: Canonical digest of the stored blob + schema: + type: string + example: sha256:abcd1234... + Location: + description: URL where the blob is now accessible + schema: + type: string + example: /v2/library/ubuntu/blobs/sha256:abcd1234... + Content-Length: + description: Always zero for completed uploads + schema: + type: integer + example: 0 + "400": + description: Invalid digest or missing parameters + "401": + description: Authentication required + "403": + description: Access denied + "404": + description: Upload session not found + "416": + description: Requested range not satisfiable (if used in chunked mode) + "429": + description: Too many requests + + patch: + tags: + - Blobs + summary: Upload blob chunk + operationId: UploadBlobChunk + description: | + Upload a chunk of a blob to an active upload session. + + Use this method for **chunked uploads**, especially for large blobs or when resuming interrupted uploads. + + The client sends binary data using `PATCH`, optionally including a `Content-Range` header. + + After each chunk is accepted, the registry returns a `202 Accepted` response with: + - `Range`: current byte range stored + - `Docker-Upload-UUID`: identifier for the upload session + - `Location`: URL to continue the upload or finalize with `PUT` + x-codeSamples: + - lang: Bash + label: cURL + source: | + # PATCH – upload a chunk (first 64 KiB) + curl -X PATCH \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @chunk-0.bin \ + "https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123" + parameters: + - name: name + in: path + required: true + description: Repository name + schema: + type: string + example: library/ubuntu + - name: uuid + in: path + required: true + description: Upload session UUID + schema: + type: string + example: abc123 + - name: Authorization + in: header + required: true + schema: + type: string + example: Bearer eyJhbGciOi... + - name: Content-Range + in: header + required: false + schema: + type: string + example: bytes 0-65535 + description: Optional. Byte range of the chunk being sent + + requestBody: + required: true + content: + application/octet-stream: + schema: + type: string + format: binary + examples: + chunk-0: + summary: Upload chunk 0 of a blob + value: "" + + responses: + "202": + description: Chunk accepted and stored + headers: + Location: + description: URL to continue or finalize the upload + schema: + type: string + example: /v2/library/ubuntu/blobs/uploads/abc123 + Range: + description: Byte range uploaded so far (inclusive) + schema: + type: string + example: 0-65535 + Docker-Upload-UUID: + description: Upload session UUID + schema: + type: string + example: abc123 + "400": + description: Malformed content or range + "401": + description: Authentication required + "403": + description: Access denied + "404": + description: Upload session not found + "416": + description: Range error (e.g., chunk out of order) + "429": + description: Too many requests + delete: + tags: + - Blobs + summary: Cancel blob upload + operationId: CancelBlobUpload + description: | + Cancel an in-progress blob upload session. + + This operation discards any data that has been uploaded and invalidates the upload session. + + Use this when: + - An upload fails or is aborted mid-process + - The client wants to clean up unused upload sessions + + After cancellation, the UUID is no longer valid and a new `POST` must be issued to restart the upload. + + x-codeSamples: + - lang: Bash + label: cURL + source: | + # DELETE – cancel an upload session + curl -X DELETE \ + -H "Authorization: Bearer $TOKEN" \ + https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123` + + parameters: + - name: name + in: path + required: true + description: Name of the repository + schema: + type: string + example: library/ubuntu + - name: uuid + in: path + required: true + description: Upload session UUID + schema: + type: string + example: abc123 + - name: Authorization + in: header + required: true + schema: + type: string + example: Bearer eyJhbGciOi... + + responses: + "204": + description: Upload session cancelled successfully. No body is returned. + headers: + Content-Length: + description: Always zero + schema: + type: integer + example: 0 + "401": + description: Authentication required + "403": + description: Access denied + "404": + description: Upload session not found + "429": + description: Too many requests + + +x-tagGroups: + - name: General + tags: + - overview + - authentication + - pull + - push + - delete + - name: API + tags: + - Manifests + - Blobs diff --git a/prototypes/api-docs/preview/assets/api-prototype/prototype.css b/prototypes/api-docs/preview/assets/api-prototype/prototype.css new file mode 100644 index 000000000000..d7b1143fc219 --- /dev/null +++ b/prototypes/api-docs/preview/assets/api-prototype/prototype.css @@ -0,0 +1,595 @@ +/* Scoped reference tokens inherit Docker's palette and installed typefaces. */ +.api-preview, +.api-nav { + --api-text: var(--color-gray-800, #2c333f); + --api-muted: var(--color-gray-600, #566581); + --api-line: var(--color-gray-100, #e7eaef); + --api-surface: var(--color-background-light, #f9f9fa); + --api-paper: #fff; + --api-link: var(--color-blue-600, #0d4df2); + --api-selected: var(--color-blue-50, #f6f8fe); + --api-mono: "Roboto Mono", ui-monospace, monospace; + color: var(--api-text); +} +.dark .api-preview, +.dark .api-nav { + --api-text: var(--color-gray-100, #e7eaef); + --api-muted: var(--color-gray-300, #a9b4c6); + --api-line: var(--color-gray-800, #2c333f); + --api-surface: var(--color-gray-900, #1e2129); + --api-paper: var(--color-background-dark, #10151b); + --api-link: var(--color-blue-300, #7ba4f4); + --api-selected: #17243b; + color-scheme: dark; +} +.api-preview { + max-width: 1440px; + margin: auto; + font-size: 15px; + line-height: 1.7; + overflow-wrap: anywhere; +} +.api-preview h1 { + font-size: 32px; + font-weight: 550; + letter-spacing: -0.025em; + line-height: 1.25; + margin: 28px 0 20px; + text-wrap: balance; +} +.api-preview h2 { + font-size: 20px; + font-weight: 550; + letter-spacing: -0.015em; + line-height: 1.4; + margin: 36px 0 14px; +} +.api-preview h3, +.api-preview h4 { + font-size: 15px; + font-weight: 550; + line-height: 1.5; + margin: 20px 0 8px; +} +.api-preview p { + margin: 10px 0; + max-width: 72ch; +} +.api-preview .prose { + color: var(--api-text); + font-size: inherit; + line-height: inherit; + max-width: 72ch; +} +.api-preview .prose > :first-child { + margin-top: 0; +} +.api-preview .prose > :last-child { + margin-bottom: 0; +} +.api-preview .prose li > p { + margin: 6px 0; +} +.api-preview a, +.api-nav a { + color: var(--api-link); + text-underline-offset: 3px; +} +.api-preview a:hover { + text-decoration: underline; +} +.api-preview :is(a, button, input, select, summary):focus-visible, +.api-nav a:focus-visible { + outline: 2px solid var(--api-link); + outline-offset: 4px; + border-radius: 3px; +} +.api-preview code { + font-family: var(--api-mono); + font-size: 13px; + font-weight: 400; + overflow-wrap: anywhere; +} +.api-preview .prose code::before, +.api-preview .prose code::after { + content: none; +} +.api-preview pre { + background: var(--api-surface); + color: var(--api-text); + border: 1px solid var(--api-line); + padding: 18px 20px; + border-radius: 6px; + overflow: auto; + font-family: var(--api-mono); + font-size: 13px; + line-height: 1.75; + max-height: 34rem; + margin: 14px 0; + tab-size: 2; +} +.api-preview pre code { + font: inherit; + padding: 0; + background: none; + color: inherit; +} +.api-preview summary { + cursor: pointer; + padding: 6px 0; + font-size: 13px; + color: var(--api-muted); +} +.api-preview summary::marker { + color: var(--api-muted); + font-size: 10px; +} +.api-preview summary:hover { + color: var(--api-link); +} +.api-draft { + display: flex; + gap: 10px; + align-items: baseline; + color: var(--api-muted); + font-size: 13px; + line-height: 1.5; + padding-bottom: 16px; + margin-bottom: 24px; + border-bottom: 1px solid var(--api-line); +} +.api-draft-label { + flex: none; + font-weight: 550; + color: var(--api-text); +} +.api-eyebrow, +.api-label { + font-size: 13px; + font-weight: 500; + color: var(--api-muted); +} +.api-preview .api-eyebrow { + margin-top: 28px; + margin-bottom: -16px; +} +.api-lead { + font-size: 17px; + color: var(--api-muted); +} +.api-cards { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; + margin: 32px 0; +} +.api-card { + display: block; + border: 1px solid var(--api-line); + border-radius: 10px; + padding: 26px; +} +.api-card:hover { + background: var(--api-selected); + border-color: var(--api-link); + text-decoration: none !important; +} +.api-card h2 { + margin: 12px 0; + color: var(--api-text); +} +.api-card p { + color: var(--api-muted); +} +.api-card > span:last-child { + display: inline-block; + margin-top: 10px; + font-size: 14px; +} +.api-crumbs { + display: flex; + flex-wrap: wrap; + gap: 8px; + align-items: center; + color: var(--api-muted); + font-size: 13px; + margin-bottom: 12px; +} +.api-crumbs a { + color: var(--api-muted); +} +.api-tools { + display: flex; + flex-wrap: wrap; + gap: 12px 24px; + align-items: center; + font-size: 13px; + padding-bottom: 20px; + border-bottom: 1px solid var(--api-line); +} +.api-tools > label { + margin-right: auto; +} +.api-preview label { + font-size: 13px; + color: var(--api-muted); +} +.api-preview select, +.api-preview input { + border: 1px solid var(--api-line); + border-radius: 6px; + background: var(--api-paper); + padding: 8px 10px; + color: var(--api-text); + font: inherit; + font-size: 14px; + max-width: 100%; +} +.api-preview select { + margin-left: 8px; +} +.api-preview input::placeholder { + color: var(--api-muted); +} +.api-connection { + padding: 4px 24px 18px; + background: var(--api-surface); + border-radius: 6px; + margin: 28px 0; +} +.api-connection h2 { + margin-top: 18px; +} +.api-filter-label { + display: block; + margin: 16px 0 24px; +} +.api-filter-label input { + display: block; + width: 100%; + max-width: 36rem; + margin: 8px 0; +} +.api-operation-row { + display: grid; + grid-template-columns: 64px minmax(0, 1.2fr) minmax(0, 1fr); + align-items: start; + gap: 16px; + padding: 16px 8px; + border-bottom: 1px solid var(--api-line); + font-size: 14px; +} +.api-operation-row > span:last-child { + color: var(--api-muted); +} +.api-operation-row:hover { + background: var(--api-selected); + text-decoration: none !important; +} +.api-method { + display: inline-block; + font-size: 11px; + font-weight: 650; + background: var(--api-selected); + color: var(--api-link); + border-radius: 4px; + padding: 4px 8px; + line-height: 1.5; + white-space: nowrap; + width: fit-content; + flex-shrink: 0; +} +.api-method[data-method="POST"] { + background: #ebf9ee; + color: #216e4b; +} +.api-method[data-method="DELETE"] { + background: #fff0ef; + color: #ad3039; +} +.api-method[data-method="PATCH"], +.api-method[data-method="PUT"] { + background: #fff5e0; + color: #865514; +} +.dark .api-method[data-method="POST"] { + background: #173728; + color: #a9e5bd; +} +.dark .api-method[data-method="DELETE"] { + background: #3d2229; + color: #f5b6b6; +} +.dark .api-method[data-method="PATCH"], +.dark .api-method[data-method="PUT"] { + background: #392e1c; + color: #edcd96; +} +.api-signature { + display: flex; + align-items: baseline; + gap: 14px; + background: var(--api-surface); + border: 1px solid var(--api-line); + border-radius: 6px; + padding: 14px 18px; + margin: 0 0 28px; +} +.api-signature code { + font-size: 14px; +} +.api-operation-grid { + display: grid; + grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); + gap: 40px; + align-items: start; +} +.api-reading { + min-width: 0; +} +.api-description { + margin-bottom: 32px; +} +.api-description:empty { + display: none; +} +.api-request { + position: sticky; + top: 88px; + max-height: calc(100dvh - 112px); + overflow: auto; + min-width: 0; + border: 1px solid var(--api-line); + border-radius: 8px; + padding: 20px; + background: var(--api-surface); + font-size: 13px; + line-height: 1.65; +} +.api-request-heading { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; +} +.api-request-heading h2 { + margin: 0; + font-size: 15px; + letter-spacing: 0; +} +.api-request-heading > span { + color: var(--api-muted); + font-size: 12px; +} +.api-request > p { + color: var(--api-muted); + margin: 12px 0; +} +.api-request pre { + background: var(--api-paper); + padding: 16px; + white-space: pre-wrap; + overflow-wrap: anywhere; +} +.api-request pre code { + word-break: break-all; +} +.api-request button { + border: 1px solid var(--api-line); + background: var(--api-paper); + color: var(--api-text); + padding: 7px 12px; + border-radius: 5px; + font-size: 13px; + font-weight: 500; + cursor: pointer; +} +.api-request button:hover { + border-color: var(--api-link); + color: var(--api-link); +} +.api-source-details { + border-top: 1px solid var(--api-line); + margin-top: 16px; + padding-top: 8px; +} +.api-field { + border-top: 1px solid var(--api-line); + padding: 16px 0; + margin: 0; +} +.api-field h3 { + display: flex; + flex-wrap: wrap; + gap: 10px; + align-items: baseline; + margin: 0 0 10px; +} +.api-field h3 code, +.api-field > summary code { + color: var(--api-text); + font-weight: 500; +} +.api-field small { + font-size: 12px; + font-weight: 400; + color: var(--api-muted); +} +.api-field .api-required { + color: var(--api-text); + font-size: 12px; +} +.api-field .api-field { + border-top: 0; + border-left: 1px solid var(--api-line); + margin: 12px 0 0 4px; + padding: 0 0 0 16px; +} +.api-type, +.api-ref, +.api-constraints { + font-size: 13px; + color: var(--api-muted); +} +.api-variant { + border-top: 1px solid var(--api-line); + margin-top: 24px; + padding-top: 20px; +} +.api-variant > h3 { + display: flex; + gap: 10px; + align-items: baseline; + margin-top: 0; +} +.api-status { + border: 1px solid var(--api-line); + padding: 1px 6px; + border-radius: 4px; +} +.api-media { + color: var(--api-muted); +} +.api-schema-links { + display: flex; + flex-wrap: wrap; + gap: 12px 20px; + font-size: 14px; +} +.api-review { + font-size: 13px; + background: var(--api-surface); + padding: 16px 20px; + margin: 32px 0; + border-radius: 6px; +} +.api-nav { + padding: 20px 8px; + font-size: 14px; + line-height: 1.5; +} +.api-nav a { + display: block; + padding: 7px 10px; + margin: 2px 0; + color: var(--api-muted); +} +.api-nav a:hover { + color: var(--api-link); + background: var(--api-selected); +} +.api-nav a[aria-current="page"] { + background: var(--api-selected); + color: var(--api-link); + font-weight: 500; + box-shadow: inset 2px 0 var(--api-link); +} +.api-nav h2 { + font-size: 16px; + font-weight: 550; + margin: 24px 10px 4px; +} +.api-nav .api-nav-version { + color: var(--api-muted); + font-size: 13px; + margin: 0 10px 16px; +} +.api-nav h3 { + font-size: 13px; + font-weight: 550; + margin: 26px 10px 8px; +} +.api-nav .api-nav-operation { + display: grid; + grid-template-columns: 42px minmax(0, 1fr); + gap: 8px; + align-items: baseline; +} +.api-nav small { + font-size: 11px; + font-weight: 600; + color: var(--api-link); +} +.api-nav small[data-method="POST"] { + color: #216e4b; +} +.api-nav small[data-method="DELETE"] { + color: #ad3039; +} +.api-nav small[data-method="PATCH"], +.api-nav small[data-method="PUT"] { + color: #865514; +} +.dark .api-nav small[data-method="POST"] { + color: #a9e5bd; +} +.dark .api-nav small[data-method="DELETE"] { + color: #f5b6b6; +} +.dark .api-nav small[data-method="PATCH"], +.dark .api-nav small[data-method="PUT"] { + color: #edcd96; +} +.api-nav .api-nav-back { + font-size: 13px; + color: var(--api-link); +} +.api-preview [hidden] { + display: none !important; +} +.api-preview[data-api-view="schema"] > .prose { + margin-bottom: 24px; +} +.api-preview[data-api-view="schema"] > .api-field { + max-width: 80ch; +} +@media (max-width: 1199px) { + .api-operation-grid { + grid-template-columns: 1fr; + gap: 28px; + } + .api-request { + position: static; + max-height: none; + overflow: visible; + grid-row: 1; + } +} +@media (max-width: 767px) { + main > div:has(> .api-preview) { + padding: 24px 20px; + } + .api-cards { + grid-template-columns: 1fr; + } + .api-preview h1 { + font-size: 28px; + } + .api-operation-row { + grid-template-columns: 56px minmax(0, 1fr); + gap: 6px 12px; + } + .api-operation-row > span:last-child { + grid-column: 2; + } + .api-tools { + gap: 14px 20px; + } + .api-tools > label { + flex-basis: 100%; + } + .api-draft { + align-items: start; + font-size: 12px; + } + .api-signature { + padding: 12px; + gap: 10px; + } + .api-signature code { + font-size: 13px; + } + .api-request { + padding: 16px; + } +} diff --git a/prototypes/api-docs/preview/content/api-prototype/_content.gotmpl b/prototypes/api-docs/preview/content/api-prototype/_content.gotmpl new file mode 100644 index 000000000000..0738675ff4d0 --- /dev/null +++ b/prototypes/api-docs/preview/content/api-prototype/_content.gotmpl @@ -0,0 +1,12 @@ +{{- $data := index hugo.Data "api-prototype" -}} +{{- if ne (int $data.modelVersion) 1 }}{{ errorf "Unsupported API presentation model version" }}{{ end -}} +{{- .AddPage (dict "path" "." "kind" "section" "title" "Docker APIs" "description" "Explore Docker HTTP APIs, connection requirements, and versioned references." "layout" "api-prototype" "params" (dict "view" "catalog" "keywords" (slice "API" "HTTP" "OpenAPI"))) -}} +{{- range $api := $data.apis -}} + {{- $.AddPage (dict "path" $api.id "kind" "section" "title" (printf "%s API %v" $api.title $api.version) "description" (printf "%s HTTP API reference, version %v." $api.title $api.version) "layout" "api-prototype" "params" (dict "view" "overview" "apiID" $api.id "keywords" (slice "API" $api.product))) -}} + {{- range $op := $api.operations -}} + {{- $.AddPage (dict "path" (printf "%s/operations/%s" $api.id (crypto.SHA256 $op.id)) "url" $op.url "title" $op.summary "description" (printf "%s %s — %s API %v." $op.method $op.path $api.title $api.version) "layout" "api-prototype" "params" (dict "view" "operation" "apiID" $api.id "operationID" $op.id "keywords" (slice $op.method $op.path $op.id))) -}} + {{- end -}} + {{- range $schema := $api.schemas -}} + {{- $.AddPage (dict "path" (printf "%s/schemas/%s" $api.id (crypto.SHA256 $schema.name)) "url" $schema.url "title" $schema.name "description" (printf "%s schema in %s API %v." $schema.name $api.title $api.version) "layout" "api-prototype" "params" (dict "view" "schema" "apiID" $api.id "schemaName" $schema.name "keywords" (slice "schema" $schema.name))) -}} + {{- end -}} +{{- end -}} diff --git a/prototypes/api-docs/preview/layouts/_partials/api-prototype/description.html b/prototypes/api-docs/preview/layouts/_partials/api-prototype/description.html new file mode 100644 index 000000000000..1616cc83a7f5 --- /dev/null +++ b/prototypes/api-docs/preview/layouts/_partials/api-prototype/description.html @@ -0,0 +1,13 @@ +{{- $text := .text | default "" -}} +{{- $api := .api -}} +{{- range $api.operations -}} + {{- $text = replace $text (printf "(#operation/%s)" .id) (printf "(%s)" .url) -}} + {{- $text = replaceRE (printf "\\(#tag/[^)]+/operation/%s\\)" .id) (printf "(%s)" .url) $text -}} +{{- end -}} +{{- range $api.schemas -}} + {{- $text = replace $text (printf "(#schema-%s)" .name) (printf "(%s)" .url) -}} +{{- end -}} +{{- range $api.tags -}} + {{- $text = replace $text (printf "(#tag/%s)" .name) (printf "(%s#tag-%s)" $api.url (.name | urlize)) -}} +{{- end -}} +{{- return $text -}} diff --git a/prototypes/api-docs/preview/layouts/_partials/api-prototype/manual-link.html b/prototypes/api-docs/preview/layouts/_partials/api-prototype/manual-link.html new file mode 100644 index 000000000000..3170c71ea9a4 --- /dev/null +++ b/prototypes/api-docs/preview/layouts/_partials/api-prototype/manual-link.html @@ -0,0 +1,15 @@ +{{ if site.Params.apiPrototype }} + {{ $data := index hugo.Data "api-prototype" }} + {{ range $data.apis }} + {{ $manual := site.GetPage .manual }} + {{ if and $manual (eq $manual.RelPermalink $.RelPermalink) }} +

+ Explore the {{ .title }} API {{ .version }} prototype → +

+ {{ end }} + {{ end }} +{{ end }} diff --git a/prototypes/api-docs/preview/layouts/_partials/api-prototype/navigation.html b/prototypes/api-docs/preview/layouts/_partials/api-prototype/navigation.html new file mode 100644 index 000000000000..4e0f10d59b5d --- /dev/null +++ b/prototypes/api-docs/preview/layouts/_partials/api-prototype/navigation.html @@ -0,0 +1,29 @@ +{{ $data := index hugo.Data "api-prototype" }} + diff --git a/prototypes/api-docs/preview/layouts/_partials/api-prototype/path.html b/prototypes/api-docs/preview/layouts/_partials/api-prototype/path.html new file mode 100644 index 000000000000..cb8045e25430 --- /dev/null +++ b/prototypes/api-docs/preview/layouts/_partials/api-prototype/path.html @@ -0,0 +1,4 @@ +{{- /* Break long paths between segments without changing their copied text. */ -}} +{{- range $i, $segment := split . "/" -}} + {{- if $i -}}/{{- end -}}{{- $segment -}} +{{- end -}} diff --git a/prototypes/api-docs/preview/layouts/_partials/api-prototype/schema.html b/prototypes/api-docs/preview/layouts/_partials/api-prototype/schema.html new file mode 100644 index 000000000000..8b5add23938e --- /dev/null +++ b/prototypes/api-docs/preview/layouts/_partials/api-prototype/schema.html @@ -0,0 +1,85 @@ +{{ $s := .schema }}{{ $api := .api }}{{ $depth := .depth }} +{{ if reflect.IsMap $s }} + {{ with index $s "$ref" }} + {{ $url := index $api.schemaURLs . }} +

+ Schema: + {{ if $url }} + {{ strings.TrimPrefix "#/components/schemas/" . }} + {{ else }} + {{ . }} + {{ end }} +

+ {{ end }} + {{ with $s.type }} +

+ Type: + {{ if reflect.IsSlice . }} + {{ delimit . " | " }} + {{ else }} + {{ . }} + {{ end }} +

+ {{ end }} + {{ with $s.description }} +
{{ . | markdownify }}
+ {{ end }} + {{ if lt $depth 3 }} + {{ range $name,$v := $s.properties }} +
+ + {{ $name }}{{ if in $s.required $name }} + · required + {{ end }}{{ if $v.readOnly }} + · response only + {{ end }}{{ if $v.writeOnly }}· request only{{ end }} + + {{ partial "api-prototype/schema.html" (dict "schema" $v "api" $api "depth" (add $depth 1)) }} +
+ {{ end }} + {{ range $keyword := slice "allOf" "oneOf" "anyOf" }} + {{ with index $s $keyword }} +
+ + {{ if eq $keyword "allOf" }} + All constraints apply + {{ else if eq $keyword "oneOf" }} + Exactly one alternative must match + {{ else }} + One or more alternatives must match + {{ end }} + + {{ range . }} + {{ partial "api-prototype/schema.html" (dict "schema" . "api" $api "depth" (add $depth 1)) }} + {{ end }} +
+ {{ end }} + {{ end }} + {{ if isset $s "items" }} +
+ Array item + {{ partial "api-prototype/schema.html" (dict "schema" $s.items "api" $api "depth" (add $depth 1)) }} +
+ {{ end }} + {{ end }} + {{ if or (ge $depth 3) (not (index $s "$ref")) (gt (len $s) 1) }} +
+ All schema constraints and annotations +
{{ $s | jsonify (dict "indent" "  ") }}
+
+ {{ end }} +{{ else }} +

+ {{ if eq $s false }} + No value satisfies this schema. + {{ else if eq $s true }} + Any value satisfies this schema. + {{ else }} + No schema is declared. + {{ end }} +

+{{ end }} diff --git a/prototypes/api-docs/preview/layouts/api-prototype.html b/prototypes/api-docs/preview/layouts/api-prototype.html new file mode 100644 index 000000000000..9075c7792931 --- /dev/null +++ b/prototypes/api-docs/preview/layouts/api-prototype.html @@ -0,0 +1,359 @@ +{{ define "left" }} + {{ partial "sidebar/mainnav.html" . }} + {{ partial "api-prototype/navigation.html" . }} +{{ end }} +{{ define "main" }} + {{ $style := resources.Get "api-prototype/prototype.css" | fingerprint }} + + +
+
+ Prototype + Converted specifications contain assumptions pending product + review. +
+ {{ $data := index hugo.Data "api-prototype" }} + {{ $api := dict }}{{ range $data.apis }} + {{ if eq .id $.Params.apiID }}{{ $api = . }}{{ end }} + {{ end }} + {{ if eq .Params.view "catalog" }} +

Developer reference

+

Docker APIs

+

+ Build with Docker, from your local daemon to hosted services. +

+

+ Choose an API to find connection guidance, operations, and data models. +

+ + {{ else }} + +
+ Product manualDownload source packageMarkdown +
+ + {{ if eq .Params.view "overview" }} +

+ {{ if eq $api.connection "unix" }} + User-operated API + {{ else }} + Hosted API + {{ end }} +

+

{{ $api.title }} API

+

+ API {{ $api.version }} · {{ len $api.operations }} operations · + {{ len $api.schemas }} named schemas +

+
+

Connect and authenticate

+

{{ $api.auth }}

+ {{ if eq $api.connection "unix" }} +
curl --unix-socket /var/run/docker.sock http://localhost/v{{ $api.version }}/version
+ {{ else }} + {{ range $api.servers }}{{ .url }}{{ end }} + {{ end }}{{ range $api.guides }} +

Related setup guidance ↗

+ {{ end }} +
+
+ API overview and workflows +
+ {{ partial "api-prototype/description.html" (dict "text" $api.description "api" $api) | markdownify }} +
+ {{ range $api.tags }} +
+

{{ .summary }}

+
+ {{ partial "api-prototype/description.html" (dict "text" .description "api" $api) | markdownify }} +
+
+ {{ end }} +
+

Operations

+ +
+ {{ range $api.operations }} + {{ .method }}{{ partial "api-prototype/path.html" .path }}{{ .summary }} + {{ end }} +
+

Schemas

+ +
+ + Source review status · + {{ len ($api.diagnostics | default slice) }} + recorded exceptions + +

+ Spec digest: {{ $api.digest }}. Owner: + {{ $api.owner }}. +

+

+ Complete migration ledger + · + Exact validation exceptions +

+ {{ range $api.assumptions }} +

{{ .pointer }}: {{ .rationale }}

+ {{ end }} +
+ {{ else if eq .Params.view "operation" }} + {{ range $api.operations }} + {{ if eq .id $.Params.operationID }} +

{{ .summary }}

+
+ {{ .method }}{{ partial "api-prototype/path.html" .path }}{{ if .deprecated }} + Deprecated + {{ end }} +
+
+
+
+ {{ partial "api-prototype/description.html" (dict "text" .description "api" $api) | markdownify }} +
+

Connection and access

+

{{ $api.auth }}

+ {{ range .servers }} +

+ {{ .url }}{{ with .description }} + — + {{ . }} + {{ end }} +

+ {{ end }} + {{ if not .security }} +

+ No HTTP authentication requirement is declared for this + operation. Transport access controls can still apply. +

+ {{ else }} +

+ Use one of these alternatives. Requirements within an + alternative apply together. +

+
    + {{ range .security }} +
  • + {{ $first := true }}{{ range $name, $scopes := . }} + {{ if not $first }} + AND + {{ end }}{{ $first = false }}{{ $name }}{{ with $scopes }} + ({{ delimit . ", " }}) + {{ end }} + {{ end }}{{ if $first }}Anonymous access{{ end }} +
  • + {{ end }} +
+ {{ end }} +

Parameters

+ {{ if not .parameters }} +

No parameters are declared.

+ {{ end }} + {{ range .parameters }} +
+

+ {{ .name }} + {{ .in }} + {{ if .required }} + Required + {{ end }} +

+
+ {{ partial "api-prototype/description.html" (dict "text" .description "api" $api) | markdownify }} +
+ {{ if isset . "schema" }} + {{ partial "api-prototype/schema.html" (dict "schema" .schema "api" $api "depth" 0) }} + {{ end }}{{ with .content }} +
{{ . | jsonify (dict "indent" "  ") }}
+ {{ end }}{{ with .style }} +

Serialization: {{ . }}

+ {{ end }} +
+ {{ end }} +

Request and responses

+ + {{ range $i, $v := .variants }} +
+

+ {{ $v.direction | humanize }} + {{ with $v.status }} + {{ . }} + {{ end }} +

+
+ {{ partial "api-prototype/description.html" (dict "text" $v.description "api" $api) | markdownify }} +
+ {{ if $v.media }} +

{{ $v.media }}

+ {{ else }} +

No response content is declared.

+ {{ end }} + {{ with $v.headers }} +

Headers

+ {{ range $name,$header := . }} +
+ {{ $name }} +

{{ $header.description }}

+
{{ $header | jsonify (dict "indent" "  ") }}
+
+ {{ end }} + {{ end }} + {{ if isset $v "schema" }} + {{ partial "api-prototype/schema.html" (dict "schema" $v.schema "api" $api "depth" 0) }} + {{ end }} + {{ if isset $v "itemSchema" }} +

Stream item

+ {{ partial "api-prototype/schema.html" (dict "schema" $v.itemSchema "api" $api "depth" 0) }} + {{ end }} + {{ if $v.examples }} +
+ {{ if gt (len $v.examples) 1 }} + + {{ end }}{{ range $j,$ex := $v.examples }} +
+

{{ $ex.name }}

+ {{ if eq $ex.valid false }} +

+ Source example does not satisfy its schema; + owner review is required. +

+ {{ end }} +
{{ $ex.value | jsonify (dict "indent" "  ") }}
+
+ {{ end }} +
+ {{ end }} +
+ {{ end }} +

Referenced schemas

+ {{ range .references }} + {{ if .url }} +

{{ .ref }}

+ {{ end }} + {{ end }} +
+ Complete operation contract +
{{ .raw | jsonify (dict "indent" "  ") }}
+
+
+ +
+ {{ end }} + {{ end }} + {{ else if eq .Params.view "schema" }} + {{ range $api.schemas }} + {{ if eq .name $.Params.schemaName }} +

Schema

+

{{ .name }}

+ {{ partial "api-prototype/schema.html" (dict "schema" .schema "api" $api "depth" 0) }} + {{ end }} + {{ end }} + {{ end }} + {{ end }} +
+{{ end }} diff --git a/prototypes/api-docs/preview/layouts/api-prototype.markdown.md b/prototypes/api-docs/preview/layouts/api-prototype.markdown.md new file mode 100644 index 000000000000..d7902fd5825e --- /dev/null +++ b/prototypes/api-docs/preview/layouts/api-prototype.markdown.md @@ -0,0 +1,150 @@ +{{- $data := index hugo.Data "api-prototype" -}} +{{- $api := dict -}}{{- range $data.apis -}}{{- if eq .id $.Params.apiID -}}{{- $api = . -}}{{- end -}}{{- end -}} +# {{ .Title }} + +Prototype: converted specifications contain documented assumptions pending product review. + +{{ if eq .Params.view "catalog" }} +Choose a Docker HTTP API: +{{ range $data.apis }} +- [{{ .title }} API {{ .version }}]({{ .url }}): {{ len .operations }} operations; {{ .connection }} connection +{{ end }} +{{ else }} +[API catalog](/api-prototype/) · [{{ $api.title }} overview]({{ $api.url }}) · [Product manual]({{ ref . $api.manual }}) · [Source package](/api-prototype/sources/{{ $api.id }}/source.zip) + +API version: {{ $api.version }} + +{{ if eq .Params.view "overview" }} +## Connection and authentication + +{{ $api.auth }} +{{ range $api.servers }} +Server: `{{ .url }}` +{{ end }} +{{ if eq $api.connection "unix" }} +```console +curl --unix-socket /var/run/docker.sock http://localhost/v{{ $api.version }}/version +``` +{{ end }} +## Overview + +{{ partial "api-prototype/description.html" (dict "text" $api.description "api" $api) }} +{{ range $api.tags }} +### {{ .summary }} + +{{ partial "api-prototype/description.html" (dict "text" .description "api" $api) }} +{{ end }} +## Operations +{{ range $api.operations }} +- [{{ .method }} {{ .path }}]({{ .url }}): {{ .summary }} +{{ end }} +## Schemas +{{ range $api.schemas }} +- [{{ .name }}]({{ .url }}) +{{ end }} +## Source review + +Owner: {{ $api.owner }}. Digest: `{{ $api.digest }}`. + +[Migration ledger](/api-prototype/sources/{{ $api.id }}/migration.json) · [Validation exceptions](/api-prototype/sources/{{ $api.id }}/exceptions.json) +{{ else if eq .Params.view "operation" }} +{{ range $api.operations }}{{ if eq .id $.Params.operationID }} +`{{ .method }} {{ .path }}` + +{{ partial "api-prototype/description.html" (dict "text" .description "api" $api) }} +{{ if .deprecated }} +Deprecated operation. +{{ end }} +## Connection and access + +{{ $api.auth }} +{{ range .servers }} +Server: `{{ .url }}` +{{ end }} +Effective security: alternatives are OR; schemes within an alternative are AND. An empty array declares no HTTP authentication requirement. + +```json +{{ .security | jsonify (dict "indent" " ") }} +``` +## Example request + +Replace placeholders and provide the required credentials or request body. + +```console +{{ .curl }} +``` +{{ range .curlNotes }} +{{ . }} +{{ end }} +## Parameters +{{ range .parameters }} +### {{ .name }} + +Location: {{ .in }}. Required: {{ if .required }}yes{{ else }}no{{ end }}. + +{{ partial "api-prototype/description.html" (dict "text" .description "api" $api) }} + +```json +{{ . | jsonify (dict "indent" " ") }} +``` +{{ end }} +## Request and responses +{{ range .variants }} +### {{ .direction }} {{ .status }} {{ .media }} + +{{ partial "api-prototype/description.html" (dict "text" .description "api" $api) }} +{{ if not .media }} +No response content is declared. +{{ end }} +{{ if isset . "schema" }} +Schema: + +```json +{{ .schema | jsonify (dict "indent" " ") }} +``` +{{ end }} +{{ if isset . "itemSchema" }} +Stream item schema: + +```json +{{ .itemSchema | jsonify (dict "indent" " ") }} +``` +{{ end }} +{{ with .headers }} +Headers: + +```json +{{ . | jsonify (dict "indent" " ") }} +``` +{{ end }} +{{ range .examples }} +{{ .name }}: +{{ if eq .valid false }} +Source example does not satisfy its schema; owner review is required. +{{ end }} +```json +{{ .value | jsonify (dict "indent" " ") }} +``` +{{ end }} +{{ end }} +## Complete operation contract + +```json +{{ .raw | jsonify (dict "indent" " ") }} +``` + +## Referenced schemas +{{ range .references }} +- {{ if .url }}[{{ .ref }}]({{ .url }}){{ else }}`{{ .ref }}`{{ end }} +{{ end }} +{{ end }}{{ end }} +{{ else if eq .Params.view "schema" }} +{{ range $api.schemas }}{{ if eq .name $.Params.schemaName }} +Schema constraints and annotations: + +```json +{{ .schema | jsonify (dict "indent" " ") }} +``` +{{ end }}{{ end }} +{{ end }} +{{ end }} diff --git a/prototypes/api-docs/preview/static/api-prototype/prototype.js b/prototypes/api-docs/preview/static/api-prototype/prototype.js new file mode 100644 index 000000000000..7c51e1843235 --- /dev/null +++ b/prototypes/api-docs/preview/static/api-prototype/prototype.js @@ -0,0 +1,49 @@ +document.querySelectorAll("[data-api-version]").forEach((select) => + select.addEventListener("change", () => { + location.href = select.value; + }), +); +document.querySelectorAll("[data-api-filter]").forEach((input) => + input.addEventListener("input", () => { + const term = input.value.toLocaleLowerCase(); + document.querySelectorAll("[data-api-filter-item]").forEach((row) => { + row.hidden = !row.textContent.toLocaleLowerCase().includes(term); + }); + }), +); +document.querySelectorAll("[data-api-copy]").forEach((button) => + button.addEventListener("click", async () => { + try { + await navigator.clipboard.writeText( + button.parentElement.querySelector("[data-api-copy-source]") + .textContent, + ); + button.textContent = "Copied"; + } catch { + button.textContent = "Select and copy the request"; + } + }), +); +document.querySelectorAll("[data-api-example-select]").forEach((select) => { + const update = () => + select + .closest("[data-api-examples]") + .querySelectorAll("[data-api-example]") + .forEach((example) => { + example.hidden = example.dataset.apiExample !== select.value; + }); + select.addEventListener("change", update); + update(); +}); + +document.querySelectorAll("[data-api-media-select]").forEach((select) => + select.addEventListener("change", () => { + document.querySelectorAll("[data-api-media]").forEach((variant) => { + variant.hidden = Boolean( + select.value && + variant.dataset.apiMedia && + select.value !== variant.dataset.apiMedia, + ); + }); + }), +); diff --git a/prototypes/api-docs/source-lock.json b/prototypes/api-docs/source-lock.json new file mode 100644 index 000000000000..432c55f965b0 --- /dev/null +++ b/prototypes/api-docs/source-lock.json @@ -0,0 +1,100 @@ +{ + "revision": "371255294cf8db2ee20206bf5cc9c165a3a1ea16", + "tools": { + "swagger2openapi": "7.0.8", + "yaml": "2.8.1", + "libopenapi": "0.38.7", + "vacuum": "0.30.3", + "jsonschema": "6.0.3", + "oasdiff": "1.31.0" + }, + "sources": [ + { + "id": "governance", + "product": "governance", + "title": "AI Governance", + "source": "content/reference/api/ai-governance/api.yaml", + "owner": "docker/governor-services", + "upstreamPath": "governor-service-api/openapi.yaml", + "manual": "/manuals/ai/sandboxes/governance/", + "connection": "hosted", + "auth": "Exchange supported Docker credentials for a Hub bearer token. Organization permissions still apply.", + "guides": [ + "/reference/api/hub/latest/#tag/authentication" + ], + "sha256": "c133c0782991ceef45f6191e9e062d896fb4effc2d96dbd0fa15cba48a4032bc" + }, + { + "id": "hub", + "product": "hub", + "title": "Docker Hub", + "source": "content/reference/api/hub/latest.yaml", + "owner": "docker/docs (product authority to confirm)", + "manual": "/manuals/docker-hub/", + "connection": "hosted", + "auth": "Use the documented Hub token exchange. SCIM operations use a separate provisioning token.", + "guides": [ + "/manuals/security/provisioning/scim/provision-scim.md" + ], + "sha256": "aeefa9b62b10d70f9e28e9508d5a4c1361e0a541e209ff0af9ed2544b0cb415e" + }, + { + "id": "dvp", + "product": "dvp", + "title": "Publisher analytics", + "source": "content/reference/api/dvp/latest.yaml", + "owner": "docker/docs (product authority to confirm)", + "manual": "/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md", + "connection": "hosted", + "auth": "Analytics calls use a bearer token. The copied source retains the legacy login flow pending product confirmation.", + "guides": [], + "sha256": "4aeacaaa1237609c3dd9cec43f9807a229ac98a0e9b837f291c02df3cf89172a" + }, + { + "id": "registry", + "product": "registry", + "title": "Registry", + "source": "content/reference/api/registry/latest.yaml", + "owner": "docker/docs (product authority to confirm)", + "manual": "/manuals/docker-hub/repos/", + "connection": "hosted", + "auth": "Follow the WWW-Authenticate challenge and obtain a repository-scoped registry token. This is separate from the Hub API token exchange.", + "guides": [ + "/reference/api/registry/auth.md" + ], + "sha256": "229198e078ee30400c0359311f5baaf23a1f80563a1c2e82834f17f2db0d9fd1" + }, + { + "id": "engine-1.56", + "product": "engine", + "title": "Docker Engine", + "source": "_vendor/github.com/moby/moby/api/docs/v1.56.yaml", + "owner": "moby/moby", + "moduleVersion": "github.com/moby/moby/api@v1.56.0", + "manual": "/manuals/engine/", + "connection": "unix", + "auth": "Connect to a daemon you operate. Local socket permissions control access; remote daemons require their configured transport protection. X-Registry-Auth delegates registry credentials and does not authenticate the daemon caller.", + "guides": [ + "/manuals/engine/security/protect-access.md", + "/manuals/engine/daemon/remote-access.md" + ], + "sha256": "f09a22ad220d551dca5d6c402052204d3e9fd1f16943cd78ba6677ea1266616f" + }, + { + "id": "engine-1.55", + "product": "engine", + "title": "Docker Engine", + "source": "_vendor/github.com/moby/moby/api/docs/v1.55.yaml", + "owner": "moby/moby", + "moduleVersion": "github.com/moby/moby/api@v1.56.0", + "manual": "/manuals/engine/", + "connection": "unix", + "auth": "Connect to a daemon you operate. Local socket permissions control access; remote daemons require their configured transport protection. X-Registry-Auth delegates registry credentials and does not authenticate the daemon caller.", + "guides": [ + "/manuals/engine/security/protect-access.md", + "/manuals/engine/daemon/remote-access.md" + ], + "sha256": "5464356f9e0ba0d6b01d90564b7f6438aca69d9fc627892fc4d824645ddb9710" + } + ] +} From 98d2e4ccf21227585826beffafff3fa60420c69b Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Tue, 8 Sep 2026 06:45:49 +0000 Subject: [PATCH 2/9] docs: include API prototype in Netlify deploy previews --- API-DOCUMENTATION-PROTOTYPE.md | 4 ++++ _vale/config/vocabularies/Docker/accept.txt | 1 + hack/api-docs/README.md | 5 +++++ netlify.toml | 7 +++++-- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/API-DOCUMENTATION-PROTOTYPE.md b/API-DOCUMENTATION-PROTOTYPE.md index 1f4f5d4062c3..a18ae6181b7f 100644 --- a/API-DOCUMENTATION-PROTOTYPE.md +++ b/API-DOCUMENTATION-PROTOTYPE.md @@ -28,6 +28,10 @@ site with the command in the [tooling README](hack/api-docs/README.md). Default site builds exclude the prototype. No production URLs or navigation were migrated. +This draft's Netlify deploy previews include the prototype at `/api-prototype/`. +The deploy-preview context runs the same pipeline and publishes its site output; +production builds retain their existing configuration. + ![API catalog](prototypes/api-docs/evidence/catalog.png) ![Operation reference](prototypes/api-docs/evidence/operation.png) diff --git a/_vale/config/vocabularies/Docker/accept.txt b/_vale/config/vocabularies/Docker/accept.txt index 75ac4e3e93b7..4154a144b048 100644 --- a/_vale/config/vocabularies/Docker/accept.txt +++ b/_vale/config/vocabularies/Docker/accept.txt @@ -169,6 +169,7 @@ nameserver namespaced? namespacing Neovim +Netlify Npgsql netfilter netlabel diff --git a/hack/api-docs/README.md b/hack/api-docs/README.md index fe9c6f4078c9..fcd4909cc6ed 100644 --- a/hack/api-docs/README.md +++ b/hack/api-docs/README.md @@ -24,6 +24,11 @@ The build exports the complete preview site, including the existing manuals, under `tmp/api-prototype/site`. It never deploys or submits upstream changes. The API pages exist only with the prototype Hugo config. +This draft's Netlify deploy previews run the same pipeline and publish +`tmp/api-prototype/site`, using `DEPLOY_PRIME_URL` as the site origin. Open +`/api-prototype/` on the deploy preview to explore the catalog. Production +builds retain their existing configuration. + ## Commands | Command | Behavior | diff --git a/netlify.toml b/netlify.toml index 10bff81d0034..282629d6edbb 100644 --- a/netlify.toml +++ b/netlify.toml @@ -3,11 +3,14 @@ publish = "public" [context.deploy-preview.environment] NODE_VERSION = "24" +GO_VERSION = "1.26.5" NODE_ENV = "production" HUGO_VERSION = "0.163.0" HUGO_ENABLEGITINFO = "true" HUGO_ENVIRONMENT = "preview" -SECRETS_SCAN_OMIT_PATHS = "public/contribute/file-conventions/index.html" +SECRETS_SCAN_OMIT_PATHS = "tmp/api-prototype/site/contribute/file-conventions/index.html" [context.deploy-preview] -command = "hugo --gc --minify -b $DEPLOY_PRIME_URL && ./hack/flatten-and-resolve.js && npx pagefind@v1.5.2" +# This draft publishes the opt-in prototype alongside the regular docs. +command = "API_PROTOTYPE_URL=$DEPLOY_PRIME_URL ./hack/api-docs/run.sh build" +publish = "tmp/api-prototype/site" From 53b106529a6650b412fd65ba9a3b481ae444f3cb Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Tue, 8 Sep 2026 11:12:16 +0000 Subject: [PATCH 3/9] docs: load API reference styles before first paint --- layouts/baseof.html | 1 + prototypes/api-docs/preview/layouts/api-prototype.html | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/layouts/baseof.html b/layouts/baseof.html index 823d4a087912..87dfff2839fd 100644 --- a/layouts/baseof.html +++ b/layouts/baseof.html @@ -2,6 +2,7 @@ {{ partial "head.html" . }} + {{ block "head-extra" . }}{{ end }} + +{{ end }} {{ define "left" }} {{ partial "sidebar/mainnav.html" . }} {{ partial "api-prototype/navigation.html" . }} {{ end }} {{ define "main" }} - {{ $style := resources.Get "api-prototype/prototype.css" | fingerprint }} - -
Prototype From 6dcebd134ed8949775f47691a0efe447e4dd75f9 Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Tue, 8 Sep 2026 13:34:33 +0000 Subject: [PATCH 4/9] docs: arrange prototype schemas in a compact index --- .../assets/api-prototype/prototype.css | 22 ++++++++++++++++--- .../preview/layouts/api-prototype.html | 10 ++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/prototypes/api-docs/preview/assets/api-prototype/prototype.css b/prototypes/api-docs/preview/assets/api-prototype/prototype.css index d7b1143fc219..4f703439ec67 100644 --- a/prototypes/api-docs/preview/assets/api-prototype/prototype.css +++ b/prototypes/api-docs/preview/assets/api-prototype/prototype.css @@ -451,10 +451,26 @@ color: var(--api-muted); } .api-schema-links { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr)); + gap: 0 28px; + margin: 0; + padding: 0; + list-style: none; +} +.api-schema-links li { + min-width: 0; + border-bottom: 1px solid var(--api-line); +} +.api-schema-links a { display: flex; - flex-wrap: wrap; - gap: 12px 20px; - font-size: 14px; + align-items: center; + height: 100%; + min-height: 44px; + padding: 10px 8px; +} +.api-schema-links a:hover { + background: var(--api-selected); } .api-review { font-size: 13px; diff --git a/prototypes/api-docs/preview/layouts/api-prototype.html b/prototypes/api-docs/preview/layouts/api-prototype.html index 71fc61c77c7a..260e0e074f93 100644 --- a/prototypes/api-docs/preview/layouts/api-prototype.html +++ b/prototypes/api-docs/preview/layouts/api-prototype.html @@ -131,9 +131,13 @@

Operations

{{ end }}

Schemas

- +
Source review status · From 6a002bfd0ec92ff4df53ef88e68c0afe6eed0b24 Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Tue, 8 Sep 2026 13:47:40 +0000 Subject: [PATCH 5/9] docs: surface API introductions and trim redundant overview metadata --- .../assets/api-prototype/prototype.css | 17 ++++++++++ .../api-prototype/overview-tags.html | 11 ++++++ .../preview/layouts/api-prototype.html | 34 +++++++++++-------- .../preview/layouts/api-prototype.markdown.md | 16 ++++----- 4 files changed, 56 insertions(+), 22 deletions(-) create mode 100644 prototypes/api-docs/preview/layouts/_partials/api-prototype/overview-tags.html diff --git a/prototypes/api-docs/preview/assets/api-prototype/prototype.css b/prototypes/api-docs/preview/assets/api-prototype/prototype.css index 4f703439ec67..9ccd16854d0d 100644 --- a/prototypes/api-docs/preview/assets/api-prototype/prototype.css +++ b/prototypes/api-docs/preview/assets/api-prototype/prototype.css @@ -70,6 +70,23 @@ .api-preview .prose li > p { margin: 6px 0; } +.api-preview .prose :is(h1, h2, h3, h4, h5, h6) > a { + color: inherit; + text-decoration: none; +} +.api-preview .prose :is(h1, h2, h3, h4, h5, h6) > a:hover { + text-decoration: underline; +} +.api-overview { + max-width: 72ch; + margin: 32px 0; +} +.api-preview .api-overview .prose :is(h3, h4) { + font-size: 17px; + font-weight: 550; + line-height: 1.4; + margin: 28px 0 12px; +} .api-preview a, .api-nav a { color: var(--api-link); diff --git a/prototypes/api-docs/preview/layouts/_partials/api-prototype/overview-tags.html b/prototypes/api-docs/preview/layouts/_partials/api-prototype/overview-tags.html new file mode 100644 index 000000000000..796138cc1c00 --- /dev/null +++ b/prototypes/api-docs/preview/layouts/_partials/api-prototype/overview-tags.html @@ -0,0 +1,11 @@ +{{- /* Navigation placeholders and schema-only links are covered by the indexes. */ -}} +{{- $visible := slice -}} +{{- range .tags -}} + {{- $description := strings.TrimSpace (.description | default "") -}} + {{- $placeholder := or (eq $description (printf "%s reference." .summary)) (eq $description (printf "%s operations." .name)) -}} + {{- $schemaLink := findRE `^\[[^\]]+\]\(#schema-[^)]+\)$` $description -}} + {{- if and $description (not $placeholder) (not $schemaLink) -}} + {{- $visible = $visible | append . -}} + {{- end -}} +{{- end -}} +{{- return $visible -}} diff --git a/prototypes/api-docs/preview/layouts/api-prototype.html b/prototypes/api-docs/preview/layouts/api-prototype.html index 260e0e074f93..65ab4579df02 100644 --- a/prototypes/api-docs/preview/layouts/api-prototype.html +++ b/prototypes/api-docs/preview/layouts/api-prototype.html @@ -87,23 +87,18 @@

{{ $api.title }} API

API {{ $api.version }} · {{ len $api.operations }} operations · {{ len $api.schemas }} named schemas

-
-

Connect and authenticate

-

{{ $api.auth }}

- {{ if eq $api.connection "unix" }} -
curl --unix-socket /var/run/docker.sock http://localhost/v{{ $api.version }}/version
- {{ else }} - {{ range $api.servers }}{{ .url }}{{ end }} - {{ end }}{{ range $api.guides }} -

Related setup guidance ↗

- {{ end }} -
-
- API overview and workflows +
+

Overview

{{ partial "api-prototype/description.html" (dict "text" $api.description "api" $api) | markdownify }}
+ {{ $overviewTags := partial "api-prototype/overview-tags.html" $api }} {{ range $api.tags }} + {{ if not (in $overviewTags .) }} + + {{ end }} + {{ end }} + {{ range $overviewTags }}

{{ .summary }}

@@ -111,7 +106,18 @@

{{ .summary }}

{{ end }} -
+ +
+

Connect and authenticate

+

{{ $api.auth }}

+ {{ if eq $api.connection "unix" }} +
curl --unix-socket /var/run/docker.sock http://localhost/v{{ $api.version }}/version
+ {{ else }} + {{ range $api.servers }}{{ .url }}{{ end }} + {{ end }}{{ range $api.guides }} +

Related setup guidance ↗

+ {{ end }} +

Operations